外观
FluidInTube
背景
最近项目有个水管动画的需求,在尝试了RayMarching和FakeFluid之后美术反馈都不好。偶然在看到虚幻商城里有个沸腾水的资产,使用了GeometryCache。官方文档显示在4.25之后加入了这一实验功能,且支持移动端,于是准备利用Houdini的流体解算节点完成需求。
实现
管道设置
虽然是模拟,还是需要加两挡板的,不然水全没了。。。
水源设置
使用Bool操作在管道中间生成初始水体,然后使用倒角立方体作为Surface发射源,同时用VOP给每个粒子加上随机速度以产生一些扰动。
模拟设置
在自动生成的DOP网络中引入之前创建的立方体VolumeSource,然后设置一下模拟的参数。有个小技巧,如果模拟的粒子太多导致后续运行缓慢,可以将Dop缓存到磁盘上,然后开启Playback Simulation,这时候进度条会显示为紫色。
构建网格
这里有一些子步骤。
循环动画
- 导入上一步缓存的模拟结果之后可以使用Retime节点以选取需要的区段
- 在GroupExpress中使用粒子位置作为种子产生随机数,新建Threshold输入用于比较大小,小于Threshold的粒子在Blast节点被剔除。
- 在目标时间段内设置四个对称的Threshold的关键帧,分别是1->0, 0->1。
- 使用TimeShift节点将时间轴偏移目标时长,然后和原有时间段合并。
- 将时间轴总时长设置为目标时长。
长度截取
使用GroupExpress配合Blast节点即可掐头去尾截取目标长度的模拟结果。
平滑结果
直接使用模拟出来的粒子重建网格容易得到抖动且凹凸不平的表面,这里可以使用VDB处理一下。如图操作小型心调整参数,最后用ConvertVDB输出polygon即可。
输出结果
用PolyReduce减到目标面数后,使用Rop_Alembic将结果输出为.abc格式,然后就可以导入UE了。