Unity奇异博士传送门的实现思路剖析
雨下微风
2022年04月01日 12:40

这并不是一个教程,毕竟也只是我的个人学习作品,非原创。

这里是通过VFX来实现的,VFX是unity中进阶版的粒子系统,你首先得知道粒子系统这个东西,否则就没法理解。当然VFX并不是我的学习重点,如果你想深入了解特效相关领域的话,VFX应该是很重要的。

首先第一步就是安装VFX:

就是这个:Visual Effect Graph

要注意的是,实现奇异博士传送门需要用到一个核心功能:切线方向的速度,默认情况下是找不到的,必须在首选项中将VFX的实验性模块打开:

就是这个Experimental Operators/Blocks

然后你就可以创建一个VFX的粒子系统了:

就叫Visual Effect Graph,在Assets中创建完再拖到层级中就可以看到效果

初始的效果就是这样的,我忘了关后处理了,实际没这么亮

然后你可以双击Assets中的VFX打开它的编辑器,它之所以叫做Visual Effect Graph就是因为它跟Shader Graph、ASE这些一样都是连连看:

它包括这几个基本模块:生成粒子-初始化粒子-更新粒子-输出粒子

然后我就来剖析一下奇异博士传送门的实现方法(毕竟这不是VFX教程),首先我们需要将粒子的随机速度去掉,否则它会乱飞不受控制:

你可以设置xyz值分别控制粒子在xyz方向的随机速度

在去除了随机速度以后就变成一个点了

然后我们希望这些粒子是呈环形分布的,因为奇异博士的传送门是一个环,这里就需要你在初始化模块当中创建一个新的Block:Position(Torus),Torus就是环的意思,你可以设置它的Major Radius来控制环的大小:

现在它就是这样的,没有明显的环是因为我们的粒子太少了

一方面我们的粒子太少了,另一方面粒子太大了,因此我们要增加粒子的数量,减少粒子的大小。粒子的数量是最上面的spawn模块来控制的,spawn意为产卵,就是生成粒子的速率,我们可以设为10000,当然可以更多,下面的capacity是容量的意思,容量太小的话生成的多余的粒子会被丢弃,所以也要增大:

设置大小是在输出模块当中,它默认的是set size over life这个模块,我们不需要这么复杂,把它删了然后重新创建一个set size的模块就行,将size设为0.1:

然后你就可以看到这个环了:

但是粒子本身的渲染图像是个坐标轴图像,并不是我们要的,我们可以将粒子的渲染贴图改为一个白点,也在输出模块中:

它就变成了这样:

接下来就是这个项目中最核心的一个模块:add velocity from direction&speed(Tangent),即从粒子的切线空间给粒子增加一个速度,这个只有打开了实验性模块之后才能找到这个模块,这里切线空间的x方向是垂直于环面的,y方向垂直于x和切线方向的,只有z才是切线方向,所以我们需要将它的z方向赋予一个值,正负代表了不同方向,speed代表了速度的快慢:

然后你就会看到这些粒子绕着圆环运动起来,速度越大,粒子越会飞离环,这里我就不给动图了,但是它的效果已经很有感觉了:

但是奇异博士的传送门是像火花一样的,火花不是圆的,应该是细长的并且沿着速度方向运动,所以我们需要更改粒子的朝向,因为默认的粒子朝向是向相机的,如果不改这个的话,所有的粒子都会朝向观察者,也许可以用这个做子弹时间...不过我们还是在输出模块中将粒子朝向改为沿速度方向:

然后引入一个新的模块:set scale,我们可以用这个模块分别修改粒子在xyz方向的大小,这里将y值设置的比较大,xz值设的比较小就可以实现一个细长的粒子效果:

就是这样,我已经看到奇异博士了:

然后我们在输出模块中改一下它的颜色:

已经接近完成了,如果再增大粒子数量的话效果会更好:

接下来我们可以优化一下,首先在update模块中加入linear drag用来拉住粒子,让粒子不要飞的那么散:

同时加入重力模块让这些粒子有物理的感觉,但是粒子不能在重力作用下一直往下掉,需要给它一个碰撞体,这里先给一个平面碰撞体(Collide with Plane),稍微改一下碰撞体的位置,因为默认的位置在环的中间会把环给切掉:

然后你就可以看到这些粒子会不断的掉到一个地面上溅起来的感觉,就跟火花一样:

但是环的中间也有粒子落下,显然是不对的,因为中间应该是空的,所以我们再加一个球形碰撞体,它的半径要跟环的半径一致:

这下就好一些了:

我们法线环的顶部有一些瑕疵,这是因为粒子的生命周期太长了,导致有一部分粒子本来应该消失但依然残留,所以我们要在初始化中设置粒子的生命周期,A代表最小生命周期,B代表最大生命周期,我们将其设成这样(默认应该是A=1,B=3):

这样就对了:

因为我这里给的粒子不多所以效果不是很好,可以适当增加粒子数量。然后很重要的一点就是这个环的内侧应该粒子更密更亮,而不是像现在这样分布的比较平均,所以我们可以把整个粒子系统复制一份(在同一个编辑器里面直接Ctrl+D复制所有的模块),然后将它的生命周期再缩短,让它还没飞出去就消失,这样可以让这些粒子集中在内侧:

就像这样,你可以增大内侧的粒子数量或者亮度颜色之类的:

然后将两者叠加(同时打开就行了),我这里没有更改粒子数量,效果不是很明显,你可以自己尝试:

最后一定要加上后处理的bloom(泛光)效果,你会发现新世界:

这篇文章只是针对奇异博士传送门这个特效做了一些简单的分析,具体效果以及其扩展的可能性都需要你自己去探索和尝试。本人并不是专攻特效的,也达不到做一个视频教程的境界,因此只能在这里做一个分享,希望读者可以自行探索。