利用 VFX 制作特效为作品赋能添翼

VFX Graph是Unity的新特效工具,创作者们可以使用VFX Graph编辑器中的节点来设计特效。在广东省游戏产业协会与Unity中国联合主办的IGDC国际游戏开发者大会中,Unity中国技术美术黄东俊先生以“利用VFX制作特效”为主题,讲解如何更好使用VFX Graph,同时分享多项经典应用案例。VFX Graph让科技与艺术紧密相连,为艺术家和游戏开发者提供丰富的创作空间,突破传统束缚,构建出游戏艺术新的语言方式。
Hello,大家好,我是黄东俊,我是Unity的技术美术。我今天和大家分享特效的一个制作工具,不仅可以制作非同反响、炫酷的效果,而且它模拟的数量级可以达到数百万以上级别。
以上这些demo都是用VFX Graph这个工具制作的。当大家了解这个工具后,上面这些demo制作起来蛮简单的。

VFX概述

我们先看一个概述。什么是VFX?
下面这个界面就是VFX在制作特效时的过程。首先,它是一个次时代的特效工具。它可以制作一些很炫酷的效果,本身是基于节点的方式,而这种方式是行业的趋势。其次,它也是一个可编辑的、易扩展的工具。节点本身就是所见即所得的,可以随意拖拽一些效果,也支持用代码去扩展节点。第三,用户可以定义参数或定义事件。第四,因为这个工具本身是在GPU上面做计算的,它对设备的芯片有一定要求,需要支持Computer Shader。
另外,这个工具是面向美术制作的,它可以让美术特效的制作非常丝滑,这是它本身是节点所带来的好处,也可以让美术同学扩展各种各样的效果。其次,节点其实是一个行业趋势,我们发布的可视化编程的工具,包括DCC工具、Houdini这样的工具都是以节点去制作的。以前我们这个工具只支持HDRP,现在也可以 支持URP 。
另外,我想介绍一下VFX和传统CPU的粒子系统Particles System的区别:
  • 第一就是粒子的数量。Particles System只能模拟少于一万个的粒子数量,因为它需要用CPU计算,如果粒子数量太多,CPU的压力会很大。我们新的VFX粒子系统可以模拟数百万级别的粒子数量。
  • 第二,过去CPU的粒子系统一般来说只能模拟一些比较简单的粒子,像流体这种复杂的粒子模拟用GPU去模拟会更好。
  • 第三,我们这个GPU的粒子系统并不是为了取代CPU,它们各有优势、各有缺点。关于物理的方面,CPU的粒子系统模拟一些物理时基于我们引擎的物理系统就可以做到,如果用GPU去模拟物理耗费的代价会更大,要计算数百万粒子级别的物理压力也会很大。
  • Gameplay方面,过去的粒子系统其实做一些游戏逻辑业务的时候会更方便,新的GPU粒子去做游戏逻辑时,首先要把很多场景的数据传给GPU,做起来可能会稍微复杂一点。
  • 最后,我们的GPU粒子系统可以读取Frame Buffers,去做想要的效果。

VFX关键概念

接下来讲一下VFX在制作过程中的一些概念。
我们把GPU的粒子系统分成三层。最下面这一层是特效的使用者,在设计好的特效上面进行调参,设置交互,暴露的参数可以用代码修改,不需要复杂的知识,适合所有特效/关卡艺术家/程序。第二层是特效制作家,可以在这个系统上生产特效资源。最上面这一层是开放给更高级的特效艺术家或TA同学,提供了自定义拓展的功能,note和block都可以扩展,可以自己定义一些节点。
这三层在工作过程中简单展示如下图。最左边这一层是去编辑一些参数,中间这一层是特效师制作特效,最右边这一层是可以通过代码的方式扩展VFX的工具。
接下来我会讲VFX工具执行的逻辑。
首先,我们把这个工具定义为一个contexts。类似于MonoBehavior,粒子的产生、初始化、每一帧的update、最后的输出渲染到屏幕上面,分为这四大块。四大块里面又有很多blocks,去定义在每个阶段我们的粒子要执行什么样的事情,它是从上往下执行的。另外,特效师在制作粒子的时候会连很多节点,这些节点是从左到右执行的,然后把结果再输出给contexts里面的每个block。
下面就是刚刚所说的contexts,分为4个阶段:
第一阶段是初始化粒子,就是粒子怎么产生,产生的数量是多少。第二个阶段是初始化这些粒子的属性,可以在这里定义粒子的大小、速度和方向。第三个阶段执行更新逻辑,可以每一帧update粒子要做什么事情。最后Output阶段再把粒子渲染出来,我们提供了很多的选择,可以使用不同的shade去渲染粒子。我们也提供了一个事件的机制,比如粒子在某一个阶段里放完了,想放第二个阶段的粒子,可以通过事件的方式去播放另外一个阶段的粒子。
接下来介绍粒子生成的方式。我们提供了很多种粒子生成的方式,比如持续性生成、根据距离生成,或一次性把所有的粒子喷射出去。
第二是关于粒子属性的控制,我们提供了很多blocks,可以让用户在初始化里定义很多种颜色、大小、速度、生命周期。
接下来讲一下粒子生成位置的方式。比如,可以按照一条直线的方式生成,也可以按照可编辑的圆锥、cycle或cube的方式生成。
粒子的方向也可以做很多控制,比如按照它的生命周期改变粒子速度,或者在执行过程中提供一个新的方向或随机的方向。
上文demo中有一个传送门的效果,就是按照这种圆形方式去发射粒子。
我们在这里有一个粒场的概念,即怎样给粒子施加力。我们提供了很多方式,比如第一个就是SDF的方式,让粒子被conform到一个SDF(Signed Distance Field)的表面,或者conform到一个比较简单的mesh上面。还可以用力场(Vector Field)的方式去提供粒子的方向。
另外,我们也做了一些碰撞处理。首先可以简单地用一个AABox或者是简单的mesh,比如一个平面,去做一些碰撞。如果要在场景里面做比较复杂的碰撞,可以采样一张深度图作为一个碰撞。还可以把mesh生成一个SDF,它会让粒子跟这个SDF发生一些碰撞。SDF我们也提供了一个烘焙的工具,可以在这个工具上面生成一个SDF文件。

VFX实用功能

接下来讲一些VFX比较有用的功能。首先,我们提供了一个模块化的方式,可以自己定义一些blocks。
这个是我们在资源制作管线方面的工具,比如用户可以拿到一些序列帧,在这个里面去合成一个flipbook,帮助用户在播放特效的时候使用这些序列帧。
我们也制作了一些与DCC软件结合的工具,比如用Maya、Blender都可以直接输出资源文件到VFX使用。还包括更多序列帧工具、SDF制作和量产的工具。
另外介绍两个工具,可以让mesh生成一个点云(point cache),或者将一个mesh转成SDF。这些工具在拉下VFX这个包的时候都能看到。

VFX Demo

接下来介绍一些VFX制作的demo。
下面是我制作的一个简单的demo。这里大概有10000条鱼,可以跟着鼠标运动。它的制作方式很简单,如果没有VFX这个工具的话,用户可能需要写很多代码,但是利用VFX用户只需要写一个Compute Shader,把这个Shader传到VFX里面。我们的VFX可以采样Graph Buffer,只需要按照每个粒子的ID去采样,就可以生成这样的效果。
还有一个比较简单的例子——角色走过这些落叶的时候,落叶会往上飘。过去制作这个效果可能需要把角色的轨迹记录成一张RT,再按照这些粒子去采样这个RT,给它施加力。如果使用VFX,只需简单几个节点就可以制作:首先把角色生成一个SDF的文件,然后根据粒子ID去采样这个SDF,最后再根据采样结果施加一些力。我们也提供一个可以绑定游戏对象的脚本,它会实时更新这个对象的位置给VFX。
查看更多VFX制作的炫酷demo,可以访问Github: https://github.com/Unity-Technologies/VisualEffectGraph-Samples
我的分享就到这里,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值