原文链接:https://blog.uwa4d.com/archives/2210.html
之前UWA已经完整介绍了Unreal 4引擎中渲染模块和动画模块,现在我们将介绍粒子系统的相关功能。本文将分两部分介绍Unreal 4引擎的粒子系统,其中包括:粒子系统的创建、类型和特殊功能。通过本系列文章,UWA希望读者能学习到以下知识点:
- Unreal 4引擎中粒子系统如何使用
- Unreal 4引擎中粒子系统所能达到的视觉效果
- Unreal 4引擎中粒子系统的LOD、向量场等功能使用
- Unreal 4.18新推出的Niagara粒子系统功能使用
在此,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。
基础功能
本节将介绍Unreal 4引擎中粒子系统的基础功能,主要分为两个部分,其中包括:粒子系统的结构和使用以及不同类型模块的介绍。
1.1 粒子系统结构和使用
Unreal 4引擎的粒子系统一共包含了4个层次结构:Emitter Actor、Particle System(资源)、Emitter以及Module。
Emitter Actor是场景中摆放的粒子系统对象。它默认具有粒子系统组件,在该组件中的Template参数中可以引用创建好的Particle System资源进行渲染,如下图所示:
其中,上图黄色框显示了场景中的Emitter Actor对象以及其组件,红色框显示了其粒子系统组件Template参数中引用的Particle System资源,绿色框显示了已创建好的Particle System资源。编辑场景时,只需将Particle System资源拖入场景,引擎便会自动创建对应的Emitter Actor对象。
Emitter和Module分别是Particle System资源中包含的两种结构。其中,一个Particle System资源可以包含多个Emitter,一个Emitter中可以包含多个不同的Module。它们与Unity引擎中的ParticleSystem和Module的结构和概念相似。下图显示了Unreal4和Unity引擎中粒子系统编辑器的截图:
在Unreal 4引擎中的粒子系统编辑器截图中,红色框显示了粒子系统资源中一个Emitter,绿色框显示了Emitter中的一个Module。下图显示了Unity引擎中粒子系统编辑器截图,红色框显示了粒子系统中的一个Particle System,绿色框显示了Particle System中的一个Module。在Unreal 4引擎粒子系统中有一个比较特殊的Module—Required。这个Module是每个Emitter默认包含并且无法关闭的,它类似于Unity引擎粒子系统中自带的参数设置,如上图中黄色框显示的部分。
Unreal 4引擎粒子系统中的Module计算顺序是从上至下,Module对于最终效果的影响也是在已执行的Module基础上进行累加。因此,在编辑Emitter时可以将重要的Module放在优先级更靠前的位置。Module前后顺序可以在Emitter界面通过鼠标拖拽进行调整。对于Module中参数的修改,Unity引擎是直接在Module的下拉列表中进行设置,Unreal 4引擎则是选中需要修改的Module,在编辑器的Details面板中进行设置,如下图所示:
其中,左图红框显示了Unity引擎粒子系统中Module参数的设置界面,右图红框显示了Unreal 4引擎粒子系统中Module参数的设置界面。
Unity与Unreal 4引擎粒子系统结构并不完全相同。其不同点在于,在Unity引擎中只有粒子系统组件,而没有粒子系统资源。因此,在Unity引擎中创建粒子系统需要先创建Game Object并添加粒子系统组件后才可将其保存成Prefab资源。
1.2 Module
Unreal 4引擎粒子系统支持多种不同类型的Module。在编辑粒子系统的发射器时可以任意添加和删除Module,从而开启和关闭Module中的功能。不同的Module组合和参数设置能够实现丰富的粒子特效,例如:修改粒子的数量、速度、旋转、颜色以及生命周期等。在接下来的内容中,本节将介绍几种比较特殊的Module。
1.2.1 Type Data
Type DataModule实现了不同类型的粒子系统。其类型主要包括:
- Sprite
- GPU Sprite
- Mesh
- Beam
- Ribbon
- AnimTrail
在创建粒子系统时,默认情况下使用的是Sprite类型。该类型为CPU计算模拟粒子运动,并使用Billboard面片渲染的粒子。下图显示了该种类型粒子实现的烟雾效果:
上图中的左图显示了该粒子系统渲染时所使用的面片可视化信息,中图显示了渲染结果,右图显示了Emitter的设置。该种类型的粒子系统是最普通也使用最多的一种,它可用于模拟各种烟雾、火焰以及火花粒子等效果。
GPU Sprite类型的粒子与Sprite类型效果类似,只是将模拟粒子运动的计算放在GPU端执行。相比CPU端模拟粒子运动,它的优势是减少了CPU端的开销,借助GPU的高性能并行计算,能够支持更多的粒子数目。其添加方式是在Emitter上点击右键,在Type Data菜单中选择New GPU Sprite即可,如下图所示:
其中,上图红框显示了Smoke和Sparks两个Emitter中使用了GPU Sprite,其主要原因是这两个Emitter中的粒子数目较多。GPU Sprite目前在PC端都支持,在中高端Mobile机型中也同样支持,即只要设备支持MRT功能即可。
Mesh类型支持了使用网格来渲染粒子。其添加方式与其他类型一样,Mesh模型的设置是在Mesh Module的Details面板中。Unity引擎中也同样支持类似功能,设置方式是在Render Module中,如下图所示:
左图是Unreal 4引擎中Mesh粒子的设置界面,右图是Unity引擎中Mesh粒子的设置界面。其中,Mesh设置为Chair模型,下图显示了该粒子系统的渲染结果:
Beam类型粒子是一种可实现在两个物体之间连线的粒子,并且可随着两物体之间距离变化进行拉伸或缩短,其效果类似于连接友军的灵魂链,或是带跟踪的激光束。Unity引擎也同样支持该效果,但是实现并不在粒子系统中,而是单独作为一种渲染效果,叫做LineRenderer,如下图所示:
其中,左图显示了Unreal 4引擎的Beam类型粒子特效设置界面,右图显示了Unity引擎中Line Renderer的设置界面。其渲染效果如下图所示:
上图效果是采用固定长度渲染的Beam粒子特效,如果需要将Beam粒子两端分别挂接到两个Actor上,则还需添加Source和TargetModule,并做相应设置,如下图所示:
上图中,左图红色方框显示了在Emitter中添加Source和TargetModule,中图绿色方框显示了将Beam Data Module中Beam Method修改为Target以便挂接到物体上,右图显示了在Source Module中修改Source Method和Source Name参数为设置挂接点使用。下图显示了渲染效果:
其中,EmitterActor的Details界面中红色方框显示了将Beam Source和Beam Target挂接点分别设置到Cube和Sphere物体上。
Ribbon类型粒子可以用于实现飘带的效果,其原理是将粒子之间用飘带连接起来。Unity引擎也支持类似效果,但是实现并不在粒子系统中,而是单独作为一种渲染效果,叫做TrailRenderer,如下图所示:
左图显示了Unreal 4引擎中Ribbon粒子设置界面,右图显示了Unity引擎中Trail Renderer的设置界面。下图显示了Ribbon粒子渲染结果:
其中,在场景移动该粒子时,粒子飘带会跟随着轨迹飘动并逐渐消失。
AnimTrail类型粒子也是模拟拖尾效果。它可以挂接到角色动画的骨骼上,跟随挂接骨骼的运动轨迹形成拖尾效果。下图显示了AnimTrail类型粒子的设置界面:
通过在骨骼动画的Notifies Timeline上添加Trail Notify,并设置好PSTemplate和挂接骨骼即可看到动画播放过程中骨骼上的拖尾特效,如下图所示:
上图红色框显示了在Walk动画中添加了Trail Notify。Trail Notify的长度表示了Trail粒子播放的时间。绿色框显示了将PSTemplate参数设置为创建好的粒子系统PS_AnimTrail,以及将挂接骨骼设置为calf_l和foot_l,即左腿。View视图中白色拖尾即为腿部运动过程中的AnimTrail特效。
小结
以上,则为Unreal 4引擎粒子系统学习系列中的第一部分,重点介绍了Unreal 4引擎中粒子系统的使用和操作。下周,我们就Unreal 4引擎中粒子系统的更多功能进行更为详细的讲解。