粒子着色器

粒子着色器是一种特殊类型的顶点着色器, 在物体被绘制之前运行. 它们用于计算材质属性, 如颜色, 位置和旋转. 它们与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

当粒子被激活时为 true , 可以设置为 false .

in bool RESTART

true 当粒子必须重新启动时(生命周期循环).

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

随机种子,是随机的基础。