粒子着色器(Particle shaders)
粒子着色器是一种在物体被绘制之前就执行的特殊顶点着色器。它们被用于计算材质的属性,例如颜色,位置,旋转等。它们可以使用各种(2D,3D)标准着色器进行绘制,这依赖于它们自身是2D还是3D。
粒子着色器是独一无二的,因为它们并非用于绘制对象本身;它们用于计算粒子属性,这些粒子属性稍后会被用于2D着色器的画布项目(which are then used by the CanvasItem of Spatial shader)。粒子着色器只包含顶点函数,这些顶点函数可以输出多个属性(详见下方的顶点内置属性)
粒子着色器使用一个变换反馈着色器(transform feedback shader),变换反馈着色器是一种独立运行的特殊类型的顶点着色器。它们可以像普通顶点着色器一样从缓冲区获取数据,不同的是,它并不向片元着色器输出以供像素处理,取而代之地,它可以向数据缓冲区输出。因此变换反馈着色器每次运行都可以自身为基础,而不像其它着色器,一旦将数据写入缓冲区便抛弃计算结果。
注意:粒子着色器仅在GLES3中有效。如果你使用GLES2,请使用CPUParticles。
渲染模式
渲染模式 | 描述 |
---|---|
keep_data | 在重启时不要清楚之前的数据 |
disable_force | 关闭引力. (3.1版中还没有实现) |
disable_velocity | 忽略VELOCITY 的值 |
内置顶点属性(Vertex built-ins)
当值注明为in
时,意味着只读,当值注明为out
时,意味着可以选择性地写入,但是并不一定提供一个有效值。当值注明为inout
时,它会提供一个有效的默认值,并且可以选择性地写入。采样器(sampler)不是可写对象,它们也没有被标记。
如果想要在3D(空间)着色器中使用COLOR
属性,请将use_vertex_as_albedo
设置为true
。
Built-in | Description |
---|---|
inout vec4 COLOR | Particle color, can be written to and accessed in mesh’s vertex function. |
inout vec3 VELOCITY | Particle velocity, can be modified. |
out float MASS | Particle mass, use for attractors (not implemented in 3.1). |
inout bool ACTIVE | True when Particle is active, can be set to false. |
in bool RESTART | True when particle must restart (lifetime cycled). |
inout vec4 CUSTOM | Custom particle data. Accessible from shader of mesh as INSTANCE_CUSTOM. |
inout mat4 TRANSFORM | Particle transform. |
in float TIME | Global time in seconds. |
in float LIFETIME | Particle lifetime. |
in float DELTA | Delta process time. |
in uint NUMBER | Unique number since emission start. |
in int INDEX | Particle index (from total particles). |
in mat4 EMISSION_TRANSFORM | Emitter transform (used for non-local systems). |
in uint RANDOM_SEED | Random seed used as base for random. |
网友评论