Houdini FLIP流体模拟的10条专业技巧

自译 CG资讯 版权:版权归原作者所有,仅供分享与交流

2319 0 0 2020-03-31 10:51:01 举报

FuseFX艺术家Kevin Pinga当前的VFX展示了Houdini的能力,可以模拟现实世界中的流体,例如烟和液体。

Houdini提供了一套强大的工具来模拟流体。但是,使流体看起来逼真是一项特别具有挑战性的任务,特别是对于特效工作。

由于电视节目现在严重依赖视觉效果,因此交付截止日期越来越紧,但质量预期却与故事片中的效果相当。画家必须确保在播出之前完成拍摄,这是压力,这在大多数情况下只有几天(有时是几小时!)之遥。


在过去的三年中,我通过Ingenuity Studios,FuseFX和Luma Pictures等多家工作室为诸如《行尸走肉》和《城堡石》等电视节目提供了流体模拟工作。我还在音乐录影带中为泰勒·斯威夫特(Taylor Swift),比利·埃利什(Billie Eilish)和栗色5(Maroon 5)等艺术家做过FX工作。


通过这些项目,当我使用Houdini的FLIP求解器模拟流体时,我已经在工具箱中收集了一些技巧。这些提示和技巧可以帮助您在尝试及时提供流体镜头的同时更高效地管理流体模拟,同时仍保持较高的质量。


这些技巧针对的是熟悉FLIP解算器的艺术家,因此,如果您是新手,请去SideFX上看新手教程。文章中的图像已按比例缩小到网络上,但您可以在文章底部下载原始文档。

200320_KevinPingaHoudiniFluidsTips_01_POP_Source_sm.gif

↑使用POP Source采购液体可提供熟悉的发射,激活和速度属性。


1.使用POP来源而不是FLIP来源的流体

为FLIP采购流体的默认方法是使用“ FLIP源( FLIP Source)”节点,该节点实质上创建了一个VDB,该VDB由DOP中的“ 体积源(Volume Source)”节点读取。这是使用架子工具时自动获得的。


从大型歧义形状进行采购时,此方法可以很好地工作,但它可能会占用大量资源且很耗时。甚至在进入仿真阶段之前,提高VDB的分辨率以获取准确,更准确的货源可能会进一步减慢速度。


相反,我喜欢直接使用基于多边形的常规SOP几何图形,而无需转换为VDB。可以通过连接到FLIP求解器本身的Sourcing输入的POP Source节点读取此源,就像为常规粒子模拟导入源一样。


POP Source节点上的控件也更加直观。大多数艺术家应该在使用常规粒子的过程中熟悉它们。粒子计数可以以更加可预测的方式进行控制和监视,而与FLIP对象本身的粒子分离无关。

200320_KevinPingaHoudiniFluidsTips_02_POP_Force_sm.gif

↑使用POP Force节点添加少量噪声对详细描述FLIP仿真有很大帮助。


2.将POP节点与FLIP流体一起使用

初级艺术家忘记的一点是,FLIP本质上是一系列POP,其间有一些平流步骤。但是,基体本身只是粒子,这意味着DOP中的所有POP节点都可以用于FLIP流体!这就是为什么我们能够使用上一个技巧中的POP Source节点进行来源的原因。


该POP力(POP Force)节点是与规则颗粒工作时产生有趣的运动的主食。那么,为什么不也将其与FLIP流体一起使用呢?用它来引入甚至很小的噪音也会产生看起来更吸引人的流体。低频噪声对于创建细节也很有用,而不必增加粒子数或粒子分离。(请注意不要添加过多的噪声,因为这可能会导致模拟看起来不现实。


在FLIP仿真中有用的另一个POP节点是POP速度限制(POP Speed Limit)。结合POP拖动( POP Drag )节点,它非常适合控制可能无法控制的高速粒子。

200320_KevinPingaHoudiniFluidsTips_03_Bounds_QL_sm.gif

↑参考Bounds qL中的参数有助于设置模拟极限。


3.使用界限qL设置您的FLIP限制

Bounds qL节点是一个非常漂亮的工具,其中包含许多简单但有用的功能。它是更大的开源Houdini工具集qLib的一部分。在大多数工作室中,默认安装qLib,因为其开发是由实际制作工作驱动的。如果您的个人生产环境中没有它,则可以按照GitHub上的说明轻松安装。


我将Bounds qL主要用于设置FLIP和Pyro模拟的音量限制。这是从标准“ 绑定”节点开始的步骤,因为它包含一个选项,可以根据动画输入来创建边界。


我发现最有用的功能是“输出:值”复选框,该复选框可解锁边界框的大小和中心的值。然后可以将这些值复制到FLIP求解器的“音量限制”选项卡中的任何参数,或需要边界框的任何其他操作。具有集中的边框信息可以避免用户错误,并有助于创建更多的程序设置。

200320_KevinPingaHoudiniFluidsTips_04_Attributes_sm.gif

↑启用额外的FLIP属性:就像Houdini中的很多事情一样,此修复程序仅需几个复选框!


4.在FLIP求解器中启用有用的属性

我希望在大多数FLIP Sims中打开FLIP解算器上的一些参数。三个主要参数是ID,年龄和涡度。正如我们将在下一个技巧中看到的那样,它们可用于进行仿真后的调整,并且都可以在“行为和涡度”选项卡下的“ FLIP解算器”中找到,如上所述。


大多数艺术家已经熟悉ID属性及其功能。缓存额外的属性可能对您的数据大小影响不大,但是使该信息可用始终是一个好主意。


通过“年龄粒子”复选框启用“年龄”属性(还可以导出“寿命”属性),可以控制sim卡随时间的外观,尤其是当您的源不断发光时。


vorticity属性对于采购诸如激流之类的辅助仿真非常方便,并且对于操纵阴影非常有用。

200320_KevinPingaHoudiniFluidsTips_05_Pscale_Tweaking_sm.gif

↑一个简单的VEX争执,可根据点云的密度调整粒度


5.进行仿真后调整以挽救失败的模拟市民

作为最终结果,倾向于严重依赖FLIP模拟的输出。尽管这是理想的工作流程,但由于时间限制,您并不总是拥有重新模拟解决问题的能力。在这种情况下,对FLIP粒子本身进行模拟后调整可以帮助“挽救”模拟。


例如,添加ID属性的原因之一是,它使您能够使用Retime节点对SIM卡进行重新定时。有时我忘记打开此复选框,只是发现我在镜头中收到的唯一音符是“将其放慢80%”,这意味着我已经再次模拟了所有内容。


运行中分辨率模拟时遇到的另一个常见问题是,在模拟的高密度区域中,液滴的大小很好,而在稀疏区域中,液滴的大小太大。在这种情况下,使用该pcfind:函数进行的简单纠缠可以帮助标记稀疏区域并降低其pscale值。


这是在纠缠中使用的代码片段:

int pc[] = pcfind(0,'P',@P,chf('max_dist'),chi('max_pts'));

@pscale *= float(len(pc))/ch('max_pts');

200320_KevinPingaHoudiniFluidsTips_06_Xyzdist_sm.gif

↑使用xyzdist()和primuv()将粒子推向碰撞表面。


6.使用xyzdist处理高分辨率碰撞表面

这是另一个模拟后的调整,但是我发现xyzdist()它是如此有用,以至于它值得自己提出一点。迄今为止,它是我最常用的功能之一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()and primuv()。

200320_KevinPingaHoudiniFluidsTips_07_Killing_Particles_sm.gif

↑一种通过ID属性正确清除有问题的粒子的简单方法。


7.使用ID删除有问题的粒子

当您的模拟接近98%接近最终完成,但其余2%的粒子不起作用时,这是一个简单而有效的技巧。如果存储了前面技巧中提到的ID属性,则可以使用它消除问题粒子。如果没有ID,您将无法标记正确的粒子以进行删除,因为点数会随着帧的变化而变化。


我发现最好的方法是进入点选择模式,然后在数字键盘上按[9]。这将显示“组选择”窗格。要按ID选择,请点击齿轮图标,然后选择属性> ID。现在,您只需在视口中选择要删除的粒子,然后单击[删除]。甲高炉节点(Blast node)将生成自动引用点ID而不是点编号。

200320_KevinPingaHoudiniFluidsTips_08_Reseeding_sm.gif

↑增大表面过采样以填充模拟的稀疏区域。


8.使用补种来增加稀疏地区

在生产中,大多数模拟开发工作都是使用中分辨率容器完成的。有时,您可能会得到中等分辨率的FLIP sim卡,该SIM卡已经击中了您需要击打的所有音符,但是当网格划分为最终渲染时,没有足够的粒子使其看起来正确。您可以在FLIP求解器中降低“粒子分离”设置(这会提高分辨率和粒子数),将模拟提交给农场,然后回家享受周末剩下的一切,直到第二天早上回来并立即发现模拟看起来完全不同!


在这种情况下,我更喜欢打开重新播种参数,而不是更改粒子间距。默认情况下,重新播种已启用,但是提高“表面过采样”参数可以通过散布粒子来帮助增加稀疏区域中的粒子数。这样,您就可以保持模拟的总体外观,但要有足够的粒子来避免网状流体看起来像瑞士奶酪。

GIF.gif

↑由戴夫·斯图尔特在制作中使用的工作流程

200320_KevinPingaHoudiniFluidsTips_09_WW_sm.jpg

↑将原始的FLIP SIM卡直接渲染为激流。


9.直接将原始的FLIP SIM卡用作其他元素

在进行流体模拟时,我的目标之一是最大限度地利用原始FLIP模拟。这包括直接将其用作白水。


创建白水的传统方法是模拟FLIP流体,然后在其上运行白水求解器。但是,第二步并非总是必要的,尤其对于飞溅和喷水等快速移动的流体(想想消防栓破裂或在热水浴缸中的水下–是的,这些是真实项目的镜头!)。另外,在对粒子进行网格化时使流体看起来正确可能非常棘手。


相反,您可以做的是拿FLIP sim本身,直接用白水着色器进行渲染。您既可以渲染粒子本身,也可以将其栅格化为VDB并将结果渲染为体积。我将两种技术结合使用,具体取决于拍摄的最佳效果。使用Houdini的海洋工具时自动创建的白水着色器非常适合光栅化的粒子。

200320_KevinPingaHoudiniFluidsTips_10_Delayed_Load.jpg

↑使用“文件缓存”节点中的“延迟加载几何”复选框可以加快高分辨率模拟的工作。


10.优化模拟和缓存

高分辨率FLIP Sims的挑战之一是处理它们生成的大量数据。常见的做法是在缓存模拟的任何部分之前删除不需要的所有属性。


您可以做的另一件有助于减少内存占用的操作是清除照相机视锥范围内的颗粒。Houdini中有许多方法可以执行此操作,因此请使用您喜欢的任何一种。


另外,如果您准备好要渲染的几何图形,则最好将其缓存并启用“延迟加载几何图形”复选框。Mantra不会将几何图形嵌入到IFD文件中,而是将其引用到磁盘上的文件中。这将有助于减少加载时间,并大大减少IFD生成时间和文件大小。如果您有渲染场并且不想陷入困境,该功能很有用!



关于作者:Kevin Pinga是洛杉矶的FX艺术家,曾参与屡获殊荣的电影和电视剧的制作,其中包括最近获得AACTA最佳视觉效果奖的《蜘蛛侠:远离家乡》。其他项目包括AMC的《行尸走肉》,布鲁克林9-9,以及泰勒·斯威夫特和比利·埃利什的音乐视频。

标签 特效流体Houdini

声明:该资源由发布人:【编辑:牙牙小Q】上传,点击查看作者主页其他资源。

CG模型网(cgmodel.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何CG模型网(cgmodel.com)之意见及观点。

推送到

首页推荐 编辑推荐

取消 通知作者
对此作品设置了隐私保护,禁止保存至本地。