在本系列关于 Blender 4.5 中使用 Fluid 模拟器制作火焰与烟雾的第九个教程中,我们将学习如何使用 Force Fields,例如 Turbulence 和 Curve Guide,来影响模拟元素的行为和运动轨迹。
本教程是关于 Blender 4.5 中火焰与烟雾基础的 10 集迷你系列的一部分。要查看完整的剧集列表,请点击这里。
本教程的视频版本目前尚未提供该语言版本,但可在页面顶部选择英文查看。
视频文字稿
大家好!在本系列关于 Blender 4.5 中使用 Fluid 模拟器制作火焰与烟雾的第九个教程中,我们将学习如何使用 Force Fields,例如 Turbulence 和 Curve Guide,来影响模拟元素的行为和运动轨迹。
本教程使用的起始场景非常简单,只包含一个 Domain,以及一个以 Inflow 模式同时发射火焰和烟雾的球体。
通过在场景中添加一个 Empty,我们可以为其分配一个 Force Field,用来扰动或引导模拟元素。Force Fields 位于 Physics 面板中,与 Mesh 对象的 Fluid 模拟位置相同。我选择了 Arrows 类型的 Empty,因为某些 Force Fields 会沿特定方向作用,而这种 Empty 类型可以更直观地显示方向。

接着我添加一个 Force Field,默认类型为 Force。每种 Force Field 都带有提示信息,说明其作用方式以及影响方向。Force 默认形状为 Point,并从中心向外径向作用。然而播放模拟时,我们并没有看到任何效果,尽管 Inflow 对象似乎位于 Force Field 的作用范围内。
在这种情况下,一个通常有效的步骤如下:保存项目文件后,指定一个缓存文件夹。然后将 Domain 的 Baking 模式切换为 All,让 Blender 至少计算几帧模拟。
完成后,按下 Play 查看模拟是否正确计算。如果一切正常,清除 Domain Cache,并将 Baking 模式切回 Replay。
调整项目的动画时长以及 Domain 中的模拟帧范围,然后在 Timeline 中点击 Play。
如果模拟现在可以正常运行,从此之后你就可以在 Replay 模式下测试各种效果。
要控制效果强度,Force Fields 提供了 Strength 参数,它只作用于当前选中的 Force Field,并且可以添加动画。
顺带一提,如果你在点击编辑某个参数之前按住 ALT 键,可以同时修改多个选中对象中的同一参数。

Strength 可以让我们调节单个 Force Field 的强度,甚至通过动画进行控制。但正如在 Domain 教程中所讲,我们也可以统一控制场景中所有 Force Fields,或某一类型的 Force Fields 的影响程度。这些设置位于 Domain 的 Field Weights 区域,并且同样可以添加关键帧,也就是说,可以让某一个或全部 Force Fields 的效果随时间变化。
Force 的 Strength 参数以及许多其他 Force Fields 的 Strength,都可以设置为负值。对于 Force 类型来说,负值会使火焰被吸引至该 Force Field。
屏幕上展示的是一个示例,我为 Empty 添加了移动动画,并将 Force 设置为负值。正如你所想,这是一种有趣的方式来引导火焰与烟雾。

如果要详细讲解所有 Force Field 的全部参数,恐怕需要单独做一个小系列,因此这里不做展开。不过有一个值得关注的部分是 Falloff,它允许我们设置 Force Field 的影响范围。
目前这个 Force Field 会在整个虚拟空间中生效,没有任何衰减。为了更清楚地演示,我将 Force 改为 Wind,同时保持 Strength 为负值。即使 Wind 只沿 Z 轴作用,并且放置在距离 Inflow 较远的位置,它仍然会影响模拟。

要限制 Force Field 的作用范围,可以使用 Falloff 区域中的 Max Distance 参数。默认情况下该参数是关闭的。启用后,在 3D Viewport 中会显示一个圆圈表示作用范围。和许多参数一样,Max Distance 也可以添加关键帧,是动画中控制 Force Field 效果的另一种方式。在这个例子中,由于 Strength 仍为负值,Wind 正在拉动火焰与烟雾。

现在我关闭 Max Distance,将 Force Field 恢复到原始方向,并将 Strength 设置为正值,快速查看其他几种 Force Fields。
一个非常实用的 Force Field 是 Turbulence,它可以为火焰增加动态扰动。由于扰动非常强烈,烟雾会遮挡火焰,因此我在 Domain 中通过启用 Dissolve 来减弱烟雾。
通过提高 Noise 参数,可以让 Turbulence 更加随机。这种噪声实际上是伪随机,因为它遵循某种模式,而你可以通过 Noise Seed 参数选择不同模式。如果在调整 Vorticity 或添加 Textures 之后,火焰看起来仍然过于均匀,添加一个轻微的 Turbulence Force Field 可能正是你需要的效果。
接下来,我们看看 Curve Guide Force Field,它可以让模拟元素沿路径运动。为此,我重新创建了初始场景,将新项目保存为另一个文件,并为 Domain 设置新的缓存文件夹。这样场景中的 Domain 和 Inflow 对象都会保持默认创建时的设置。
不过我启用了 Dissolve,并将帧数设得比默认值更高,以避免烟雾过多遮挡视图。
同时我将 Inflow 对象移到一侧,为路径曲线腾出空间。

添加一条 Bezier 曲线并为其设置 Curve Guide Force Field 后,结果却并不理想。
如果你熟悉曲线和 Curve Guide 修改器,就会知道良好的做法是将曲线的 Origin 设置在路径起点,并确保曲线方向正确。可以在 Edit Mode 下通过 Curve Overlays 检查方向,如有错误可使用 Switch Direction 修正。重新启动模拟后效果略有改善,但仍然不够理想。
我尝试了多种设置,例如在 Domain 中关闭重力,提高 Field Weights 中 Curve Guide 的值,同时降低 Vorticity 和 Reaction Speed,提高分辨率等等。虽然有变化,但仍然不够明显。下面我展示一种我通常使用的方法来获得理想结果。
我在带有 Inflow 的对象上添加一个类型为 Emitter 的 Particle System,并设置基本参数,使粒子正确发射。可以注意到,粒子会立即沿曲线路径运动,因为发射器位于 Force Field 的作用范围内。

Force Field 的作用范围可以在其面板中通过 Minimum Distance 参数设置。在这里还可以将 Clumping 设置为 1,使所有粒子在曲线末端聚集。
然后我将该发射器粒子系统的 Render 设置为 None,因为这些粒子不需要被渲染。接着返回 Inflow 面板。
在该面板中,将 Flow Source 从 Mesh 改为 Particle System,并指定刚刚创建的粒子系统。这样火焰与烟雾就会从沿路径移动的粒子发射出来。
接下来,你可以调整 Fuel、Vorticity 等参数,使火焰呈现出想要的外观。

在结束本教程之前,我再展示一个技巧,使用名为 Hooking 的方法,将曲线的控制点链接到外部对象,从而更方便地为曲线形状添加动画。
首先选择曲线,进入 Edit Mode,选择最后一个控制点。然后使用 Hook 操作符,选择 Hook To New Object,这会自动创建一个 Empty。

回到 Object Mode 后,你可以移动这个 Empty,并为其添加动画,从而改变曲线形状和火焰形态。当然,你也可以为其他控制点添加更多 Empties,创建更复杂的动画效果。

你可能注意到,某个时刻粒子停止发射。这个参数叫做 Frame End,位于 Particle System 面板中。同一面板中的 Lifetime 参数则控制粒子沿曲线运动的持续时间。

在结束之前,再补充几点说明。
Emitter 对象的大小决定发射表面的大小。如果希望粒子集中在更窄的曲线上,可以调整该对象的尺寸。
粒子数量也会影响火焰曲线的平滑程度。如果数量过少,火焰会显得分段明显,因此可能需要增加粒子数量,使火焰更加连续和平滑。
此外,使用 Motion Blur 也可以改善视觉效果,我们将在下一节教程中介绍这一内容。