前言
参考链接:- VFXGraph官方文档:(https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@6.9/manual/index.html)
- VFXGraph 模拟天气官方教程(可以下载相关资源):
(https://learn.unity.com/tutorial/simulating-weather-with-the-vfx-graph-unity-2018-lts-1?projectId=&uv=2018.4#)
一、介绍
制作关于雪的三个属性:
- 雪沿着空气和风的速度流动.
- 雪移动的越快,显的越条纹.
- 降雪强度不同.
本章学习案例主要是模拟这三种状态.
二、使用VFXGraph实现效果
1.Spawn块实现
Spawn(类似于 Awake() 调用).
- 添加周期和范围: SpawnRate(浮点数 ),SpawnRange(Vector2 )
- Periodic Total Time: 周期变化率
实现系统中的粒子数量随时间变化。
2.Initialize Particle块实现
Initialize相当于Unity声明周期中Start() 调用.
-
Capacity: 粒子的最大容量值
这里将粒子的最大容量值设置50000,这完全够用. -
Set Velocity Random: 设置随机速度
将SetVelocityRandom中值大小统一增加至少+-10可以增加粒子移动体积,使粒子均匀分布在场景中,并为他们提供随机速度. -
Set Position: 设置粒子发射初始位置
Y=12为粒子添加高度,营造雪从天而降的错觉. -
Sine Wave(float):正弦波节点
为了添加正弦波评估随事件变化的值. -
TotalTime:总时间节点
创建一个总时间节点并将其输出拖到正弦波节点的输入。
3.Update Particle块实现
Update(Update() 调用).
这里虽然系统的基本行为已经完成,但粒子本身仍然沿直线向外移动。我们将修改更新上下文以使粒子移动,就像它们沿着气流流动一样。
实现用矢量场模拟运动和缩放:
- Vector Field Force:矢量力场, 提供 3D 矢量场纹理作为输入
此这个 3D 纹理用 3D 空间中的向量数组填充我们之前定义的速度体积。每个向量都沿粒子在3D空间中的定向方向推进粒子.
矢量力场充当 3D 空间中气流的数字表示。这可以通过想象在天气预报程序中显示气流来最好地概念化.
-
Turbulence: 湍流块
要向矢量场添加更多发散,将湍流块添加必不可少,并增加其强度. -
Set Scale.XY by Speed:根据粒子的速度动态地更改粒子的大小
在场景中使它们具有更像雪的条纹外观。
请注意此块的 Speed Range 属性。X 值表示我们将考虑的最小速度,Y 值表示将考虑的最大速度。与 Set Size over Life Block 类似,这个 Block 将这个范围映射到 0 到 1 之间的值。我们希望每个粒子的 X 尺度在接近最大速度时减小,而每个粒子的 Y 尺度增加。
需要设置Scale xy动画曲线属性:
X:
Y:
4.Output Particle Quad块实现
Output(定义生成的粒子应该如何渲染到屏幕上).
-
Orient: Along Velocity
将模式从“FaceCameraPlane”更改为“AlongVelocity”。这将使雪粒子面向它们行进的方向。 -
Set Size over Life: 按存活时间设置粒子大小
-
Set Color over Life:按存活时间设置粒子颜色
三、总结
最后实现效果: