LARK 在 Blender 中完全实现流体模拟效果
LARK 向我们介绍了 Private Beach 项目背后的工作流程,分享了他们在创建该项目时面临的挑战,并为那些想要尝试进行流体模拟的人提供了一些有用的提示。



介绍
LARK是来自日本的视频编辑。我的主要工作不使用 3DCG,而是在工作项目之间自己研究它。从我开始认真学习到现在已经一年多一点了。多亏了开拓者,Blender 有很多 CG 软件的资料,所以我喜欢即使是自学也很容易创作作品的事实。

参考和目标
我一直对3DCG中表现出来的各种艺术很感兴趣,特别喜欢那种可以反复观看的模拟类型。出于这个原因,我在开始使用 Blender 后不久就购买了 FlipFluid 插件,并创建了一些测试场景。但是,我发现模拟烘焙和渲染需要很多时间,即使是小场景也是如此,所以我并没有经常创建基于模拟的作品。然而,我一直渴望使用流体模拟来创建结合河流、海洋和湖泊等实际风景的场景。这一次,我能够找到时间,所以我决定着手一个我已经考虑了一段时间的想法。
我的第一步是确定我是否真的可以使用 FlipFluid 来创建我想要的那种场景。为此,我在 YouTube 上查找了各种人的作品示例,并整理了一份我认为是理想模拟的作品列表。深思熟虑后,我决定以“创造一个照片般逼真的海滩”为目标,并开始收集参考资料。
过去,我曾尝试将一些想法作为一个大型项目付诸实践。虽然当时我在这个过程中失败了,所以对于一个新项目,我的首要任务是能够很好地完成它。因此,我想制作一个相对较小的等距场景,并收集适合图像的图像。下面你可以看到我收集的实际参考图像。

设置场景
第一步是开始处理场景的粗略布局。正在进行的工作留下的图像不多,您在下图中看到的是早期的布局。如您所见,我只是粗略地放置了原始对象。我把一个模糊的图像变成了一个具体的形式。有一些方法可以使用真人素材在 Photobash 中绘制粗糙的图片或创建粗糙的图像,但我并不擅长这两种方式,所以我从一开始就使用了 Blender。

这个阶段的场景规模比最终的要大得多。此外,最初,我计划拥有更多的对象。但是,当我尝试与布局并行运行简单的流体模拟时,我遇到了模拟计算时间的问题。如果要模拟接近现实的波浪,自然也需要调整比例。这个场景的规模相当大,垂直方向有100多米,但即使是低分辨率的模拟测试也需要大量的时间,我不得不等待相当长的时间才能看到波浪是如何产生的结果。由于很难在时间框架内完成这个项目,我决定改变项目的方向,转而制作更小的场景。
下面你可以看到我经过几次调整后创建的最终场景。原始场景中的大部分元素都被移除了,只剩下一个简单的海滩。此外,我决定制作一个看起来像装在箱子里的海滩的桌面内饰。
我也审查了工作流程。首先,我专注于创建“理想波”,然后在更改布局的同时运行测试模拟。根据模拟结果,我微调了岩石的位置和海滩的地形。

使用 FLIP 流体进行波浪模拟
Flip Fluids 是该工作流程的核心,它与标准 Blender Mantaflow 不同,因为它专门用于流体模拟。当我第一次开始使用 Blender 时,我用 Mantaflow 做了几个关于流体的教程,但我很困惑 UI 和计算结果因 Blender 版本而有很大差异。此外,Mantaflow 还可以模拟烟雾和火焰等非流体,但也正因为如此,它的设置繁多,比较难理解。在这方面,Flip Fluids 的设置很多,看起来很复杂,但是一旦习惯了,UI 就很容易理解,而且最重要的是,官方的教程视频和文档非常丰富。而且即使升级,UI 也基本保持不变。因此,您可以参考过去的教程并按原样使用它们。
在下图中,左图显示了侧边栏中显示的菜单,右图显示了属性面板中显示的菜单。

用户可以下载的示例场景是针对各种案例设计的,并分发了实际的项目数据,以便您仔细检查内容。我特别喜欢命令行工具,它在后台进行模拟烘焙和渲染,而不使用 Blender UI。多亏了这一点,即使在重负载下,Blender 也很少崩溃,让您在整夜处理时高枕无忧。

波浪
对于实际的流体模拟部分,我使用了 Remington Creative 上传的 YouTube 视频作为很好的参考。该视频内容丰富,作者总结了他如何使用 FLIP Fluids 创建理想波浪的细节。当然,这并不是介绍可以照原样使用的数值,而是一种思维方式,所以需要根据自己的实际情况调整数值。我提到的另一件事是 CG Geek 的教程。 第一部分和第二部分相当长,作者使用的是旧版本的 Blender,但教程仍然很有帮助。
此外,虽然它不是一个教程,但 Artell Blender 的作品非常好,看起来对我来说是理想的海滩,这是我这个项目的最终目标。
除了使用 Blender 和 FLIP Fluids 之外,我不知道其他流体模拟,因此其他软件的情况可能会有所不同,但至少对于这项工作,不需要详细再现现实世界的现象来创建波浪。
如果您使用的是 Blender,您可以通过准备四个主要对象来执行流体模拟计算:
域——指定计算的范围;
流体——定义用于计算的水的框;
以海滩为基地(障碍);
用于创建波浪的对象(Wave Object)。
恐怕很难理解,但这就是图中的样子:

当您开始模拟时,流体会根据线框显示中名为 Fluid 的对象的大小生成,用于创建波浪的对象(Wave Object)会在现场上下动画以将流体推出。在一定数量的帧之后,海浪会产生并发射到海滩上。波浪在现实中出现的方式是由于更复杂的自然现象和地形的形状,但可以像这样以简化的形式再现。海滩物体需要有一定的高度来阻止产生的波浪,所以它被做成了一个陡峭的斜坡,而不是像真正的海滩那样的缓坡。
您可以在 FLIP Fluids 设置中设置海滩对象的摩擦系数。摩擦系数使得被发射的海浪可以逐渐减速并停止,而不是沿着海滩滑动并到达海滩的尽头。
海滩的地形与能否创造出理想的海浪形状和运动有很大关系,因此通过反复的测试模拟,对海滩的形状进行了多次修改。
顺便说一句,模拟中的地形对象(障碍物)必须是封闭网格,而不是非流形。在标准 Mantaflow 的情况下,您可以模拟没有厚度的平面物体,但在 FLIP Fluids 中,如果物体不够厚,则无法检测到障碍物,并且会漏水。
下图显示了从下方看到的海滩物体。你可以看到它没有附加任何面,所以它不是一个封闭的网格,这会导致模拟中的错误。

要使用 FLIP Fluids 生成气泡,您只需选中 Whitewater 并选择所需的元素。您可以通过调整此处的值来控制产生的气泡量等。我在灰尘上尝试了几次,但无法确定它是否正在生成,所以我取消选中它。

如果在这种状态下运行模拟,流体碰撞会产生白水。

最初,我在沙滩上没有放置任何东西来测试模拟,但是感觉海浪单调,所以我在沙滩上放置了岩石作为障碍物,并设置了摩擦系数。通过这样做,当波浪撞击岩石时也会产生白水。

还为海滩本身设置了摩擦系数,但将 Whitewater Influence 值调整为更大的值,以便在波浪发射时产生更多的 Whitewater。我微调了几次,因为产生的白水过多会导致泡沫状态,好像洗涤剂中混合了它。正如你所看到的,白水的产生量可以通过每个对象的参数来控制,但是例如,如果你想显着增加数量,你可以通过增加模拟本身的分辨率来产生更多的气泡。
然而,计算量会成比例地增加,所以我在简单的测试和更高分辨率的详细模拟之间交替进行,以瞄准产生理想波浪和白水的状态。 我还必须将材料应用于波浪和生成的白水。
FLIP Fluids 具有材料预设,因此您只需从设置部分中选择它们即可使用它们。

在这个场景中,我没有使用标准的海洋体积材质,因为它的绿色太浓了,与场景不匹配,因为我期待的是热带蓝色的大海。 我本可以使用着色器编辑器来更改色调,但我使用了我之前提到的 Remington Creative 分发的 RealWater 材质。

主要挑战
创建气泡是照片般逼真的波浪的基本元素,是制作这个场景时的挑战之一。它们不能以理想的比例过多或过少生成,因此需要重复多次模拟。我还参考了各种人的教程和文档,但我花了很多时间来验证每个设置如何影响另一个设置。
最大的问题之一也是必须模拟的大量帧。这次我选择海洋作为我的主题是一个特别的问题,因为它需要至少 300 额外的帧才能产生美丽的波浪,而且每次我模拟测试都需要很多时间。
这一次,我将最终模拟分辨率设置为 350,但更改此部分中的值会显着改变结果。这也是我不得不重复测试的原因之一。如官方文档中所述,增加分辨率会创建新对象。因此,需要重新计算,结果与之前的模拟结果有很大差异。

我还遇到了在正常渲染过程中看不到白水的问题,这是通过按 F12 键完成的。这似乎是Blender引起的问题,而不是插件引起的,并且在将大量几何体同步到渲染器时出现错误,因此白水消失了。由于在这种状态下我根本无法检查关键的白水,所以我使用前面提到的 FLIP Fluids 命令行工具来渲染它,而不是通常的渲染。 通过这样做,我可以避免上述问题并正确渲染。 但是,由于在将结果导出为静止图像之前无法检查结果,因此每次检查都使用它们非常麻烦。
左边的图像是通过正常渲染气泡消失的状态。

我还为海滩使用了 WetMap,使其看起来更逼真。WetMap 用于控制地面的湿度,通过使用 Blender 的 Dynamic Paint 功能,我可以检测流体模拟的接地部分并生成黑白图。在下图中,您可以看到 WetMap 的连续编号文件的一部分。

我使用生成的 WetMap 作为一个因素。Base Color 和 Roughness 值相应更改,海滩颜色变得稍暗,并且由于潮湿而开始被反射。

这是在材质视图中渲染的视口图像,用于查看 WetMap 的工作原理。要检查一下,每次进行产品渲染的时间都不够,所以 Blender 的视口渲染功能很有帮助。

这里遇到了一个Blender在通过Dynamic Paint函数烘焙WetMap时经常会崩溃的问题。这似乎是自 Blender 2.8 以来一直存在的错误,但在通过动态绘画功能进行烘焙时。如果你不最小化 Blender 的窗口,软件很可能会崩溃。它仍然发生在 3.0 中,因此我浪费了很多时间。如果一定要给以后想尝试流体模拟的人一些建议,我会推荐一个规模较小、检查时间不长、不需要初步框架的主题。此外,由于启用 Whitewater 时计算速度会大大降低,因此您可能希望在尝试以较低分辨率进行大致流体运动后启用 Whitewater。但是,小规模有自己的困难,所以我建议你阅读官方教程。
如果可能,还建议使用高性能 PC。模拟烘焙是在 CPU 而不是 GPU 上完成的,更高分辨率的场景需要大量内存。请注意,与不需要太多 PC 规格的建模和纹理任务不同,流体模拟可能不允许您根据 PC 规格创建所需的内容。
作为参考,我的电脑规格如下:
锐龙9 5950X
64GB 内存
RTX 3090

灯光
对于场景的照明,我尝试了各种方法,例如通过从完全黑暗的状态放置灯光来从头调整照明,或者在 Blender 中使用 Sky Texture 的 Nishita,但最终我使用了 Poly 分发的 Secluded Beach HDRI 避风港。
顾名思义,它是一个沿海HDRI,因此非常适合这个场景。 我旋转了 HDRI 来调整阴影的位置并增强亮度,以创造具有强烈对比度的“夏日阳光感觉”。

对比度太强以至于阴影变暗,所以我放了一些灯来照亮该区域。我一共渲染了600F,从300F到900F,海浪最漂亮的地方。经过测试,发现玻璃部分容易出现噪点,所以我将采样数设置为1024,渲染后去噪。

渲染
该项目是在 Blender 3.0 中创建的,我期待使用最新版本的 CyclesX 进行快速渲染,但实际上,渲染前的初始化和同步部分花费了大量时间,每帧最多 2 分钟。我尝试了几种方法来处理它们,但没有任何改进,我决定在夜间使用 FLIP Fluids 的命令行工具进行渲染,几天后我设法完成了它。我使用 Blender 的合成设置来测试颜色校正等,但没有在最终产品中使用它。 我最终在我经常使用的 After Effects 中导入了按顺序编号的文件,以进行细微调整并添加模糊。 之后,我在 Premiere Pro 中进行了最后的色彩校正。 这一次,我在整个SNS上都使用了鲜艳的色彩来吸引眼球。

概括
虽然这幅作品的规模比最初的形象要小很多,但我觉得我能够创造出我想象中的丰富波浪。与我以前的作品不同,我很高兴有这么多人看到我的新项目。
但是,我有一些遗憾。 其中之一是,由于试图使海浪更具风景和吸引力,导致海浪撞击海滩的时间变得太短。 此外,我无法添加棕榈树在风中摇曳的动画、海浪声和其他可以增强作品的元素。 我想在未来的作品中利用我通过这次制作获得的经验。
目前,Blender 是我的主要工具,但作为一个模拟爱好者,我想在未来使用 Houdini。

