Unity邀请到了其社区内的超级用户分享他们对Unity使用的见解、技巧和诀窍。本期将由来自Jumpship工作室的哈利·阿利萨瓦基斯为大家带来他对于Unity使用一些技巧。
如果你还不了解哈利,那么你可以通过本篇文章中的案例来认识他,无论何时何地,他周边的一切都是关于着色器来展开的。
在即将发布的游戏《Somerville》中担任技术指导的哈利把他的“业余”时间都用再学习VFX和着色器上。他通过每周发布围绕游戏开发的推文“技术上的艺术”来激励创作者进一步学习于开发着色器的应用。
以下只是哈利最新作品的一些剧照。你可以在他的portfolio里找到更多作品。
以下是一些,由哈利·阿利萨瓦基斯总结的Unity VFX以及着色器的使用技巧:
粒子系统时间线
让我们从VFX小技巧开始进行介绍。虽然粒子系统效果之间的计时可能有点复杂,但实际上有一种简单的方法来使用时间线来迭代视觉效果。
在Unity中,时间轴内置了对粒子系统的支持,因此不需要任何自定义脚本。只需把粒子系统拖放到时间轴中,就可以实现平移。
将这些时间轴与动画或任何其他时间线相结合,可以让你更好地同步所有独立的动画元素,以创建一些真正有趣的VFX。
自定义顶点流
当我们使用粒子系统和自定义着色器时,有一个非常有趣的方法可以让你事半功倍——自定义顶点流。
我们可以使用自定义顶点流来获得更高级的粒子效果。
如大家所知,Unity中的渲染模型由包含顶点的三角形组成。这些顶点保存了关于模型的所有基本信息,例如它们各自的位置、紫外线坐标和顶点颜色。
我们可以向顶点添加任何种类的任意数据,并在自定义着色器中使用它。这就是粒子系统中自定义顶点流的妙处:我们可以将与粒子相关的信息传递给顶点,并且只在需要时使用它。
通过添加自定义顶点流我们可以在粒子系统下找到渲染器模块。启用该功能将显示所有已经使用的顶点流,如UV坐标和顶点颜色等。
进入着色器图形
最后,让我们使用着色器图形为我们的粒子系统制作一个简单的融合着色器。这里我们提到的是一个经过阿尔法剪辑的不发光的双面通用渲染管道(URP)着色器。这里要注意的是驱动溶解效果的因素,该因素是UVs的第三个组成部分。
你可能想知道这是为什么,特别是因为我们倾向于使用UV坐标通过x和y分量进行纹理采样的原因。
原因其实很简单,这样做可以让我们在每个数据流的名称旁看到数据存储的位置。
就比如,一个新的流存储在TEXCOORD0.z,其对应于第一纹理坐标通道的第三分量(也称为UV0.z)。通过加入粒子的lifetime age百分比功能,该值将从零开始,并在粒子存在期间向一移动。着色器能够让粒子随着时间的推移而溶解。
但是如果我们想要对粒子的存在时间进行更多的控制呢?lifetime age百分比就开始起作用了,但它是相当线性的,对于创建更复杂的效果不是很有用。解决办法就在于自定义数据模块:
我们可以用Custom1.x代替lifetime age百分比,这反过来允许我们使用一条曲线来改变粒子存在时间的值。
现在我们可以更好地管理我们的粒子如何随着时间的推移而溶解。
当然,还有很多数据可以传递给自定义顶点流。这让我们自定义着色器中使用此功能的可能性更大。