话不多说, 先看效果!
第一步:分析效果
-
观察视频中的 Niagara 粒子效果, 首先这里我们使用的模板还是自带的喷泉(Fountain)模板, 因为大部分模块我们是用不到的(偷笑). 同时还需要是两个 SkeletonMesh ,用来实现变形的效果.
-
因为粒子实在两个模型间变换的,官方并没有这样的标准模块, 所以我们需要自定义一个模块, 通过输入两个模型的参数, 来控制我们的粒子变换,这里可以利用
Lerp来实现. 同时在模块中我们还要添加一条曲线, 用来控制玩家自定义输入来控制模型变换的时间以及变换的速率. -
其它的比如颜色, 以及粒子的数量可以通过我们自己的喜好去设置. 接下来就是制作流程.
第二步:制作流程
这里我们使用的是 4.21 版本【我会将 UE 5.0+ 的变化进行标注】, 首先打开我们的编辑器,将插件启用,并且重新启动工程.
创建粒子发射器和系统, 粒子发射器(选择喷泉 Fountain 模板), 以及我们的 Niagara 模块脚本
-
发射器的创建
-
粒子系统的创建
-
创建好后的文件以及命名
再导入我们的骨骼模型. 这里我用的是官方的 Mixamo Animation Pack, 我们可以在虚幻商城中下载之后添加到我们的工程目录当中. 当然也可以使用我们自己的其它模型资源.
打开粒子发射器 NE_Morph_T , 这里我们需要删除我们不需要的组件:
首先 是 SpawnRate 因为我们不需要持续生成, 只需要在开始的时候给一个固定的粒子数量就好,因此我们使用的应该是 Spawn Burst Instantaneous(可以理解为瞬间爆发 N 多粒子).
第二个 就是我们的 Add Velocity 模块, 这里需要定向控制粒子的移动,因此不需要给它任何的速度.
第三个 是生成的位置 Sphere Location, 这个模块是控制粒子生成的位置在一个球空间的随机点, 我们也不需要.
第四个 是 Acceleration Force(是否受重力),也删除掉.
第五个 去掉的是 Solve Forces and Velocity(可以理解为是否模拟物理).
第六个 去掉的是 Calculate Size By Mass (通过质量计算尺寸).
第七个 去掉的是 Drag Force(阻力).
第八个 因为将所有计算力和速度的模块都去掉了,因此最后一个 Solve Forces and Velocity(解析力和速度的模块)模块也要去掉...
给我们粒子一个固定的生存周期, 设置 Partical Spawn 模块下 Set Variables>Particles.Lifetime【UE 5.0+ 改为了 Set Parameters 】,点击右面的黄色勾勾的图标, 将值设置为 5.
在 Emitter Update 中创建 Spawn Burst Instantaneous 模块,用来设置爆发粒子的数量, 这里我们设置 Spawn Count 为 100000 (按照实际效果可自行调节)
- 更改
Spawn Count来设置爆发数量
之后来制作我们的变换模块, 打开 Ns_Md_T , 请先将模块的使用范围限定在 Particle Update Script(粒子更新脚本),控制我们的模块在该区域使用。
简单说明一下,这里我们可以获得粒子系统的一个映射, 通过获得的映射来得到粒子系统的某些参数, 再通过我们的计算,输出回粒子系统.
接下来我们在中间填写逻辑, 这里我们需要创建几个变量, 第一个和第二个都是Module下的 SkeletonMesh, 命名为Module.StartMesh 和 Module.EndMesh, 之后要获得 UV 的 width 值,可以通过 Map Get 获得 BeginDefaults 来传进来,之后添加 Module 下 Curve For Float 曲线来控制混合参数,最后一个是将曲线单位化的节点 Particles.NormalizedAge. 大概的思路就是获得两个模型的世界位置,并给一个随机的三角面 UV, 通过 Lerp 将各个参数融合.(这里参考了官方 Particle Spawn>Update Mesh Reproduction Sprite 脚本的实现方法,如果感兴趣可以去研究下)
回到我们的粒子系统界面,先将做好的粒子发射器添 NE_Morph_T 添加到粒子系统 Ns_Morph 中
在 Parameters 下的 User 分组中创建两个 Skeleton Mesh 的变量,并分别命名为 User.SKStart 和 User.SK_End. 创建好后将我们的粒子系统扔到场景中就会将我们创建的两个变量暴露到粒子系统的细节面板~ 这样就可以获取场景中的某个实例了.
之后在 Particle Update 模块中添加我们刚做好的 Ns_Md_T 脚本,如图所示,并将 User.SKStart 和 User.SK_End 两个变量拖到对应的地方,如图所示,这样我们就可以动态的在外部绑定我们需要变换的骨骼模型, 而不是需要每一次都进来改.
设置曲线 Curve 的值来控制两个模型混合的时间以及速率
最后我们可以自定义我们的颜色,可以自由发挥,想让他过多久变成什么颜色都可以.
来到视口,将我们喜欢的两个骨骼模型拖入场景中,并将两个模型的世界坐标都设置为 (0,0,0). 之后需要将骨骼模型的 Allow CPUAccess 打开,这样我们才能在粒子系统中用该模型
将两个模型设置为 Use Animation Asset ,选择随意的动画序列, 设置给我们的模型,让它在 Play 之后不是傻傻的摆着 T-pose .
将模型 visible 的 √ 去掉,使其不可见,同时将 Visibility Based Anim Tick Option 的选项改为 Always Tick Pose and Refresh Bones . 否则我们的粒子不会随着模型的动画进行渲染.
之后将我们的粒子系统拖入场景,将两个 Source 设置为我们的对应场景实例, 在将实例所用到的骨骼模型赋值给 Default Mesh, 之后点击 play 吧~~~