小强实验室 发表于 2022-1-18 18:22:17

UE4 2.5D Niagara Dash VFX

大家好,这里是Wild Wolf,距离上次更新快有半年时间了~~~
其实攒了很多内容想写,但是因为项目保密的关系不能写~~不然就翻车了。。。
参与独立游戏研发接近半年了,前期准备阶段就在尝试去实现和解决各种脑海里想要实现的功能和效果,所以
本人作为一名TA几乎参与了一款游戏开发所有模块的工作,包括程序,动画,材质,场景优化,特效以及工具等等,小团队就这样,身兼多职~~~
然后某一天主程序(连策划都没有,程序自己当策划hhhhh -.-)说需要制作一个人物冲刺的特效,行,按照惯例先看看某tube或者B站有木有类似的效果,然后自己仿一个出来,这年头没有谁做特效从0开始的吧- -    都是东拼西凑完事~~~    然后问题就来了,因为做的独立游戏是横板2.5D,网上的效果以3D居多,看了一圈下来居然能参考的所剩无几,有一个看上去感觉还行的但是制作方式有很大限制~~~   



通过材质偏移实现类似拖尾的效果,受限于材质太单一

回到我们自己的主角上十个不同的材质没办法这么做,所以只能靠自己,大概琢磨了两三天玩出来一个不是那么复杂的效果~~~


场景和人物资源东拼西凑的,后期全部要换掉,所以不碍事~~
Dash冲刺效果总共三个部分组成:
1,Niagara制作粒子拖尾和Sparks
2,Ghost Trails 幽灵拖尾
3,蓝图实现整体逻辑

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
首先对整体效果做一个拆分
1,Niagara制作粒子拖尾和Sparks:
进入Niagara系统,组成很简单,两个发射器



分别负责采样人物骨骼位置信息和闪光粒子

NE_SampleSkeletalMesh    单独启用效果


可以看出,仅仅只是一个模拟速度感的一个抽象的效果,但其实是黏在主角人上的一堆模型~~~
关闭所有效果调节的Module的样子~~




https://www.zhihu.com/video/1465016696888680448
就是在人物身上释放一群模型同时跟随人物移动~~如何实现的呢,其实官方在很早的直播就有讲到~~包括印度阿三的教程也有涉及到~~~
传送门:
两个核心的Module->initialize Mesh Reproduction Sprite 和 Update Mesh Reproduction Sprite
为了细化每一个步骤,这里我们用小白人做演示:
新建一个NiagaraSystem,选择Fountain,只保留基础模块,其它全删


接着添加Initialize Mesh Reproduction Sprite模块,预览模型选择小白人


加高粒子发射个数至20000,Emitter State修改粒子循环为只执行一次,循环周期改为Infinite,粒子生命周期改为0.1秒,可以在预览窗口看到效果


拖入场景看到粒子附着在小白人身上~~


但是这一步仅仅只是通过Niagara粒子系统采样模型顶点的世界位置信息作为例子生成的位置,说简单点,就是粒子刚刚出生,那么要让粒子黏在小白人身上我们需要实时更新粒子的位置信息,这里就需要继续添加
Module->Update Mesh Reproduction Sprite
修改粒子渲染为GPUSim,减少释放个数到5000左右,修改粒子大小为4


到这一步感觉好像没什么变化哈~~~   稍安勿躁,进入小白人的蓝图,在Mesh下面添加我们的粒子


然后临时关闭Update Mesh Reproduction Sprite进程,同时修改粒子生命周期为1.0秒,运行效果如下


这是因为粒子在Spawn的那一刻本身带有速度属性,所以会散开,官方是这么说,不细究~~
所以我们需要更新粒子在生成之后每一帧的位置,开启Update .....


粒子就正常了~~


接着修改粒子发射模型,发射圆锥,修改模型朝向以及模型大小




就出现一群模型围绕在人物身上的效果


接着我们进入一个横板游戏的视角,调整对应的数值看看效果




使用Spawn Per Unit检测到当前有速度增量时生成粒子,然后调整模型的长度即可
接着新建一个材质如图


逻辑很简单,再稍加设置,效果如下


横板游戏,我希望效果不要盖住我们的人物,感官上就感觉是效果渲染在人物后面一样,这里我用了一个最简单粗暴的方法,直接限制粒子模型的位置信息
新建一个自定义Module ,强行把粒子的轴向写一个固定值,相当于把粒子压成一个平面






其实另一个角度看是这个样子


嗯~~各位轻喷~~~2333
然后大家再调整下细节方面的东西就行了~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NE_Sparks单独启用效果



制作方式也很简单,采样模型顶点位置信息,然后反向喷射粒子完事~~~


这里就不需要用Initialized了,直接采样模型就行,然后添加了一个Inhert Velocity然后速度给一个负值就能让粒子反向发射出去~~~




大致效果就出来了,然后再用蓝图传递一些细节的控制即可
两者组合在一起即可


到这里,Niagara部分完成~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
进入第二部分:
Ghost Trails 幽灵拖尾
其实是虚幻商城的一个资源,魔改了之后的效果
单独看看效果就是~~~


其实就是在很短的时间内连续释放多个Pose然后消失掉~~~   


具体实现过程就不啰嗦,有蓝图基础的同学去某宝~~   呸。。。   虚幻官方商城直接可以买到~~
几个关键步骤说一下:



这里的开启模型自定义深度渲染开关为后面材质乱序做准备

Copy Pose from Skeletal Component 这个节点就是拷贝当前动画的Pose然后复制


然后TrailsCore在生成的时候添加一个Poseable Mesh用来承载拷贝过来的Pose


接着替换给Mesh一键添加所有材质


材质也很简单,只不过为了修复UE4本身渲染本透明时候的乱序,多加了一部分逻辑用来处理乱序问题,就是个像素深度和自定义深度的对比,网上一堆教程和文章告诉你怎么做~~~
记得开起材质的Allow Custom Depth Writes允许半透明材质写入自定义深度,不然就对比了个寂寞


同时开启Used With Skeletal Mesh 和 Used With Clothing的开关,不然材质编不过去,无法给模型添加上材质
(此处感谢腾讯天美大佬 @大画渣 的帮助)
回到TrailCore


拷贝Pose 赋予材质 然后给一个当前人物运动反方向的偏移作为初始化操作
接着进入核心部分


这一段就直接拷贝了代码,然后去掉自己不需要的部分
其实逻辑很简单,获取当前释放瞬间游戏时间(这个时间一直在持续增加)然后跟定义好的Life Time做一个映射,然后把单位化的结果给材质的Alpha,但是这个Alpha是0到1所以需要用一个Lerp反转数据来实现模型消失的效果,当Alpha无限接近于0的时候也代表这个模型即将被销毁Destory。


接着在人物冲刺的时候写个逻辑子啊短时间内释放多个当前pose的Mesh也就是一个Actor,这个Actor只负责呈现出当前动画的Pose然后消失
看看几种不同数值的对比:
释放间隔0.2模型消失1.0


释放间隔 0.02模型消失0.5


然后再调整下其它参数比如材质BaseColor,Frenel,这些东西就差不多了
接着为了让效果能通用,给别的角色也能用,我们得让引擎知道怎么去拿人物的Mesh,可以使用最通用的方法,加标签Tag,视线转移到我们的角色


需要拿到的是Mesh,然后可以在初始化的时候自动给Mesh打上Tag,如图


然后找到带有特定标签的Component即可


到这里基本上快要完成了~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3,蓝图实现整体逻辑
创建一个Actor Component,然后通过添加Component的方式让功能生效


其实也是常规做法,让功能的移植更方便~~~   
最后再把剩下的部分参数微调即可


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
此文章仅作为个人思路的参考,其实可以添加细节的地方有很多   
鉴于目前网络上相关资料很少,所以就提供了自己的一个制作思路~~~
创作不易~~~   走过路过点个赞吧客官~~~   

-----------------------------

彤彤丶Safe 发表于 2022-1-18 19:24:55

很好 下一秒就是我的了[蹲]

北枫 发表于 2022-1-18 20:39:25

很棒,我已经学会了[赞同]

想多了 发表于 2022-1-18 22:28:45

太屌了沃夫

海豚 发表于 2022-1-18 23:30:12

欢呼

晶晶 发表于 2022-1-19 00:53:42

可以可以

九月81 发表于 2022-1-19 02:08:54

大佬太强了

晚风 发表于 2022-1-19 03:23:24

欢呼
页: [1]
查看完整版本: UE4 2.5D Niagara Dash VFX