虚幻引擎学习之路:新粒子系统Niagara
- 作者:admin
- /
- 时间:2018年02月09日
- /
- 浏览:12228 次
- /
- 分类:厚积薄发
在前期关于Unreal 4 引擎的技术推文中,UWA重点介绍了粒子系统的重点模块和高级功能。本文将进行介绍Unreal 4引擎中的新粒子系统:Niagara。需要说明的是,目前的Niagara粒子系统仍处于测试阶段,并非最终完成版。
这是UWA发布的第10篇Unreal 4技术文章,之前我们已经详细介绍过渲染系统、动画系统以及部分粒子系统的功能介绍,详情请转至UWA博客(blog.uwa4d.com)。同时,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。
一、Niagara使用
1.1 开启功能
在最新的Unreal 4引擎中,Niagara模块已经被加入到引擎的插件中。需要使用时,只需通过菜单Edit->Plugin打开Plugin窗口,搜索”Niagara”并选择Enabled即可,如下图所示:
然后,在Content Browser中点击鼠标右键会出现新的菜单选项FX,该子菜单中包含了Niagara的各种资源选项,如下图所示:
其中,上图红色框中显示了Niagara中包含的各种资源:Niagara System为粒子系统资源,Niagara Emitter为发射器资源,Niagara Script为粒子系统逻辑脚本资源,Niagara Parameter Collection为参数集合资源。接下来,本文将分别对其进行介绍。
1.2 Niagara System
Niagara System资源类似于Cascade中的Particle System资源。其创建方式可以通过右键菜单”FX->Niagara System”创建,将其拖入场景中时,引擎会自动创建Niagara Actor,并在其Niagara Component中引用该Niagara System资源:
其中,上图红色框显示了Niagara System资源,红色箭头表示将其拖入场景,蓝色框表示引擎生成的Niagara Actor,绿色框表示在其Niagara Component中引用拖入的Niagara System资源。
双击Niagara System资源可打开编辑器,如下图所示:
其中,上图红色框显示了Niagara System包含两个Niagara Emitter,在其区域内通过右键菜单可添加更多Niagara Emitter。Niagara System与Cascade的Particle System类似,可以包含多个Niagara Emitter,其执行顺序是从上至下。上图中绿色框显示了Niagara System的脚本节点图,其中包含两部分:Spawn和Update。Spawn只在该Niagara System初始化时执行一次,Update则会在每一帧都执行。从Niagara System的节点图中可知,其执行过程是顺序执行其包含的所有Niagara Emitter的Spawn和Update节点。
1.3 Niagara Emitter
Niagara Emitter类似于Cascade中的Emitter。只是在Cascade中,Emitter的创建和编辑都在Particle System资源中,而在Niagara中它成为一个独立的资源。通过右键菜单”FX->Niagara Emitter”可创建该资源,双击该资源可打开其编辑器,如下图所示:
在目前最新的4.18.3版本中,新创建的Niagara Emitter会出现一系列报错信息。上图红色框显示了错误信息。同时打开Selected Emitter Graph窗口会发现Emitter的节点图默认情况下为空。此时可先点击上图中的一系列Fix Error按钮,引擎会自动添加相应的Module,并生成相应的节点图。添加完成后如果发现还有错误提示,可先关闭Emitter编辑器界面,重新打开,错误提示便会消失,如下图所示:
其中,上图中Emitter的Module设置界面中显示了6种不同类型的Module。设计者在这6种类型中添加不同的Module可以实现不同的粒子效果,其操作方式与Cascade中的Emitter添加Module非常相似。但与Cascade最大的不同点在于,Niagara中的这些Module除了可以使用引擎内置的之外,还可以使用设计者通过节点图编辑的自定义Module。而用户自定义节点图即为Niagara Script,本文将在后续内容中进行说明。
Niagara Emitter中不同块的Module执行时机也不相同:
- Emitter Spawn 表示Emitter Spawn时执行的Module,并且只执行一次
- Emitter Update 表示Emitter Update时执行的Module,每帧都执行
- Particle Spawn 表示Particle Spawn时执行的Module,并且只执行一次
- Particle Update 表示Particle Update时执行的Module,每帧都执行
- Add Event Handler 表示Emitter事件相关的Module
- Render 表示Emitter渲染相关的Module
打开Selected Emitter Graph窗口可以看到此时引擎已经自动生成了节点图,并且节点图分为上述不同类型,如下图所示:
其中,上图红色框显示了Set Particle Position节点,绿色框显示了该节点是用于在Particle Spawn时执行并输出结果。
而Emitter节点图正好对应了添加的Module,如下图所示:
其中,上图红色框显示了Emitter Module设置界面中Set Particle Position Module,绿色框显示了其属于Particle Spawn类型。
由此可见,Niagara的总体结构与Cascade十分相似,都是分为两层:单个Particle System可包含多个不同的Emitter,通过设置不同Emitter以及参数可实现不同效果。但Niagara比Cascade更为强大的是,它能让设计者自定义Module,其编辑方式为节点图。
1.4 Niagara Script
Niagara Script在目前4.18.3版本中直接通过右键菜单创建会导致编辑器崩溃。绕开该问题的一个方式是先打开一个引擎内置的Script,然后将其另存为新的脚本,再进行编辑。为了使Emitter每帧都发射粒子,我们可以在Emitter Update中添加Spawn Rate Module,如下图所示:
其中,红色框显示了Spawn Rate Module,绿色框显示了目前发射的粒子数、Emitter的耗时以及所占用内存,通过该数据,设计者可以控制粒子的性能。双击红色框内的Spawn Rate即可打开该Script,如下图所示:
然后,将其另存为新的名字,即可创建出一个Niagara Script。在Niagara Script详细信息界面中可选择不用Usage来实现不同用途,其中包括:Module、Function以及Dynamic Input。分别表示该Script是用作Module,函数以及输入参数,如下图所示:
Module Usage Bitmask参数表示如果该Script是当作Module使用,其使用的类型是哪些。该设置能够在Module设置时根据归类进行提示,并提供快速选择。Category参数方便对Script进行分类,在设置时可根据分类快速查找。
其中,上图红色框宣示了Module Usage Bitmask的选项。在上图中Emitter Spawn Script和Emitter Update Script被选中,因此在Module编辑界面添加Module时,在Emitter Spawn和Emitter Update两类中会出现该Script。
此时,我们虽然添加了Spawn Rate Module,使得场景中出现了粒子,但是默认情况下粒子为灰色,难以分辨。因此,我们将Render中的材质修改一下,便可看到预览场景中出现了该材质的粒子,如下图所示:
其中,上图红色方框显示了修改粒子材质为M_Spark。于是可在左图预览界面中看到粒子。为了让粒子动起来,我们还需在Particle Update类型中添加Update Velocity Module:
并且,修改Particle Spawn中的Set Particles Velocity Module的Velocity参数z为10.0:
即可看到粒子向z方向移动:
我们用上述方法实现了简单的粒子移动,但Niagara提供的功能和节点远不止如此。通过编辑节点图,设计者可以控制粒子发射以及运动的整个过程,从而可以实现任意想要的粒子效果。
二、Niagara与Cascade比较
总体来说,UWA认为Niagara粒子系统在功能方面的优势主要有以下两种:
(1) Niagara提供了类似于BluePrint的编辑方式,从而使粒子系统的制作更加方便、更加灵活;
(2) 不光对粒子发射器可以进行控制,同时让用户可以对粒子也可以进行控制,从而可以让用户自定义粒子的运动状态,进而制作出更为复杂的粒子特效。
当然,老版本Cascade粒子系统已经包含了大量常用的粒子系统效果。UWA认为,如果Cascade能够满足您的需求,则直接使用Cascade进行编辑即可,毕竟使用已有功能可以节省开发时间。而当Cascade中提供的功能无法满足需求时,则可考虑使用Niagara。设计者可以通过Niagara实现更加符合项目需求的、特殊的粒子效果。