Press "Enter" to skip to content

Unity3d Visual Effects Graph Introduction

内容纲要

原文章地址:

https://blogs.unity3d.com/2018/11/27/creating-explosive-visuals-with-the-visual-effect-graph/

sample 项目地址:

https://github.com/Unity-Technologies/VisualEffectGraph-Samples

使用Visual Effect Graph创建牛逼轰轰的视觉效果

在Unity LA 2018年的时候,我们发布了Visual Effect Graph(简称VEG),这个工具用来在Unity里面创建实时的视觉效果。它使用GPU结合compute shader,并且使用基于节点的工作流程。这篇文章将比较VEG和传统的例子系统,并且向你们展示如何使用这个牛X的工具。你可以从HDRP,URP中直接使用改工具,建议使用2019, 2020LTS版本

VE工具的灵感来自于电影视觉效果领域,VEG工具吸收了很多影视制作的特点,并将其应用到实时渲染视效

开始

首先可以通过package manager来加载VEG包。 需要Untiy版本必须是2018.3以上。

file

目前VEG 对URP和HDRP都有支持

通过window > Create > Visual Effects > Visual Effects Graph 创建一个Visual Effect Asset。 创建完毕后就可以吧Asset拖拽到视图或者大纲中

VEG 编辑器

VEG的编辑流程基于节点和区块,这个传统的影视特效工作流程非常相近

编辑区包含了不同的区块,其中区块代表了一系列对例子按照顺序执行的操作。而节点相互链接,通过一系列的节点间的计算,将结果输入给区块,这些结果影响了粒子的属性

Node system 与Shader Graph的操作几乎是一样的。

file

右键Contex可以创建Block,右键空白处,可以创建Node

Context

file

system(粒子系统)包含了粒子Initialize(初始化),Update(更新)以及Output(输出)Context。在上图中是虚线框的部分。一个VEG可以包含多个system

Spawn定义了有多少Particle会被生成,以及与时间相关的属性(例如周期性爆发(periodic Burst),持续(Constant),单次爆发(Single Burst))

Initialize(初始化) 定义了粒子容量(Capacity)以及边界(Bounds)

Capacity(容量) 定义了在这个system中同时可以出现最多少个粒子(maxcount)

需要注意的是,Capacity会为粒子的数量分配适当的内存数量,因此这个数量应该与可能产生的数量相对应。这通常可以通过以下方式计算:

Rate × Max Lifetime = Capacity

Bound边界定义了模拟时,粒子被相机看到的可见区域。

更新会随着时间的推移改变粒子的属性,这是唯一允许你使用力的上下文。这就是你要应用碰撞的地方,一个有符号的距离场,或者向量场。
Udpate (粒子更新)随着时间更新粒子的属性,这是唯一一个可以使用力场的context,这里你可以修改碰撞, 单力场(Signed Distance Field),或者向量力场(Vector Field)

Output(粒子输出)定义了粒子以何种渲染方式生成输出(type)、使用的贴图(Texture)、颜色(colour)、以及其朝向(Orentation) .以及在模拟结束时对粒子的大小(size),位置(postion)等的调整。例如每个system可以包含多个output,每个输出可以调整大多数粒子属性。

Blocks 区块

file

块定义粒子属性,这些属性可以被节点覆盖。块是context相关的,有些块不能在特定的context中使用。例如,Spawn Rate block(生成率)块只能添加到生成Context中。

file
通过区块右上角的Checker来打开、关闭区块,通过箭头来折叠属性

当在图中选择时,块和上下文可以通过检查器进行修改。因此,在制作视觉效果时,让检查器可见是非常有用的。

file
区块和Context的一些属性,可以在选中的情况,在Inspector中调整

Nodes 节点

file

节点拥有众多功能,包括传递特定的值或者参数进行计算。大部分节点,不如Add,Multiply,Lerp等可以调整输出的数据类型,类如Float,Vector3,Color等

Workflow tools | 流程工具

自动编译

VEG的自动编译功能默认是开启的。对于简单的VEG来说,编译速度很快。但是复杂的graph开启自动编译后可能会很卡,这种情况下可以关闭自动编译功能

参数面板

file

参数面板罗列了你可以用在Graph中的各种参数,你可以在VEG asset的inspector中调整参数

你可以给参数分类Cageories或者添加工具提示Tooltips

可以添加的参数类型:

file

参数绑定

暴露的参数可以通过脚本来控制,参数绑定其可以自动配置visual effect的参数,例如GameObject的potion, scale, rotation等。
添加参数绑定的方法如下:

  1. 在大纲中Visual effect asset,Add component ,搜索 “Binder”
  2. 将需要绑定的GameObject拖拽到 目标物体

file

file

笔者:这个地方的绑定需要测试,例如设置为postion 类型的话,默认拖拽物体后,无法正常绑定

与传统粒子系统的对比

VEG 与传统粒子最大的区别:传统粒子是使用CPU进行模拟, VEG是使用GPU以及compoute Shader进行计算和模拟

file

在这个比较中,我们可以看到视觉VEG具有模拟数百万粒子的优势,可以计算复杂的模拟,能够读取帧缓冲。而另一方面,传统的粒子系统可以使用内置的物理系统,并与游戏玩法game play进行互动。

另一件要记住的事情是设备兼容性,因为所需的compute shader目前在一些设备上不支持,比如说一些手机。

支持的数据类型

veg支持PointCaches、Vecotr field 和 Signed Distance field 等资源,这些数据允许你表示体积、力、碰撞和其他自定义数据类型。

点缓存PointCaches:在空间中存储点的属性,如变换、法线、颜色和uv。

矢量场Vecotr filed:对粒子的位置进行采样后,在三维空间中推动粒子。

符号距离场Signed distance field 可以用体积表示来吸引attract和碰撞collide粒子。

Vfx 工具

Visual Effect Graph团队正在开发一套工具来生成这些数据类型,称为VFX工具箱。使用VFX工具箱创建的数据也可以在Unity的其他区域中使用,例如粒子系统。

下载地址 https://github.com/Unity-Technologies/VFXToolbox

序列图生成器

file

通过处理图像序列,并生成纹理资产,如flipbook texture。

点云工具

file

也被称为pCache工具,它从纹理或网格分别生成2D或3D点缓存。

VEG使用技巧

VEG有许多强大的协同和节点,可以使您的效果更厉害。

Sticky notes, Node Groups and names

VEG有一些有用的功能,可以帮助您对图表进行评论和标记。

Spawner chaining 生成器链接

file

生成器链允许一个生成器控制另一个生成器的启动和停止。

操作非常简单,只需要将一个Spawn 链接到另外一个spawn的start 或 stop接口

在上面的例子中,一个particle 持续生产2秒,然后停止2秒,如此往复

file

file

file

GPU Events | GPU事件触发

file

GPU事件允许你在自定义条件下触发另一个粒子系统或粒子的死亡。上面的例子将在一个粒子死亡时产生10到15个粒子。

要启用GPU事件,请启用" Experimental Operators/Blocks:

Timeline 控制

VEG与时间线完全兼容,你可以通过timeline精确控制。有两种方法可以控制效果:事件和参数。要控制事件,在时间轴上创建一个视veg激活跟踪。要控制参数,请在时间轴上创建一个动画轨迹。上面的视频展示了如何设置这两个轨道,以及从事件中继承值。

下载sample project

  • The Unity Logo, demonstrating the basic behaviors and Vector Fields, | unity logo project 展示了基本的功能以及 Vector field
  • The Morphing Face, demonstrating HDRP Lit compatibility and Point Caches, | Morphing face 展示了与hdrp 光照的兼容以及 Point caches
  • And Butterflies, demonstrating some advanced behaviors. | 蝴蝶 展示了一些更高级的应用

https://github.com/Unity-Technologies/VisualEffectGraph-Samples.git

扩展阅读

帮助文档
https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@11.0/manual/VisualEffectComponent.html

发表评论

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