在Unite LA 2018期间,Unity官方发布了在Unity中创作实时视觉效果的工具Visual Effect Graph,该工具使用在GPU运行的计算着色器和基于节点的工作流程。本文将比较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按钮即可。

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

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

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

Visual Effect Graph窗口

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

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

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

Context

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

Block

Block属性模块定义粒子的属性,这些属性可以由节点重写。Block包含在Context内,但有些属性模块无法在特定Context中使用。例如:Spawn Rate Block只能添加到Spawn Context中。
「U3D」使用VEG制作惊艳的视觉效果

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

在视图中选择Block和Context时,我们可以通过检视窗口修改它们。因此在创作视觉效果时,显示检视窗口可以方便创作过程。
「U3D」使用VEG制作惊艳的视觉效果

Node

Node节点具有很多功能,包括从输出指定数值和参数数据到执行各种不同的计算。Add,Multiply或Lerp等多数定义数值的节点可以通过修改来输出不同数值类型,例如:Float,Vector3或颜色数值。
「U3D」使用VEG制作惊艳的视觉效果

流程工具

Auto Compile

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

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

Blackboard

Blackboard面板可以存储视图中的参数,并公开给检视窗口以便进行修改。为了安排不同参数类型,Blackboard面板支持设置Categories类型和Tooltips提示信息。
「U3D」使用VEG制作惊艳的视觉效果

创建新参数,请点击Blackboard右上角的+图标。
「U3D」使用VEG制作惊艳的视觉效果

Target GameObject

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

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

Parameter Binders

虽然可以通过脚本来设置公开的参数,但Parameter Binders组件会自动配置视觉效果的参数,例如:游戏对象的位置,缩放和旋转。
「U3D」使用VEG制作惊艳的视觉效果

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

与现有粒子系统比较

Visual Effect Graph和粒子系统的主要区别在于它们运行的硬件。粒子系统在CPU模拟生成,而Visual Effect Graph将大量计算移动到运行在GPU的计算着色器。
「U3D」使用VEG制作惊艳的视觉效果

从上面的对比图中,我们可以看出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来创建魔法效果。

VFX Toolbox工具集

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

VFX Toolbox: Download

Image Sequencer

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

Point Cache Bake Tool

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

使用技巧

便签,节点分组和名称

Visual Effect Graph带有一些实用功能,可以帮助注释和标记视图。

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

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

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

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

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

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

Spawner Chaining

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

下图中节点生成了持续2秒的常量流,停止2秒后会重复之前的操作。
「U3D」使用VEG制作惊艳的视觉效果

GPU事件

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

启用GPU事件,请打开Preferences>Visual Effects,勾选"Experimental Operators/Blocks"。
「U3D」使用VEG制作惊艳的视觉效果

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示例展示高级行为

示例项目: Download

结语

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