MMD联动Unity学习笔记 Vol.10.2

前言
之前官方达哥讲得Visual Effect Graph还有东西没有完全吃透,笔记也没写全,这期还是补充。主要内容是Point Cache(点缓存)和Binder(绑定)功能。

Point Cache(点缓存)

点缓存我们是使用其它3D软件,比如3DMax制作模型,但是输出不是使用FBX,而是用点缓存的格式(通常为pc2文件格式)。输出之后就可以给特效使用。
需要注意的是,Unity使用并不是一般pc2格式文件,Up用Blender导出的pc2文件并不能用于Unity中(不排除姿势不对的可能)。但使用Unity自带的烘焙工具对FBX文件中的网格进行加工是可以正常使用的。它的后缀是Unity特有的pcache格式。另外,据说Houdini可以制作出Unity可以使用的点缓存文件,而Up并不会Houdini,所以暂时无法亲身验证。

范例
下面我们用一个举例来看看效果。首先,要创建设置为点缓存的点缓存资源。你需要为Point Cache节点设置Point Cache Asset文件,并且需要提前从纹理和网格信息创建Point Cache Asset文件。

要创建点缓存资源文件,请从Unity菜单中选择Window-> Visual Effects-> Utilities-> Point Cache Bake Tool。

当点缓存烘焙工具启动后,我们选择模型设置在Mesh后空白处(您可以在Mesh中设置其他网格形状)。
这次我们只在该位置使用Point Cache,因此我们将取消Export的勾选。点数是从网格形状创建的点数。完成后,按“Save to pCache file(保存到pCache文件...)”按钮以保存“点缓存资源”文件。点缓存资源文件现已完成。

VFX操作
在Assets区域中,右键单击并选择Create-> Visual Effects-> Visual Effect Graph,并将文件命名为MyVFX。在层次面板上拖放MyVFX文件。

然后创建一个VFX游戏对象,选择它并在Inspector中按Visual Effector的Edit按钮。

创建Spawn
我们将所有文本全部删除。并在任意位置按空格键,从Context(文本)中选择Spawn,然后创建Spawn文本。

Spawn上下文是生成粒子的文本,因此将块设置为在此生成。选择Spawn文本后,按空格键并选择Spawn>Single Burst。将Single Burst的计数设置为5000并生成5000个粒子。

创建Initialize
接下来,当没有任何内容时,按空格键选择Context(文本)>Initialize(初始化)。Initialize文本是初始化每个粒子的文本。拖动并从Spawn文本的Spawn事件连接到Initialize的文本。将Initialize的容量设置为5000。容量是最大颗粒量。选择Initialize的文本,按空格键并选择Attribute> Map> Set Position from Map。

创建点缓存节点
在VFX中没有任何内容的情况下按SPACEBAR,然后选择Operator-> Utility-> Point Cache。在“点缓存”中,拖放先前创建的“点缓存资源”文件并进行设置。

从Map属性连接到点缓存位置和初始化设置位置。

创建更新上下文
在VFX中的任意位置按空格键,然后选择Context>Update。Update文本是更新粒子信息的文本。从Initialize文本中的Particle拖到要连接的Update文本。
创建一个块来改变粒子的角度
选择Update文本后,选择Space(空间)>Attribute(属性)>Set(设置)>Set Angle(设置角度)。选择“设置角度”块后,在“检查器”中的Random(随机)选择“Per Component(每个组件)”。
由于块名称更改为Set Angle.XYZ Random,因此分别为XYZ for Max输入360。设置Angle.XYZ Random随机确定Min和Max之间的XYZ角度。

创建一个块来改变粒子的比例
选择更新文本后,按空格键选择Attribute(属性) >Set(设置) >Set Scale(设置比例)。选择“设置比例”块后,将“检查器”中的“随机”更改为“每个组件”。
设置Scale.XYZ块名称将更改为Random,因此为Min的XYZ输入-0.2,为Max的XYZ输入0.2。

创建一个块来更改粒子的颜色
选择更新文本后,按空格键并选择Attribute(属性) >Set(设置) >Set Color(设置颜色)。选择“设置颜色”后,将“检查器”中的“随机”更改为“每个组件”。
将Set Color Random块中的Max的XYZ设置为0并使其变黑。

为粒子创建渲染块
现在我们已经创建并更新了粒子,我们将创建一个渲染块。按空格键,在VFX窗口中没有任何内容,然后选择Context>Lit Cube Output(亮点方形输出)。Lit Cube Output文本是输出受光影响的立方体的文本。通过从Update Update粒子拖放到Lit Cube Output文本来连接。

选择Lit Cube Output文本后,将Inspector的Use Base Color Map设置为None。

使用点缓存完成效果的示例
样品现已完成。在生成器文本中指定的粒子数是在Point Cache块中指定的网格点上生成的。在“更新”文本中,更改粒子的个别角度,比例和颜色,并将其显示在多维数据集中。
此示例中,角度,比例和颜色在更新文本中更改,因此转换更快。如果要更改间隔,最好使用输出文本中的时间系统块随时间更改属性。

只需几个简单的设置即可创建出色的效果。(^ ^)/
参考:UnityのVFXのPoint Cacheを使ったサンプル
https://gametukurikata.com/effect/vfxpointcache

Binder(绑定)功能

比如我这里有一个烟雾特效,通常来说喷发口在鼠标这边,你可能希望喷出来的特效是在原地的,或者是按照它的路径运行。一般来说,你把特效绑在某物件上,物件移动,特效会整体随着物件移动,这不是我想要的。
下面我们用VFX的绑定功能来解决这个问题。

首先我们给粒子特效添加VFX Position Binder组件。

这里我们可以看到参数绑定下面有红色的方块,点中下面三角提示绑定未正确设置,说明需要指明Position和Target(Transform)。假如我们有一个Cube(新建一个)做为粒子烟雾的喷发器。
我们给粒子VEG中Initialize文本增加一个Set Position的块,然后打开黑板,添加一个Vector3的变量,记得把它暴露出去,将它和Set Position节点连接起来。接着我们在VFX Parameter Binder组件里,把Target设置为Cube。这时我们移动Cube,就会发现粒子会很自然地随着盒子移动,而不是死板地跟随,不会因为特效喷出去而受到影响,这让我们可以很方便地绑到很多物件上。
