Unity VFX初探

Posted 带酒书生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity VFX初探相关的知识,希望对你有一定的参考价值。

unity的vfx其实很久之前就有在编辑器的Editor——Preference里面见到过,当时我用的是2017还是18版本来着?当时并不知道是什么东西啊,去搜了一下知道了有个和粒子类似的东西存在,但也没有留意,因为那时候粒子系统都不太熟悉。后来在HDRP场景里面算是第一次正式接触到了vfx,但是那时候觉得蝴蝶啊、竹子的落叶啊其实用粒子也能搞,所以还是没怎么关心。直到我看到了这些。。。。。。



注:上述的VFX特效作者是Unity日本分布技美总监Keijiro,很炫酷,大家可以去GitHub上看看他的作品,Github传送门
粒子显然做不到这种数量非常高而且相对流畅的运行的,然后就试试嘛。

一、准备

尽量用稍微新一点的版本,我用的是2020.3.3f1c1,新建HDRP工程。确保你的Assets的package里面有vfx,没有的话去包管理器里面install一个。

二、开整

先在Asset里面右键新建一个visual effect graph,随便起个名字。

然后在场景Hierarchy面板里面新建一个visual effect,

最后将我们新建的visual effect graph拖入到visual effect的属性面板上

三、说明

默认的vfx没啥东西,我们看到的就是类似新建一个粒子一样,多个不断生成的图片。双击新建的visual effect graph打开编辑面板,差不多是这样的一个布局,右上角两个toggle开关控制箭头指向的两个面板的显示隐藏,左上角的就是保存编译的(其实直接保存系统会自动编译)。这里提一点,如果我们下载别人做好的vfx拿来用,导入工程后是不能直接用的,必须经历一次打开——编译保存这么一个过程,要不然没有编译用不了。

1.先说blackboard面板

这个面板的名字就是你新建visual effect graph时候的名字,这个面板的作用就是存放一些公共变量,类似于我们编程时专门新建一个脚本存放我们的静态变量。点击面板右上角的加号,我们可以看到它支持的变量类型除了一些基本的类型还有一些vfx独有的,大家可以看一下官方的文档。我把文档链接放这里了

我以float为例说一下他们的属性,新建出来的变量基本都是New +变量类型这样子,双击它可以进行重命名,Exposed是否勾选决定了它在visual effect的属性面板上是否暴露这个变量,有点类似于脚本里面的[Hideininspector],value就是值嘛,tooltip就是鼠标放上去会显示该变量的自定义的说明文字,mode有两种,default就是我们上图的形式,而range模式就是将变量变成了滑动条的形式(类似slider)。当我们要在vfx编辑器里使用该变量时,只需要右键create的时候输入我们变量的名字或者点击变量拖拽到空白处即可。

2.然后是Target visual effect gameobject面板

这个面板只有我们选中场景中的visual effect的时候 attach按钮才会激活,这时候点击attach按钮我们可以获得一个控制vfx的控制台。

3.重点来了,VFX的渲染流程

Spawn——Initialize——update——output,我为什么叫他渲染流程呢,因为粒子从生成到消失才叫生命周期。大模块里面的每个小模块称为block,我们点击任意大模块选中,然后按下空格或者鼠标右键就能看到可以添加哪些小模块了。
spawn模块里我们可以控制粒子的生成速率、周期。
Initialize模块里我们可以控制粒子的数量上限、生命周期、初始位置、初始速度、初始重力等等,通过添加修改一系列的block来控制粒子生成的初始状态,他类似于unity生命周期里的start,在vfx的渲染流程中只执行一次。
update模块里我们可以动态更新粒子的位置、角度、速度、重力、方向等等,通常添加一系列block然后结合我们自己定义的一些全局变量通过脚本或者拖动动态修改block的值来进行我们想要的变化,他类似unity生命周期里的update,在vfx的渲染流程中不断执行。
output模块有好几种,我们可以在空白地方右键——创建,然后输入output查看其它类型的output。它决定的是单个粒子的外观:形状啊、颜色啊、贴图啊、shader啊等等。我的理解是它有点像unity生命周期里面的ongui,可以随着粒子生命周期变化,并且主要进行的是渲染的工作。

四、制作

当我们知道vfx的整个流程以及相关的模块,那么就可以自己动手做一些炫酷的效果了,也可以跟着一些视频教程做一些模仿,而重点要做的可能就是熟悉每个block的作用以及不断学习运用文档中的介绍内容。这里的话我再给大家分享一下SDF和point cache的制作流程,他们两者可以让我们很方便的将粒子组合成我们想要的网格形状和图片性状。

1.SDF

以下图的vfx为例,如果说我们想要做出一个这样一个3D人头形状的vfx,我们用各种数学运算来搞必然不是很现实,当然不排除有大佬啊,所以我们可以用SDF来搞,什么是SDF请大家自行百度啊。我就给大家说一下制作流程。

第一步:去GitHub下载SDF制作工程

unity-sdf-generator
下载好后根据工程的说明生成SDF文件,然后拷贝到你制作VFX的工程里就行了,当然GitHub还有其他的类似的工程,大家自行选择。

第二步:在vfx里面使用

先定义一个Texture3D类型的公共变量,然后在value里选择第一步制作的SDF,然后根据前面的教程将该变量拖出来,在你需要的渲染流程中添加position block,注意是SDF类型的position block,将两者连接在一起,这样就ok了,是不是很简单。

2.point cache

point cache可以用vfx自带的工具进行生成,它可以根据你选定的网格或图片生成响应的point cache asset文件,我们可以看到它可以将网格的法线、UV、颜色以及采样的点的数量都包含进去。

第一步:制作point cache asset文件

通过上面的流程我们选择一个图片来制作出一个point cache asset文件,可以通过生成的文件看到我要用到图片的位置信息和颜色信息。

第二步:在vfx里面使用

这里跟SDF有点不一样的地方是它无法通过定义全局变量来使用,我们直接在空白处create node,然后在asset里面选择我们上一步生成的point cache asset文件,最后和SDF一样,将其位置、颜色通过连线的方式复制给对应的block。

以上是关于Unity VFX初探的主要内容,如果未能解决你的问题,请参考以下文章

Unity VFX学习系列 —— 了解VFX

unity人物第一人称视角制作角色身体遮挡主镜头去掉方法,用VFX自制子弹拖尾效果。

Unity3d VFX 采用skinned mesh sampling(蒙皮采样)发射粒子效果时fbx模型是否优化(Optimized)带来的问题记录

在Unity里添加2D法线贴图 NormalMap

Unity Shader 法线贴图的实现

Unity Shader-法线贴图(Normal)及其原理