Unity学习笔记 Vol.71 使用Visual Effect Graph 制作多层次的特效
摘要

VFX Graph 让我们可以利用简单易用的可视化工具,在Unity中制作出令人惊叹的视觉效果。在本节中,我们将进一步学习 Unity 2019.3 中的 Visual Effect Graph 的用法。了解一些基础知识和概念,帮助大家开始在 Unity 中设计视觉特效。了解详细教程请参考官方视频。

教程
在这一节中,我们将近距离了解Unity 2019.3中Visual Effect Graph,学习基础的知识和概念,帮助大家入门Unity视觉物效制作。在之前的专栏中,我们介绍了Visual Effect Graph,学习了如何通过修改纹理来制作炫酷的特效。

而在本节中,我们将学习如何将多种技术组合起来,来制作出一种美观的多层次特效。如果不熟悉Visual Effect Graph或者整个视觉特效,可以查看之前的专栏,理解本节中讨论的部分概念。

我们将使用Visual Effect Spaceship Demo场景,Spaceship Demo展示了各种可用Visual Effect Graph制作的特效。在这个镜头中,我希望用特效让这台控制台表现为受损、故障的状态,显示器上滚动的纹理非常不错,但我们还能加一些特效魔法,给效果添加些独特又有意思的特性。

新建一个Graph让控制台能冒出些火花,我们希望火花能间断地生成。

因此需要先添加Periodic Burst功能块,将Delay Mode设为Random,Count设为1,Range设为0.5到1。

接着是Initialize文本框,添加一个Random Lifetime功能块,将范围设为0.1到0.25,添加一个Size功能块,将其设为1。

在Output文本框中,将Main Textures设为Sparks火花纹理,将Uv mode设为flipbook。

调整Flip Book Size匹配纹理的大小,接着将Color Mapping设为Gradient Mapped,将Blend Mode设为Additive。

这下我们就有了一个火花纹理,目前粒子效果在生成时会在纹理的中心,但我们想让火花从纹理的底部生成,那我们来调整下偏移属性。

在Output中添加Set Pivot XYZ功能块,将y轴位置偏移-0.5个单位,这下火花的底部与控制台对齐了。

再添加Orient:Face Camera Plane功能块,让火花能一直面对着摄像机。

到这看起来很不错了,生成的火花纹理可以很好地对齐控制台,而我们有四种可以使用的 纹理。

我们为Initialize文本框添加Set Text Index Random功能块,让生成的火花能有一定的变化。

最后,为粒子添加alpha和大小的修改,让其从控制台喷出后可以逐渐消失。

在Output中,添加Scale over Life与Alpha over Life功能块。现在从控制台迸出的火花更加好看了,不过光有火花没那么亮眼,要想让人眼前一亮,我们需要用其它效果层层叠加到火花上。
Visual Effect Graph的一个优点是,可以同时修改多个特效文本框,制作出多层次特效,我们再来拓展下Graph,添加一些会跟随火花纹理,从控制台迸发出的动态粒子,目前的生成文本框每次仅会调用一个纹理,而要制作动态火花,需要生成大量的粒子,因此我们得创建另一个Spawn (Context)。

添加一个Single Burst功能块,将Spawn Mode设为Random,我们需要有大量的粒子迸发出来,所以要将每次迸发的Count计数设为10到50,单个Single Burst功能块在特效生成期间仅会触发一次,而我们希望每次主纹理生成时,火花粒子能重复生成,从第一个Spawn文本框拖出事件输出,链接到第二个Spawn文本框start属性上。


现在,每当第一个框的 Spawn事件被触发,第二框的Spawn事件也会被触发,与第一个效果同步。

在Output中,将Main Texture设为Spark Single。

同时为了显示出火花,再添加Set Lifetime Random功能块,将数值设为0.3到2。

添加Set Velocity Random功能块来加入爆炸效果,让粒子向上运动、向两侧稍微偏移。

在Update文本框中,再添加些重力效果,让火花的运动更自然,这效果好多了,不过图像上依旧能进一步制作,让粒子看起来更像从控制台里跳出来的电火花,粒子有点太大了。

那我们来添加Set Size Random功能块,将大小设得小一点。

接着在Output中,将Color Mapping从Default改为Gradient Mapped,将Blend Mode设为Additive,效果很不错,不过我们还能继续制作,让火花看起来更棒。

我们来添加Set Direciton by Speed功能块,为火花制造些混乱的效果。功能会根据火花的矢量大小进一步分隔开粒子。

然后,在Update文本框中 添加Turbulance功能块,功能会为粒子的移动加入些干扰,让火花看起来会四处弹跳,要让效果正确动作,我们需要为粒子添加些质量。

在Initialize文本框中,添加个Set Mass Random功能块。

再细微调整下干扰效果,让阻力和力度随时间而变化,新建两个Sample Curve节点,分别连接到Intensity和Drag属性上,再添加一个Age Over Lifetime节点作为时间样本,在Intensity曲线上,一开始将值设为4,再随着时间迅速减小强度,在Drag曲线上,我们在粒子生命周期的起始处创建一个平缓的曲线,最大值约为0.2。
看起来很不错,我们还有最后一种方法,可为效果的爆炸添加更多动感,火花在刚出现时一般会比较长,然后再慢慢冷却、消失,我们可通过在生命周期中修改粒子的大小,来模拟这种效果。

在Output文本框中,添加Multiply Scale功能块,将Channel设为只影响Y轴,接着使用Sample Curve和Age over Lifetime节点来设置数值,火花应在开始时较长,在与空气接触后迅速缩小,因此在曲线中将开始时数值设为约30,接着让曲线大幅下落,随时间推进迅速减小粒子的大小。

目前效果看起来很怪,因为火花都只朝着一个方向,要让效果能正确运行,我们需要让它能对齐粒子的方向。

新加一个Orient Alone Verlocity功能块到Output文本框中。


我们可以继续微调粒子的大小和尺寸,直到效果合适,这个单个粒子便会转向运动的方向了,并且会在穿过空气时冷却下来,通过将两种效果堆叠起来,我们制作出了一种很不错的机械故障特效。但是,我们可以为Visual Effect Graph继续添加特效层和更多纹理。比如,如果想要凸显出爆炸,可以添加上一层Gradient Mapped的烟雾效果,让其看起来就像一个小火球从火源弹出来。

此外我们还能在Additive Blend Mode下添加分层烟雾,让它随火花迸发出现,接着可以添加第二层带alpha的烟雾,设置一个较大的矢量,作为爆炸时升起的黑云,通过像这样尝试Visual Effect Graph中的几种不同设置,将不同系统组合为层级,可以轻松地制作出好看的视觉特效。
