粒子着色器
粒子着色器是一种特殊类型的顶点着色器, 在物体被绘制之前运行. 它们用于计算材质属性, 如颜色, 位置和旋转. 它们与CanvasItem或Spatial的任何常规材质一起绘制, 这取决于它们是2D还是3D.
粒子着色器是独特的, 因为它们不用于绘制对象本身;被用来计算粒子的性质, 然后由空间着色器的画布组件使用. 它们只包含一个顶点处理器函数, 输出多个属性的内置函数(见下文).
粒子着色器使用转换反馈着色器, 这是一种单独运行的特殊类型的顶点着色器. 它像普通顶点着色器那样在缓冲区中接受数据, 但是也输出到数据缓冲区, 而不是输出到片段着色器进行像素处理. 正因为如此, 转换反馈着色器可以在每次运行时自行构建, 与其他着色器不同, 其他着色器一旦绘制到帧缓冲区, 就会丢弃它们计算的数据.
备注
粒子着色器仅在 GLES3 后端中可用。如果您需要在 GLES2 中使用粒子系统,请使用 CPUParticles。
渲染模式
渲染模式 | 描述 |
---|---|
keep_data | 不要在重启时清除以前的数据. |
disable_force | 禁用吸引力。(目前在 3.1 版本中未实现) |
disable_velocity | 忽略 VELOCITY 值. |
内置
标记为 “in” 的值是只读的. 标记为 “out” 的值是可以选择写入的, 不一定包含合理的值. 标记为 “inout” 的值提供一个合理的默认值, 并且可以选择写入. 采样器不是写入的对象, 它们没有被标记.
全局内置
全局内置的功能随处可见, 包括自定义功能.
内置 | 描述 |
---|---|
in float TIME | 全球时间, 以秒为单位. |
顶点内置
为了在SpatialMaterial中使用 COLOR
变量, 将 use_vertex_as_albedo
设置为 true
. 在ShaderMaterial中, 用 COLOR
变量访问它.
内置 | 描述 |
---|---|
inout vec4 COLOR | 粒子的颜色, 可以写入Mesh的顶点函数中, 也可以访问. |
inout vec3 VELOCITY | 粒子速度, 可以修改. |
out float MASS | 粒子质量, 用于吸引器(在3.1中没有实现). |
inout bool ACTIVE | 当粒子被激活时为 |
in bool RESTART |
|
inout vec4 CUSTOM | 自定义粒子数据。网格的着色器可以使用 INSTANCE_CUSTOM 访问。 |
inout mat4 TRANSFORM | 粒子变换。 |
in float LIFETIME | 粒子寿命。 |
in float DELTA | 处理时间差。 |
in uint NUMBER | 发射开始后的唯一编号。 |
in int INDEX | 粒子索引(在所有粒子范围内)。 |
in mat4 EMISSION_TRANSFORM | 发射器变换(用于非本地坐标系)。 |
in uint RANDOM_SEED | 随机种子,是随机的基础。 |