在这套关于 Blender 4.5 中使用 Fluid 模拟器制作火焰与烟雾的系列教程第七课中,我们将学习如何使用上一课介绍的 Voxel Attributes 来修改火焰和烟雾的渲染材质。


本教程是关于 Blender 4.5 中火焰与烟雾基础的 10 集迷你系列的一部分。要查看完整的剧集列表,请点击这里。

本教程的视频版本目前尚未提供该语言版本。您可以在下方观看带字幕的英文版视频;视频下方提供了翻译成中文的文字稿。


视频文字稿

大家好。在这套关于 Blender 4.5 中使用 Fluid 模拟器制作火焰与烟雾的系列教程第七课中,我们将学习如何使用上一课介绍的 Voxel Attributes 来修改火焰和烟雾的渲染材质。

在本期第一个示例场景中,火焰的发射来自一个设置为 Inflow Fire 的对象的 Vertex Group。模拟的 Domain 只包围燃烧器的上半部分,因为火焰正是在那里形成和发展。

关于从 Vertex Group 发射火焰,如果你看不到发射的火焰,问题可能与 Domain 的分辨率有关。当分辨率过低,也就是 Voxels 过大时,包含发射顶点的 Voxels 可能会被视为空,从而无法产生火焰。因此可以尝试提高 Domain 的分辨率。

在默认设置下,初始火焰会非常低,甚至在侧视图中几乎看不见。不过我们已经掌握了多种调整方法。例如,可以修改 Inflow 对象的初始速度,让火焰获得向上的推力,或者调整 Domain 的 reaction speed,让火焰更高。至于这种燃烧器产生的火焰类型,可以在湍流程度和颜色上进行变化。为了得到第四种几乎没有湍流的火焰类型,我将 Domain 的 Fire 部分中的 Vorticity 值降低到 0。

在定义 Material 之前,我做最后一个调整。我在发射用的 Vertex Group 中增加了更多顶点,并将 Timeline 动画限制为模拟的最后 100 帧,也就是火焰已经充分发展并趋于稳定的阶段。

现在开始设置 Material。我将 3D 侧视图直接切换到 Rendered 模式,并把 World 背景的 Strength 设为 0,因此初始预览是黑色。在左侧的 Image editor 中我放置了一张参考图片,中间是 Domain 的 Material editor,其中包含一个 Principled Volume 节点。

正如前几课所示,如果仅仅提高 Emission Strength,并在 Emission Color 字段中设置统一颜色,结果会非常令人失望。我们已经学习了如何使用 Blackbody,现在则是学习使用 Emission 模式的时候了。

在上一课中我们了解到,Fluid 模拟器会为每一个 Voxel 存储信息。这些数据可以通过 Attribute 节点提取,只需在相应字段中输入属性名称即可。不过对于体积材质,有一个专用节点 Volume Info,可以直接以输出插口的形式提供这些属性。

当我们将 Flame 输出或 Temperature 输出连接到 Emission Strength 输入时,火焰的外观会发生巨大变化。相比 Temperature 输出,Flame 输出提供了更平滑的插值结果,而 Temperature 会更明显地暴露 Domain 分辨率。

因此我将使用 Flame。

Flame 和 Temperature 输出也可以用于 Emission Color,尤其是在中间加入一个 Color Ramp 节点时。这样就可以根据 Domain Voxels 中包含的信息,在火焰的不同位置改变颜色。

我将 Flame 信息连接到 Color Ramp,并进一步连接到 Material 的 Emission Color 参数。接下来需要设置 Color Ramp 各个 Color Stop 的颜色和透明度。可以使用 Blender 的 Color Picker 直接从参考图像中采样颜色。

请注意,各个 Color Stop 的颜色也可以包含透明度值。这在火焰的外部区域非常有用,因为在边界之前通常可以看到一个半透明的区域,而边界本身更不透明。

同时还需要仔细选择 Color Stops 之间的插值方式。

在这些选项中,Constant 是最极端的一种,它会在不同 Color Stop 之间进行突然切换。虽然不够真实,但在更具艺术风格的表现中可以使用。

如果你觉得这一节关于材质的内容较短,那是因为我们是在之前课程所学内容的基础上继续构建。

此时,我们已经掌握了足够的知识,可以通过 Domain 和 Flow 对象的 Fluid 参数来定义不同的火焰形态,并使用 Blackbody 或 Emission 以及 Blender 提供的各种节点来控制视觉外观。

不要局限于我刚才展示的设置。也可以尝试其他 Material 节点。例如,可以添加一个 Math 节点并设置为 Multiply 或 Power,用来修改 Emission Strength,从而改变来自 Flame 的信息。此外,这些节点的参数都可以添加关键帧,因此可以通过修改 Material 来为火焰强度制作动画,而无需调整模拟中 Fluid 组件的字段。

在结束本教程之前,我向大家展示一下如何在同一个 Domain 中创建三个不同颜色的 Inflow 对象。效果并不完美,但这正好可以用来演示节点的另一种应用方式,特别是 Color Ramp 的用法。

正如我们所知,Material 必须在 Domain 层级定义,因为它是基于 Domain 的 Voxels 生成的。因此无法在其中为不同的 Inflow 对象分别指定不同的 Blackbody 节点。

不过,在 Inflow 对象的 Inflow 面板中有一个字段叫做 Smoke Color。

这个颜色可以在 Domain 的 Shader 中通过 Volume Info 节点获取,具体使用的是 Color 输出。

将这个字段作为 Mix Shader 节点中的 Factor,就可以根据为每个 Voxel 定义的烟雾颜色,为不同 Voxels 分配不同的 Principled Volume 节点。

但是仅仅使用 Mix Shader 会简单地以五五比例混合两个 Shader,因此我们需要使用一个 Color Ramp,并对来自 Volume Info 的颜色进行明确分离。

为此,我将插值方式设置为 Constant。

然后为三个 Inflow 对象分别指定三种不同的 Smoke Color,从左到右依次为白色、灰色和黑色。

第一个 Color Ramp 将黑色与其他颜色分开。黑色对应 0,因此会被发送到第一个 Mix Shader 节点的第一个 Shader 输入。在本例中,该输入连接到一个带有红色 Blackbody Tint 的 Principled Volume 节点。

我还在 3D 预览中启用了 Denoise,以便在 Rendered 视图中更清晰地显示颜色。

第一个 Mix Shader 的第二个 Shader 输入连接到一个带有蓝色 Blackbody Tint 的 Principled Volume 节点。因此此时,如果 Smoke Color 是黑色,就会得到红色 Blackbody。

如果 Smoke Color 不是黑色,就会得到蓝色 Blackbody。

接下来是第二个 Mix Shader 节点,它的输入来自另一个 Color Ramp。该 Color Ramp 同样设置为 Constant,并在渐变条正中间放置了一个 Color Stop。

在这种情况下,如果 Smoke Color 介于黑色与灰色之间,就会使用第二个 Mix Shader 的第一个 Shader 输入。该 Shader 是之前区分黑色和灰色之后的结果,因此最终颜色会是红色或蓝色。

如果 Smoke Color 介于灰色与白色之间,则会使用第二个 Mix Shader 的第二个 Shader 输入。该输入连接到一个带有绿色 Blackbody Tint 的 Principled Volume 节点。

因此,将 Smoke Color 设置为白色的对象会以绿色渲染。

当然,这并不是创建两种或三种不同颜色火焰球体的唯一方法。我只是将其作为一个示例用例。正如之前所说,颜色分离并不完美。如果你找到更好的调整方式或替代设置,欢迎在评论区分享。

本网站仅用于展示我的部分作品,不具有任何推广或商业目的。请注意,目前我不接受,也不会回复任何定制项目、咨询服务或其他形式的合作请求。


高级隐私策略信息和cookie文件的使用