UE5利用NS制作风场

概述

本文介绍使用 UE5 Niagara System 制作风场的完整流程,包括流体模拟、速度场数据写出和粒子验证。当然也可以自己写入custom代码进行流体模拟

数据准备

渲染目标(Render Target)

RTData - float32格式
RTWindField - half16格式

实现流程

创建Niagara流体系统

快速创建一个带流体模拟的NS系统
创建NS

关闭左右两个输入和展示的粒子
修改模板

设置中间一个流体模拟的一些参数,这是我自己按照自己想要的了来的
基础参数

然后在搜集碰撞体这里加上tag,过滤一下输入源
搜集碰撞体

速度场数据写出

这里创建一个NS 脚本,然后在外部创建两张RT,这里输入这脚本
把风速写出到RT

因为我当前版本不支持3D纹理,好像在5.7就支持直接写3D纹理,这里用2D模拟,这里的Execution Index To Grid Index,应该就是Compute Shader的线程ID
写出到2D纹理,因为当前UE不支持3D纹理,后续支持

另一个小RT,只有三个像素,就存模拟盒的大小位置和纹素大小
写出包围盒信息

记得在最开始还有个节点是设置这两个RT的分辨率大小
在开始的时候初始化贴图大小

2D模拟3D

速度场可视化

然后在场景里面放一个球,拖动一下,可以看到RT已经有了数据

随便摆个球在场景中动一下可以看到速度矢量场

创建一个测试粒子,注意它的节点里面要有解析力和速度的节点如图红框下面一个
做个例子去验证数据是否正确

又有两个新的NS函数,一个是解析刚才写出的模拟盒信息,还有就是解析风速
只看三个框,就是解析包围盒和解析风速

解析风速的坐标映射,计算出UV,要是能读写3D纹理就更快了,还有硬件过滤
解析风速1

解析风速2

然后在测试粒子里面我简单的把速度相加
简单测试,把速度加到粒子原本速度

测试视频

参考

https://zhuanlan.zhihu.com/p/616999277

https://goldview.top/article/WindGodofWar/

https://goldview.top/article/10/