这个烟花的例子跟上面的很像, 都是通过Cascade控制DynamicParameter节点(视频)
使用简单的StaticMesh来做环境特效, 比如尘埃, 用类似的做法可以省去GameThread的更新开销
Spline Thicken通常被Epic的特效和环境美术用来模拟弯曲的圆柱体
很多Gears5里的特效都是使用VertexShader来完成的, 降低了CPU的开销
空间信息怎么办?
盖斯特纳波经常用来做海洋模拟, 就是多个不同步长的正弦波做叠加
- Amplitude: 振幅(波形高)
- WaveDir: 波传播的方向
- Pos: 顶点的起始点
- Wavelength: 波长, 波形的频率
- Phase: 偏移, 跟之前的StartTime一样
使用frac来做波形的重复传播
把上面那个重复的0~1的值跟Sin函数进行叠加
视频里演示了这次分享中和许多技术. MPC可以在不同材质间共享全局参数, 比如波长, 水花, 泡沫等的时间参数
加入一个Phase参数控制两个波形之间的距离, 可以是常量也可以是变量.
DistanceField(距离场)可以告诉你跟一个最近表面的距离, 那可以用DistanceField来控制PhaseOffset, 用于模拟水波靠近岩石的效果
UE4工程中需要开启DistanceField, 材质中可以使用DistanceToNearestSurface节点来获取离最近表面的距离, 这些信息是保存在相机周围的Volumn Texture(3D体积纹理)里
反转0~1的值, 把距离转换成Mask
一个PhaseOffset的例子
把DistanceFieldGradients与波形方向结合在一起
DistanceFieldGradients看起来像NormalMap, 代表了离最近表面的方向
跟方向做点积
美术通常用Flowmaps来保存流动的方向
这是Fortnite里的河流, 在边缘的地方结合了DistanceField和NormalMap来改变流向, 用来模拟水流经过鹅卵石的效果
又一个例子, 演示DistanceField改变flowmap的方向
这是材质节点, 把NormalMap从Tangent转到Flow空间
总结Analytical Simulation的优势: 性能好, 适合做环境特效什么的
补充了一个LaggedWave实现
使用Vector Noise中的Curl Noise可以加入很多三维空间的随机效果, 不过需要节省着点用
使用UE4中的ScaleUVsbyCenter对Flowmap进行缩放, 用来模拟泡沫从岩石上落下的效果