跳到主要内容

粒子(Particle)着色器

粒子着色器是一种在物体被绘制之前就执行的特殊顶点着色器。它们被用于计算材质的属性,例如颜色,位置,旋转等。它们可以使用各种(2D,3D)标准着色器进行绘制,这依赖于它们自身是2D还是3D。

粒子着色器是独一无二的,因为它们并非用于绘制对象本身;它们用于计算粒子属性,粒子着色器只包含顶点函数,这些顶点函数可以输出多个属性(详见下方的顶点内置属性)

粒子着色器使用一个变换反馈着色器,变换反馈着色器是一种独立运行的特殊类型的顶点着色器。它们可以像普通顶点着色器一样从缓冲区获取数据,不同的是,它并不向片元着色器输出以供像素处理,取而代之地,它可以向数据缓冲区输出。因此变换反馈着色器每次运行都可以自身为基础,而不像其它着色器,一旦将数据写入缓冲区便抛弃计算结果。

注意

粒子着色器仅在效果模式中有效。如果你使用性能模式,请使用 CPUParticles。

渲染模式

渲染模式描述
keep_data在重启时不要清除之前的数据
disable_force关闭引力
disable_velocity忽略 VELOCITY 的值

全局内置

全局内置可在任何地方使用,包括自定义的函数

内置描述
in float TIME引擎启动后的全局时间, 以秒为单位(始终为正数)

vertex 内置

如果想要在3D(空间)着色器中使用COLOR属性,请将use_vertex_as_albedo设置为true

内置描述
inout vec4 COLOR粒子颜色,可以在Mesh的顶点函数中写入和访问
inout vec3 VELOCITY粒子速度,可以被修改
inout bool ACTIVE当粒子被激活时为true,可设置为 false
in bool RESTART当粒子必须重新启动时为true (生命周期循环)。
inout vec4 CUSTOM自定义粒子数据。
inout mat4 TRANSFORM粒子的变换
in float LIFETIME粒子生命周期
in float DELTA处理时间差
in uint NUMBER粒子发射后的唯一编号
in int INDEX粒子索引(在所有粒子范围内)
in mat4 EMISSION_TRANSFORM发射器变换(用于非本地坐标系)
in uint RANDOM_SEED随机种子