MMD联动Unity学习日志 Vol.12

前言
上一次我们使用Visual Effect Graph创建了一个漂亮的火环,这次我们要在此基础上添加更加丰富的效果。下面让我们开始吧。

具体操作

目前位置上的Spawn Mode(生成模式)设置为Randomized(随机化),意思是整个表面均匀地产生。我们接下来要做的是将其设置为Custom,它将产生的粒子集中在圆环的一横截面向外喷射,而不是分散在圆环上。


点击Torus旁边的三角图标可以展开查看有关如何控制此问题的更多选项。我们可以调整圆环的Center(中心),Radius(半径)决定了Major(外环)的大小和Minor(内环)的横截面的半径,Arc(Angle)(圆弧角度)和Arc Sequencer(弧序列)。

圆弧角度是2 Pi (π)(最大),即0到360度。弧序列规定了圆弧可以旋转的最大角度,取值范围是0到1之间。将圆弧角度调到最大,再将圆弧序列从0拖动到1,来查看它的变化,通过操纵它我们可以让粒子看起来像一个圆沿着圆形路径在圆环的截面运动。
我们现在有一堆从圆环的小部分喷涌的粒子,另外还在随意应用一些粒子之后的最初产生的速度,接下来我们要给在每个粒子在产生初始都有推动,它保留恒定的速度移动,看起来会有点不自然。但更有趣的是,我们会施加一股力量给粒子而不是仅仅给予它们只是一个初始速度。

这样我们要在每一帧更新,并允许加速和减速超过粒子寿命的过程,让我们禁用该Set Velocity Random(设置随机速度)或是删除这个模块。这时粒子会突然消失,虽然它们表面完全静止不动它们还在持续产生,所以先不要着急,我们只是会在需要它们时再让它们出现。
我们下拉到Update(更新)Context(背景)来给粒子施加力量,我在更新里面右键添加Force,比如我们添加Gravity(重力),可以看到粒子持续向下流出,我们先把它删除。我们再添加一个Turbulence(涡流)的块,它可以模拟不规则随机的空气运动来吹飞我们的粒子。我们可以调整Roughness(粗糙度)为0.8,Intensity(强度)设为4或者5,你可以看到粒子像一点小火焰分流开来。我们再施加一个Vector Field Force(矢量场力),右键添加Force>Vector Field Force(force)。矢量场事实上是一个3D纹理,但它储存的不是颜色,而是矢量信息。想象一下,如果我用一束3D箭头指挥空气流动方向,如果我将信息储存在一张图像中,那它最好是一个矢量场。我们在Unity本身没有原始矢量场制作工具,它可以写一个脚本制作,但更多时候你可以使用特效软件像Houdini来制作。

另外在Asset Store里可以找到一款由JangaFX制作的非常棒的插件叫做VectorayGen。

在使用特效软件创建好矢量场之后,你就可以将其拖到这里。

现在我们可以在Visual Effect Graph包里面得到一个默认的矢量场,我们将它拖到矢量场3D图像。

我们可以保持默认的UnsignedNormalized(无符号规范化)和Relative Mode(相对模式),在下面的Field Transform(场变形),我们可以调整Size(大小)参数来改变矢量场覆盖的3D比例。

可惜的是我们除了看到粒子移动不能真正可视化矢量场,我们可以实验性地将SizeXYZ设置为2,然后不断提高Intensity(强度)值,最后参数设为10到15之间,我们拖动增大或减少参数,可以看到空气有多少阻力来影响粒子移动,它可以产生一个非常有意思的形状。

如果我回到Spawn Context(产生背景),我将Spawn Rate提高到10000,再将Initialize Capacity(初始容量)提升到50000,这是在所有GPU加速之后。你可以处理多少粒子完全依赖于你的显卡。

我们再增长粒子初始的生命周期,提高到2到5秒之间,使粒子在屏幕中可以拖得更长一点,它现在变得非常热烈,我们将大小和比例调小一点。帮助减小粒子的添加在另一个顶部的微光,调小参数直到它不那么耀眼。

我们将大小调为0.6,x比例调为0.02。
这时我们的粒子只能在圆环的横截面产生,如果我们可以移动源头环绕产生,就能把它变成动态,这样可以让粒子效果看起来更加生动。

如果你还记得拖动弧序列可以让粒子沿着圆环的外轮廓移动,在这里添加一点运动能额外给我们一缕缕烟雾的效果,手动拖动滑动条几乎可以模拟出来。当然我们可以不必这么做,因为我们能使用节点操作来自动运行。节点对定义额外公式或步骤是很有用的,它可以把粒子参数喂给我们已经设置好的块。如果你已经使用过Shader Graph,那么它对你来说就很容易上手了。我们创建节点,将逻辑工作连接都是使用相似的方法。创建节点除了是在Context(背景)之外,其它和创建Block(块)是一样的,在空白区域右击,选择Create Node,或者只需要按空格键直接打开节点菜单,在Operator里面,我们试着创建一个在Math(数学)里面的Trigonometry(三角)的Sine(正弦)或者一些其它的功能,这里面有很多数学工具,但还有另一个更简单方便的节点,它是Time里面的Periodic Total Time(周期性时间),它可以创建一个循环一定范围数值的功能,和正弦波非常相似,我们只要定义周期是多少时间,它就可以使用周期循环并定义一定范围的数值。

这里我们准备每秒循环0和1之间一次,它就会不断重复。我们再将它的输出连接到Arc Sequencer(圆弧序列),现在你可以看到粒子圆的明亮产生区域每五秒环绕圆环的火环一次,我们再将周期设置为20秒,现在你可能不会意识到粒子是围绕一个圆环移动。我们再做一些调整让粒子动态更加自然,将Spawn Rate提升到20000,再将Capacity增加到100000,它的效果如何取决于你的显卡,你只需要实验性的调整设置参数,不要忘记给其它粒子参数增加一些运动,Major Radius和Minor Radius都适用Periodic Total Time来修改,现在在范围的变化相对较小,但只是一点微小的调整都可以让你的效果变得很不一样,这有一些不同的设置并且最终效果动态调整每个参数就可以给粒子一点额外维度。


好了,你已经能看到你所能做到的可能全部是基础,但对任何评价来说,只用20分钟能够完成它都是不错的。