粒子效果
能看到有多种不同网格体的Mesh粒子,甚至还有Sprite粒子,他们拥有一定的速度和方向,并且会随着时间动态的变化。此外,在右侧那堆粒子中,每个粒子单位会在不同的Mesh以及Sprite上切换,即同一个粒子在不同时间会表现出不同的样子(可能是四面体,圆环,圆片,或是陀螺的样子),似乎是有一个切换按钮在不同的Renderer间进行切换。
Niagara蓝图部分
蓝图内包含两个发射器,分别对应左右两堆粒子。其差别主要是体现在决定可见性的逻辑上——左侧是在粒子出生阶段随机决定由哪种渲染器渲染,而右侧则是动态的改变粒子的渲染方式,让其呈现出样子会动态变动的效果。
效果实现分析
本例的核心在于另一个粒子的关键属性——VisibilityTag。默认情况下该值为0,而渲染器中Renderer Visibility也默认为0,则通常情况下这两者相等,即意味着它可见。但是当我们修改VisibilityTag时,则需要去找对应Renderer Visibility也为对应修改值的渲染器进行渲染,而原先这个Renderer Visibility = 0的渲染器就不可见了。
实现方面,随机粒子的初始朝向(Initial Mesh Orientation),并且随着时间方向发生改变(Update Mesh Orientation)。
在Particle Spawn阶段设定VisibilityTag,以在这个阶段就决定到底渲染哪一个Renderer。
最后就是力的解算(阻力Drag,卷曲噪声力Curl Noise Force),还有大小的缩放(使用了Curve工具)。
右侧那堆粒子的主要不同就是VisibityTag的设置的时机和方式。它是在Particle Update(意味着每帧执行)去设置,意味着每帧都可能是不同的值。这里采用了乘法的方式:NormalizedAge取值在0到1内,乘以4则是将取值范围扩大到0到4,toInt函数会将数字的小数部分舍去,保留个位上的数字,这样就可以通过粒子的生命周期来取得整数取与Renderer Visibility去比较。
t
o
I
n
t
(
P
a
r
t
i
c
l
e
s
.
N
o
r
m
a
l
i
z
e
d
A
g
e
∗
4
)
toInt(Particles.NormalizedAge*4)
toInt(Particles.NormalizedAge∗4)
总结
认识到了一个新的属性参数VisibilityTag,及其所能达到的效果。其实就跟基础的Position(绑定位置数据),Color(绑定颜色数据)等一样,VisibilityTag就可以理解为一个粒子绑定其渲染的数据。当我们理解了属性这一个核心概念,所有的这些属性参数就可以举一反三,我们继续去积累的意义就是可以使用的更加顺手,同时也反过来不断加深我们对于“属性”的理解。