Unity天坑VFX
Unity天坑VFX
初始化
Package Manager里下载安装High Definition RP高清管线- 在弹出的
Wizard里Fix All,这样就能用了 - 在
Project窗口里新建Visual Effect文件 - 在
Hierarchy窗口里新建Visual Effect物体,将文件附上去 - 双击VFX的文件,打开VFX窗口
- 编译的按钮在VFX窗口左上角
Compile,Auto按钮开启自动编译 - 保存是
ctrl + S
程序结构
VFX(VisualEffectGraph)是节点式的,就像ShaderGraph一样,使用前需要知道世界的本原- 和
ShaderGraph不同,世界信号是自上向下传输的 - 世界是由
内容块Context构成的,内容块分为两种:绿块(命令块)和橙块(执行块)(蓝块无法链接) - 绿线接绿口,橙线接橙口
- 一个健康的粒子需要由以下结构构成
生成块Spawn(绿)初始化块Initialize Particle(绿转橙)更新块Update Particle(橙)渲染块Output Particle(橙)
- 一个
初始化块链接一个更新块能够构成一个系统,并生成一个虚线框来套在系统上,可以命名
- 上面这个粒子是没有任何效果的,因为只搭好了结构,里面内饰还没有
- 右键这些内容块内部,创建一些子节点,这些子节点是树状的
- 加一点节点,就像这样
所以,正如同老版本粒子系统一样,粒子的基本运动是需要条件的:
- 发射量【生成块】
- 生命周期【初始化块】
- 速度【初始化块或更新块】
- 渲染方法【渲染块】
这个效果是很多直线上升的点点
搜索节点
- 在寻找节点时需要输入内容搜索,因为找的话很麻烦
但这么多的节点其实时有规律的,第一个词多半是这些:
- Add【添加,在原有属性的基础上添加】
- Set【设置,替换原有属性或属性初始化】
- Blend【混合,与原有混合】
- Inherit【继承,延续父类粒子】
- Multiply【相乘,在原有属性的基础上相乘】
- Position【空间,在一个区块内计算】
- Orient【旋转,仅渲染块】
特性词也有这些:
- Curve【曲线映射】
- Map【映射计算】
- Random【随机计算】
- Collide【碰撞,仅更新块】
- Force【力场,仅更新块】
- Kill【消隐区间,区域内粒子清除】
属性类子节点
- 搜索词太多了,在里面搜索不是什么好主意
- 不过,在点击某一个子节点时,
Inspector面板会显示它的所有信息 - 也就是说,所有关于属性修改的节点都可以由调整Inspector面板来调出
- 它拥有四个下拉菜单:
Attribute是要调整的属性种类,实在太多了Composition是调整方法,有重载、添加、相乘、混合四种Source是数值类型,有具体数值和继承两种Random是随机方法,有关闭随机、组件范围、全局范围三种
注意项
- 有一些很重要的内容不成体系,但是不知道也不行
坐标系
- 粒子是有
世界空间world和本地空间local的,默认是本地空间 - 在本地空间模式下,粒子物体的移动受本地影响,反之不受影响
- 点击任何橙色内容块右上角来修改全局空间
空间暴露
- 有一些跟坐标相关的数值会显示一个空间符号,默认是
L,点击成W - 就能在
Scene场景里动态修改,这样就不需要锻炼抽象思维了 - 如果点击了没反应,说明编辑器UI出bug了,重新打开一遍VFX窗口即可
粒子边界
- 这个东西非常重要,每个粒子的初始化块里都有粒子边界设置
- 当屏幕视角移出粒子边界之后,粒子就直接不显示了,非常的突兀
- 所以在弄粒子时,粒子边界需要经常去调
- 所以暴露一下坐标(指
W)
发射数量
生成块Spawn中修改的发射数量是一秒内发射个数,是速度初始化块Initialize Particle中修改的发射数量是最大可显示数量,是最大数量- 我使用三个例子来解释粒子寿命,粒子速度,最大数量之间的关系
- 当粒子寿命为1秒时,速度为10时,最大数量如果为5,粒子0.1秒发射一个,吐5下停5下
- 当粒子寿命为1秒时,速度为5时,最大数量如果为10,粒子0.2秒发射一个,持续发射
- 当粒子寿命为0.5秒时,速度为10时,最大数量如果为5,粒子0.1秒发射一个,持续发射
事件入门
有一个内容块比较特殊:
Event事件(绿)内容块只有一个字符串属性:
Event Name,这里是和代码沟通的属性实现一个小交互:左键播放,右键停止
首先需要有一个健康的粒子,至少能看到粒子发射
然后链接
Spawn,修改Event Name
- 整一个脚本挂在粒子物体上即可
1 | using System.Collections; |
渲染内容块
- VFX里提供了很多渲染块:(甚至展示不全)
- 在渲染块中,除了属性种类之外,还可以添加一些特殊效果:
Camera Fade摄像机靠近自动消隐Face Camera Plane始终面向摄像机Subpixel Anti-Aliasing粒子抗锯齿Screen Space Size始终保持视野大小(参见Superliminal游戏)Tile/Wrap Positions越界粒子折返出现
- 渲染块右键
Convert Output可以更改渲染块类型
内容块外节点
- 在内容块以外右键创建节点,会是这样:
Context里就是内容块,带颜色(绿和黄)的那种Operator即操纵器,几乎所有的数值计算方法Property即自定义属性,blackboard悬浮面板里新建的所有数值System即内置的粒子模板,很方便Misc杂项里有分组器,能把一些节点放进去分类
操纵器
Attribute即当前的总输出属性值Bitwise即按位运算,用的较少BuiltIn即内建属性,有世界物体空间的转换以及一些系统的公有属性Color即色彩模型转换Inline即内联属性,所有数据类型的形状都在这Logic即逻辑运算Math即数学运算,只有你想不到的,没有我数学做不到的Noise即噪音生成器,有14种Random即随机生成器Sampling即采样,包含曲线、渐变、贴图的采样Subgraph Operator即块中块,块中块得在Project里创建Time即时间,时间建议直接搜索,更全面Utility即实用工具,里面有点缓存加载器
GPU事件
- 在做GPU事件之前,先得勾选这个:
- 勾选拓展包之后,有两个变化:
Context中出现GPUEvent内容块更新块Update Particle中能搜索Event了
使用GPU事件可以让粒子按照时间流程来套娃
GPU事件块只能放在更新块内
拥有三种事件类型:
Trigger Event Always始终触发Trigger Event On Die销毁时触发Trigger Event Rate按速率触发,其中:Over Time指每秒触发次数Over Distance指粒子运动距离每超过一米之间的触发次数
在这种粒子套娃的情况下,新的粒子也许会继承之前的粒子的属性,这时可以使用
Inherit套娃的其他操作与之前类似
拉丝模式
- 选择
初始化块Initialize Particle(绿转橙)内容块,Inspector面板里能选择一个选项:Data Type - 将
Data Type转换为Particle Strip,便开启了拉丝模式 初始化块Initialize Particle(绿转橙)变成了初始化块Initialize Particle Strip(绿转淡橙)- 初始化块链接的更新块也变成了独特的更新块
- 渲染块要选择独特的拉丝渲染块
- 可以加一些独特的效果,相当于普通粒子效果里的拖尾
总结
- 比普通粒子效果要难入门,难度可能凌驾于
ShaderGraph之上
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Iamsleepingnow 世界!



