粒子效果
从中心点向上发射粒子,粒子的运动有向上的初速度以及向下的重力,同时粒子运动伴随着拖尾效果和以该运动中的粒子为中心的粒子迸发效果,像是一颗燃烧着的带着尾巴的流星划过。
Niagara蓝图部分
本例的核心——Niagara中的事件系统(Events)。虽说是目前仅支持CPU粒子,但是以Niagara发展的趋势来看,可见的将来GPU中的替代方案也很快会被完善起来。回到Events这里,事件需要有发出者和接收者(即文档中的Event Generators和Event Receivers)。简单来讲,就是接收者将自己注册到相应的事件中,当发出者发出信息后,事件集中的这些事件对其做出适当的响应。
效果实现分析
本身的这个粒子喷泉的效果还是比较简单的,只需要一个有向上分量的初速度(Add Velocity in Cone),以及重力即可。(写在负责生成事件的Emitter里)
比较关键的是下面的一个功能模块——Generate Location Event,它会生成一个位置事件发送到接收方。EventCondition就是字面意思,即生不成成这个事件,是一个布尔量,当然也可以动态得去调控(比如我写个公式进去,当然暂时还没必要搞得复杂);Event Send Rate代表每秒发射(Event)的次数,越高的话,接收方获得的数据就越频繁,当然效果就会越精确,越低的话,效果就会相对而言没有那么精确,这二者之间的平衡与调控,就是经验和创造力的体现了。
此外有一个点还需要注意,Generate Location Event需要去读Particle.ID这个属性,需要在Emitter Properties中手动打开。
来到接收方,注意这里有两个接收方Emitter,分别对应了拖尾和子粒子。事件接收方粒子发射器的构建方法是:添加Event Handler(事件处理器),其自带一个Event Handler Properties用来调控事件接收器基本属性,如监控哪一个发射器中的哪一个事件、生成具体多少的粒子(代替了之前的Spawn Rate或者是Burst Spawn)等等。此外还需要添加Receive Location Event来具体接受响应的事件并作简单处理(拿到位置、速度等等属性),如是否继承传来事件的粒子的速度等等。
当然通过事件拿到的属性还是相对有限的,如图
总结
事件系统在逻辑编程中也是重要的一部分,是属于性能优化的重要部分,它可以系统免于去做每帧的检测(Unity的Update,UE4的Tick)。这里CPU无法被GPU取代的原因我可以大概分析一下,就是即便是在CPU粒子中,EmitterUpdate的工作依旧是CPU在做,通过事件而做的spawn即是代替了这一部分的工作,而在GPU中是没有办法去监听GPU粒子的事件的(除非是为它单独定制一块寄存器?),因而这个部分的粒子只能采用CPU的。