「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧


大家都知道Houdini提供了一套非常强大的模拟流体工具 , 怎样让流体效果看上去逼真是一项非常富有挑战性的工作 。 现在不光是电影 , 就连电视剧集对视觉效果也有了很高的要求 , 制作周期越来越紧张 , 质量效果却要与电影媲美 。

「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
Kevin PingaDemo截图
所以今天分享曾在多家知名视效公司任职Houdini FX Artist艺术家总结的10条Houdini FLIP流体模拟技巧 , 希望能帮助大家在制作流体镜头时能够高效地完成流体模拟 , 同时还会保持较高的质量效果 。
需要说明的是 , 这些技巧针对于熟悉FLIP解算器的小伙伴们 , 如果你是萌新级别的选手 , 可以先选择尝试一下SideFX的教程 。

「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
Kevin Pinga
美国Houdini FX Artist
inga目前在FuseFX担任Houdini FX Artist , 毕业于萨凡纳艺术与设计学院视觉效果专业 , 辅修技术方向 , 后来担任学校视觉效果讲师 。 曾在Luma Pictures、Ingenuity Studios、Zoic Studios、Gradient Effects等知名团队任职 。 曾参与《蜘蛛侠:英雄远征》《行尸走肉》《城堡岩》等影视作品的特效制作 , 也为Taylor Swift、Billie Eilish和Maroon 5的音乐MV完成过特效制作 。 总结一句话 , 也是Kevin Pinga对自己的描述 , 注重细节的Houdini FX Artist , 具有创建逼真效果的经验 。
Kevin Pinga FX Showreel 2020 下面是10条Houdini FLIP流体模拟技巧:
1.获取源流体要用 POP Source , 而不是FLIP Source
FLIP获取源流体的默认方法是使用 FLIP Source节点 , 实质就是创建了一个VDB , 由DOP中的Volume Source节点读取 。 这是使用shelf tools时自动获取的 。
对于需要从较大模糊形状中获取源流体的情况来说 , 这是种不错的方法 , 但会占用大量资源 , 相当耗时 。 而且在进入模拟阶段之前 , 想要获得更精准sourcing而增加VDB分辨率的话 , 还会进一步降低速度 。
相反 , 大佬采用方法的是直接使用基于多边形的常规SOP几何图形 , 无需转换为VDB 。 source可以与FLIP解算器本身的Sourcing input相连接的POP Source节点读取 , 与为常规粒子模拟导入source的方式相同 。
POP Source节点控制起来非常直观 , 大多数艺术家应该在使用常规粒子的过程中非常熟悉了 。 这样可以通过预测的方式来控制和监视粒子计数 , 而与FLIP对象本身的粒子分离无关 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
使用 POP Source的源流体提供熟悉的emission, activation和velocity属性
2.FLIP fluids使用POP节点
很多刚入行的伙伴很容易会忘记的 , FLIP本质上就是一系列中间带有容积平流步骤的POP节点 , 基础本身只是粒子 , 意味着DOP中所有的POP节点都可以用于FLIP fluids 。 这就是为什么上一个技巧可以用POP Source节点获得source的原因 。
POP Force节点是用于处理常规粒子时创建运动的基本所在 , 那么 , 为什么不将其与FLIP流体一起使用呢?用POP Force节点可在产生很小噪波的情况下产生更有魅力的流体效果 , 低频噪波也可以有助于创建细节 , 无需增加粒子数量或粒子分离 。 但需要注意的是 , 不要添加过多噪波 , 可能会导致模拟看上去不是很真实 。
FLIP模拟中另外一个有用的POP节点是POP Speed Limit 。 结合 POP Drag节点 , 非常适合控制可能不太好控制的高速粒子 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧分页标题
本文插图
使用POP Force节点添加少量噪点对FLIP细节模拟有很大帮助
3.使用Bounds qL来设置FLIP limits
Bounds qL 节点是一个非常好的工具 , 包含很多简单实用的功能 , 它是非常大型的开源Houdini工具集 qLib的一部分 。 大多数工作室默认安装qLib , 因为它的开发是以实际制作而驱动的 。 如果你还没有用到的话 , 可以按照GitHub上的说明轻松安装 。
将Bounds qL主要用于设置FLIP和Pyro模拟的体积限制 。 这是从标准Bound节点开始的步骤 , 它包括一个选项 , 可以根据输入动画来创建边界 。
最有用的功能是Output: Values checkbox , 可解锁 bounding box的大小和中心值 。 然后可以把这些值复制到FLIP解算器Volume Limits选项卡的任何参数 , 或需要 bounding box的其他任何操作 。 具有集中的 bounding box信息可以避免用户错误 , 有助于创建更多程序性设置 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
参考Bounds qL中的参数有助于设置模拟极限 4.在FLIP求解器中启动有用的属性
在大多数FLIP模拟中打开FLIP解算器上的一些参数 。 有三个主要的参数是ID、age和vorticity , 可用于模拟后的调整(正如下一条技巧会介绍到) , 在Behavior and Vorticity选项卡的FLIP Solver中就能找到 。
相信很多Houdini用户都很熟悉ID属性和它的功能 。 缓存额外的属性可能会对数据大小有一些影响 , 但是能够获取到这些信息还是有用的 。
通过Age Particles checkbox(也可导出life属性)获取Age属性 , 可以随着时间控制模拟的外观 , 尤其是当粒子源在恒定发射的时候 。
vorticity属性对于获取激流/湍流这种次级模拟来源来说非常方便 , 而且对处理着色也非常有用 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
启用额外的FLIP属性:就像Houdini的其他操作一样 , 只需要勾选几个复选框 5.通过模拟后的调整来挽救失败的模拟
一般情况下更依赖于FLIP模拟作为最终结果输出 , 这是最理想的工作流程 。 可由于时间限制 , 在实际情况中我们不一定总是拥有重新模拟的机会来解决问题 。 在这种情况下 , FLIP粒子模拟后进行一些调整可以挽救失败的状况 。
例如 , 添加ID属性的原因之一是可以使用Retime节点对模拟进行重置时间 。
在运行中分辨率模拟时还会遇到一个常见的问题 , liquid droplets在模拟高密度区的大小很好 , 在稀疏密度区就会很大 。 在这种情况下 , 可以尝试使用pcfind , 函数可以帮助标记稀疏区域并降低它们的pscale值 。
使用的代码段:

「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
一个简单的VEX讨论 , 根据点云密度调整粒子大小 。 全尺寸图片在这里 。
6.使用xyzdist处理高分辨率碰撞表面
另一个模拟后的调整方法就是 , xyzdist()非常好用 , (Kevin Pinga认为)是到目前为止和 primuv()齐名的 。
在VEX或VOP文本中 , xyzdist() 计算的是表面上到最近插值点的距离 。 它与primuv()结合起来 , 就可以从对象的参数UV中提取任何属性 。
在上述情况下 , 提取高分辨率碰撞表面位置 , 并用于将粒子推向该表面 。 在某些情况下 , 也可以直接在网格表面位置进行这个操作 , 尤其是针对于那些可以看到碰撞表面的镜头(例如将液体倒入透明玻璃杯中) 。 要确保把距离限制在一个很小的值上 , 才能加快计算速度 。分页标题
使用的代码:
//initializing variables
int p_prim;
vector p_puv;
//getting the distance and the parametric position of the closest point
float dist = xyzdist(1,@P,p_prim,p_puv);
vector P2= primuv(1,P,p_prim,p_puv);
//mixing the P of the points, influenced by a mapped distance
@P = fit(dist,chf(min_dist),chf(max_dist),P2,@P);
在制作中 , 更为实际的用法是在模拟过程中使用较低分辨率的碰撞 , 然后再后期模拟调整中运行这个功能 , 使流体看起来像是在于高分辨率碰撞产生的交互 。
建议查阅Henry toadstorm Foster的博客文章 , 详细了解xyzdist() 和primuv() 。
https://www.toadstorm.com/blog/?p=465


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
使用xyzdist()和primuv()将粒子推向碰撞表面 7.使用ID属性消除有问题的粒子
当遇到模拟完成98% , 差不多快完事的时候 , 而剩余2%的粒子不起作用的情况时 , 有一个简单而又有效的解决技巧 。 如果存储了前面提到的ID属性 , 就可以用它来消除有问题的粒子 。 如果没有ID属性 , 随着point count在帧与帧之间的变化 , 就没法标记标记正确粒子以进行删除 。
有一个很好的方法 , 进入point selection模式 , 在键盘上按9 , 这时会显示出Group Selection 窗格 , 按ID选择 , 点击齿轮图标 , 选择Attributes id , 然后只需在视窗中选择要删除的粒子 , 点击[Delete]即可 。 Blast节点会自动生成 , 参考的是 point ID , 而不是point number 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
一种通过ID属性正确清除有问题粒子的简单方法 8.使用reseeding来增加稀疏区域
在制作中 , 大部分的模拟开发工作都是使用中分辨率容器完成的 。 有时候 , 得到的中分辨率FLIP模拟可能达到了你的所有要求 , 唯独在最终网格渲染的时候看上去粒子不太够 。 遇到这种情况的解决办法是 , 在FLIP解算器中降低Particle Separation设置(提高分辨率和粒子数) , 将模拟提交到渲染农场 , (回家享受一下周末)第二天早上发现模拟效果看起来完全不同了 。
不过在这种情况下 , 更建议大家启用reseeding参数 , 而不是改变 particle separation 。 在默认情况下使用reseeding参数 , 增加Surface Oversampling参数可以通过散布粒子来帮助增加稀疏区域中的粒子数量 。 这样 , 在保持了模拟的总体外观的同时 , 还得保证有足够粒子来避免网格流体看起来像瑞士奶酪一样 。


「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
增大surface oversampling来填充稀疏区域的模拟 这里有一个视频 , 来看一下操作流程 。
FROM:Dave Stewart 9.直接使用原始 FLIP 模拟作为不同元素
在进行流体模拟时的目标之一是最大限度地利用原始FLIP模拟 , 包括直接将其用作湍流/急流效果 。
模拟湍流的传统方式是模拟FLIP流体 , 然后再其之上运行湍流解算器 。 当然第二步并不总是非要有的 , 尤其对于飞溅和喷水等快速运动的流体来说 。 还有一个问题就是在对粒子进行网格化的时候 , 想让流体看上去真实一些也很不容易 。
建议大家用FLIP 模拟本身 , 直接加湍流着色器进行渲染 , 既可以渲染粒子本身 , 也可以将其光栅格为VDB , 进行体积渲染 。 有时Kevin Pinga会根据镜头的实际效果将两种方法结合到一起使用 。 使用Houdini海洋工具时自动创建的湍流着色器非常适合光栅化的粒子 。分页标题

「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
将原始FLIP模拟直接渲为湍流 10.优化模拟和缓存
高分辨率FLIP 模拟具有的挑战之一是需要处理生成大量的数据 。 一种常见的做法是在缓存模拟的任何部分之前删除不需要的属性 。
另外一个可以减少内存占用的操作是清除相机可视范围以外的粒子 。 在Houdini中有很多执行这个操作的方法 , 大家可以选用自己喜欢的一种 。
另外 , 如果已经准备好了要渲染的几何图形 , 最好将其缓存并启用Delay Load Geometry checkbox , Mantra不会将几何图形嵌入到IFD文件中 , 而是将其引用到硬盘的文件中 。 这将有助于减少加载时间 , 大大减少IFD生成时间和文件大小 。 如果你有渲染农场而且不想太麻烦的话 , 这个方法会很好用 。

「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧
本文插图
使用 File Cache节点中的Delay Load Geometry复选框可加快高分辨率模拟的工作 关于Kevin Pinga介绍的10条Houdini FLIP流体模拟技巧就是这样 , 如果其中有不准确的地方 , 还请大家多多谅解 , 附上原文链接方便小伙伴们自行查阅 , 希望有所帮助 。
【「鬼才狗仔」用Houdini怎样才能模拟出理想的流体,大佬给出10条技巧】更多精彩请关注酷奇娱乐网 , 我们将持续为您更新热门资讯!