效果:
知识点:
1、纹理采样目前仅支持GPU粒子运行(Texture sampling is only supported on the GPU at the moment.)
2、网格位置输出每个粒子在网格中的归一化位置。我们使用该值来采样纹理,就像它是UV一样(The Grid Location outputs a normalized location of each particle in the grid. We use that value to sample the texture as if it were a UV.)
Output.GridLocation.Normalized Array location
3、杀死粒子模块的作用形式为“拒绝采样”。我们对纹理进行采样,然后在采样纹理的alpha值等于0的情况下新生成的粒子的第一帧将它们杀死。 (The Kill Particles module acts as a form of "Rejection Sampling". We sample the texture and then kill the newly spawned particles on their first frame if the sampled texture alpha equals 0. )
4、因为在发射器属性中没有勾选插值生成,新生成的粒子在出生的这一帧不会同时运行生成和更新脚本这使得这种技术非常节省资源。(Because Interpolated Spawn is unchecked in the emitter properties, newly spawned particles do not run both their spawn and update scripts on the frame they were born, making this technique quite inexpensive. )
操作步骤:
1、在Simple Sprite Burst发射器模版的基础上创建粒子系统。
2、修改发射器属性中的模拟目标为GPU计算模拟,同时勾选固定边界。
3、在发射器更新模块添加在网格上出生粒子。
修复问题,如下:
你会发现多了Grid Location模块。
4、把Spawn Burst Instantaneous模块删掉,修改出生粒子的数量。
修改粒子的大小
5、为了能够看到效果,我们需要对Grid Location和Initialize Particle 交换位置。
6、在粒子生成部分添加sample Texture,并设置其参数。
并设置采样的uv坐标来自于网格体粒子的规格化位置中某一个坐标。
7、把颜色中alpha为0的粒子消灭掉。
添加Kill Particles模块后,发现参数Kill Particles为布尔值,要么杀死要么不杀死,所以我们需要一个通过比较而得到的布尔值(Set Bool by Float Comparision)。
用线性颜色的alpha与0相比较(Make Float from Linear Color),当与0相等时,则为真需要杀死粒子。
线性颜色为Sample texture SampledColor
拓展提高:
1、可以使粒子的颜色为采样纹理的颜色。
2、可以加扰乱力和点吸引力,让后面动起来。
一开始没有扰乱力,逐渐加大。
一开始没有点吸引力,先排斥向外后向里面吸引。