使用Visual Effect Graph创作惊艳的视觉效果

在Unite LA 2018期间,我们发布了在Unity中创作实时视觉效果的工具Visual Effect Graph,该工具使用在GPU运行的计算着色器和基于节点的工作流程。本文将比较Visual Effect Graph和现有的粒子系统,并展示如何开始使用这款强大工具。

113143lz5atn08p83dv586.png.thumb.jpg

Visual Effect Graph受到主流电影特效软件的启发,加入了许多相同的强大功能用于创作实时视觉效果,下面视频将对Visual Effect Graph进行简要介绍。

观看Visual Effect Graph介绍视频

入门
我们可以通过Unity 2018.3或更高版本编辑器中的资源包管理器安装Visual Effect Graph。

请点击Unity编辑器菜单Window > Package Manager,点开Advanced并选中“Show preview packages”,然后找到Visual Effect Graph,单击Install按钮即可。

113141px0dyx5y56mfz54q

目前,Visual Effect Graph运行于Unity 2018.3的高清晰渲染管线,对轻量级渲染管线的支持预计在之后的版本推出。为了使用Visual Effect Graph,请确保你的Unity项目使用High-Definition RP模板。

113141gq8mja0ez8m8wlk5.png.thumb.jpg

为了创建视觉效果,请在项目窗口点击右键,依次选择Create > Visual Effects > Visual Effects Graph。

创建资源后,将其拖到场景视图或层级窗口。

113142i0h8nsft0mvq0hvz

Visual Effect Graph窗口
Visual Effect Graph适用于VFX新手到资深艺术家和程序员等,Visual Effect Graph通过使用节点和属性模块,来提供一个快速学习,轻松掌握,强大的工作流程。

113142eddhp763aizogrxr

Context包含多个属性模块,用于表示应用于粒子的操作顺序。节点之间互相连接,会执行一系列输入属性模块的计算,从而定义粒子属性。节点系统会让使用Shader Graph着色器视图的用户感到很熟悉,但二个工具并不完全相同。

创建Context或单个节点,可以点击空格键,或单击右键,选择Create Node。创建属性模块,可在节点中点击空格键,或者单击右键,选择Create Block。

1、Context

113142jy9umxppoqj1b1iq.png.thumb.jpg

System是Initialize、Update和Output的Context组合。它由虚线轮廓表示。多个系统可以存在同一个Visual Effect Graph资源中。

Spawn定义生成粒子的数量和时间,例如Periodic Burst(间歇性喷发)、Constant(持续喷发)和Single Burst(单次喷发)等。

Initialize的前二个属性为Capacity(同时存在粒子数量)和Bounds(区域)。

Capacity确定每次系统中可以存在的粒子数量。

请注意:Capacity属性会根据粒子数量分配合适的内存,所以该数值应该对应可生成的粒子数量进行设置。通常,该值的计算公式为:Rate × Max Lifetime = Capacity

Bounds定义摄像机视图中粒子生成和模拟的区域。

Update会不断改变粒子属性,它是唯一可以使用作用力的部分。

Output会渲染粒子,它决定生成的粒子类型、纹理、颜色和方向。我们可以在此对粒子的大小,位置等属性进行最后调整。每个粒子系统可以有不同的输出结果,每个输出结果可以调整多数粒子属性。

2、Block
Block属性模块定义粒子的属性,这些属性可以由节点重写。Block包含在Context内,但有些属性模块无法在特定Context中使用。例如:Spawn Rate Block只能添加到Spawn Context中。

113143mdedzbt5tetz0550.png.thumb.jpg

我们可以通过取消勾选名称右侧的复选框禁用属性模块。有些输入内容可以通过点击输入名称左侧的小箭头展开,可以访问并修改详细属性,例如:Vector3的X,Y和Z。

在视图中选择Block和Context时,我们可以通过检视窗口修改它们。因此在创作视觉效果时,显示检视窗口可以方便创作过程。

113143jskvt7atvte7at1t.png.thumb.jpg

3、Node
Node节点具有很多功能,包括从输出指定数值和参数数据到执行各种不同的计算。Add,Multiply或Lerp等多数定义数值的节点可以通过修改来输出不同数值类型,例如:Float,Vector3或颜色数值。

113143o1l11gi0ywiilulu.png.thumb.jpg

流程工具
1、Auto Compile
默认情况下,每次修改节点或属性模块时,Visual Effect Graph都会重新编译。对于较小的视图,Auto Compile自动编译帮助我们在场景中快速看到改动效果。

但是对于比较复杂的系统,编译时间可能较长。禁用Auto Compile后,视图只会在保存或单击Compile按钮时进行编译,这样在大幅改动视图时,不必在每次调整后等待较长时间。

2、Blackboard
Blackboard面板可以存储视图中的参数,并公开给检视窗口以便进行修改。为了安排不同参数类型,Blackboard面板支持设置Categories类型和Tooltips提示信息。

113143k70v2ur50vgrpvzt.png.thumb.jpg

创建新参数,请点击Blackboard右上角的+图标。

113143g6l50pu5su7zd6dd.png.thumb.jpg

3、Target GameObject
Target GameObject面板允许你控制播放过程,或是查看场景中已打开视觉效果特定实例的本地空间辅助图示。

附加游戏对象,请点击场景中已打开的视觉效果实例,然后点击Attach,直接从场景实例打开视觉效果也会自动将该面板附加到游戏对象上。

113622irw5stkwlwj45wd2.png.thumb.jpg

4、Parameter Binders
虽然可以通过脚本来设置公开的参数,但Parameter Binders组件会自动配置视觉效果的参数,例如:游戏对象的位置,缩放和旋转。

113622cv2gvcenf28voxs8.png.thumb.jpg

添加Parameter Binder组件,请在层级窗口选中视觉效果,单击Add Component,搜索“Binder”并添加。将游戏对象拖到标着“None”的方框,然后点击 ⌄ 图标选择合适的参数。

113622bg5q5tk3z5dzxcnx.png.thumb.jpg

与现有粒子系统比较
Visual Effect Graph和粒子系统的主要区别在于它们运行的硬件。粒子系统在CPU模拟生成,而Visual Effect Graph将大量计算移动到运行在GPU的计算着色器。

113622q3lgsp81qlx5lvy8.png.thumb.jpg

从上面的对比图中,我们可以看出Visual Effect Graph的优点是能够模拟数百万个粒子,计算复杂的模拟过程,以及读取帧缓冲区。而粒子系统可以使用基础物理系统,并通过回读来与游戏交互。

特别需要注意的是设备兼容性,部分设备不支持Visual Effect Graph所需的计算着色器,例如:大多数的手机。

支持的数据类型
Visual Effect Graph支持使用Point Cache,Vector Field和Signed Distance Field等资源。通过这些资源的支持,可以表示体积、作用力、碰撞以及自定义数据类型。

Point Cache保存空间中点的属性,例如:Transform、法线、颜色和UV。
Vector Field在获取粒子的位置后,会在3D空间移动粒子。
Signed Distance Field可以使用体积来表示吸引和碰撞粒子。

下面的示例是在其它工具制作骷髅,然后导入Unity来创建魔法效果。

113623o9r439orhglrgtgy

VFX Toolbox工具集
Visual Effect Graph团队开发了一系列工具用于生成数据类型,这些工具统称为VFX Toolbox工具集。通过VFX Toolbox创建的数据可以与Unity的其它功能结合使用。

下载VFX Toolbox工具集:
https://github.com/Unity-Technologies/VFXToolbox

1、Image Sequencer
Image Sequencer图像序列工具可以处理图像序列,生成Flipbook纹理图集等纹理资源。

113623wqhmgaovivvtnnog.png.thumb.jpg

2、Point Cache Bake Tool
Point Cache Bake Tool点缓存烘焙工具又名为pCache Tool,它可以从纹理生成2D点缓存,从网格生成3D点缓存。

113623v2mdyi299dy9e327.png.thumb.jpg

使用技巧
1、便签,节点分组和名称
Visual Effect Graph带有一些实用功能,可以帮助注释和标记视图。

113623o2yk9op1kwzcmk9p

Context Names环境名称可以让你命名Context环境,只需双击Context环境标题部分的小型区域即可。

创建System Name系统名称,请双击虚线轮廓顶部下的小型区域。

Sticky Note便签功能可以创建可调整大小的文本框。创建标签,请在视图的空白区域单击右键,选择Create Sticky Note。

便签中,字体大小从Small到Huge共有四个选项,右键单击便签并从列表中选择修改字体大小。调整便签大小,可以拖动便签边缘或边角进行调整。

Node Group节点分组为节点的分组设置标题,并将它们作为整体进行移动。创建节点分组,请选择一组节点后,右键单击一个选中节点,然后选择Group Selection。

如果要移动节点到节点分组,将该节点拖入已有分组即可。如果要将节点移出分组,按住Shift键然后将其拖出分组。如果要删除分组而不删除节点,单击选中分组标题,然后按下Delete键即可。

2、Spawner Chaining
Spawner Chaining生成器链允许一个生成器开启或停止其它生成器。只要将Spawn Context的输出部分连接到Start或Stop即可。

下图中节点生成了持续2秒的常量流,停止2秒后会重复之前的操作。

113623dw0ggh2hwywmgbmf.png.thumb.jpg

2、GPU事件
GPU事件允许在自定义条件下或粒子消失时触发另一个粒子系统。下图中,节点会在粒子消失时生成10~15个粒子。

启用GPU事件,请打开Preferences>Visual Effects,勾选”Experimental Operators/Blocks”。

113623tpvptfpvbgu0zotj.png.thumb.jpg

3、Timeline
Visual Effect Graph完全兼容Timeline功能,可以准确控制视觉效果的时间设置。你可以通过二种方法控制效果:事件和参数。

如果要控制时间,请在Timeline中创建Visual Effect Activation Track。如果要控制参数,请在Timeline中创建Animation Track。

下面的视频展示了如何设置这些轨道,从而使它们继承来自事件的数值。

观看展示视频

下载示例项目
为了帮助大家学习Visual Effect Graph,开发团队发布了持续更新的Unity示例项目。首次发布时,该项目包含三个示例:
1、Unity Logo示例展示基本行为
2、Morphing Face示例展示HDRP Lit的兼容性和点缓存
3、Butterflies示例展示高级行为

下载示例项目:
https://github.com/Unity-Technologies/VisualEffectGraph-Samples

结语
Visual Effect Graph及其文档正处于开发和编写状态。虽然处于预览阶段,但我们可以在GitHub的Scriptable Render Pipeline Wiki中访问文档。

文档访问地址:
https://github.com/Unity-Technol … Visual-Effect-Graph

我们将分享Visual Effect Graph的一些教程,尽请期待。更多Unity更多信息介绍尽在Unity官方中文论坛(UnityChina.cn)!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>