一、为什么你调了三天雾,还是像一碗灰汤?
先给结论:Blender 雾体积(Volume Scatter)是视觉叙事中最廉价、也最昂贵的工具。廉价在于,一行节点就能让场景拥有空气感;昂贵在于,90% 的创作者会把“雾”和“灰”画等号——密度抬到 0.1,颜色拉成纯白,渲染出来一片混沌,然后手动微调六小时,帧数从 12 秒掉到 3 分钟,最后放弃。
问题不在参数,在工作流。传统流程是“建体积→手拧密度→试渲染→再拧→再等→崩溃”。而高效流程是“物理量预设→脚本生成→GPU 代理→分层合成”。两条路径的产出可能一样,但工时差 5 到 10 倍。本文拆解后者,全程数据驱动,不讲玄学。

二、素材准备:别急着放雾,先建立物理量坐标系
Volume Scatter 的底层是参与介质(Participating Media)的辐射传输方程离散求解。Cycles 使用随机游走(Random Walk)体素路径追踪,每个光子进入体积后,按散射系数 σs、吸收系数 σa、各向异性系数 g 三个物理量决定行为。你面板上的“密度(Density)”只是 σs·σa 的混合比例缩放,“各向异性(Anisotropy)”直接对应 g。理解这三者,调参就从“猜”变成“调”。
我的工作流第一步不是打开 Blender,而是在一张纸(或 Notion 表格)上写清楚雾的物理类型:晨雾、体积光(丁达尔)、烟雾、沙尘、水下散射,每种对应特定的 σs/σa 量级。下面这张对照表是效率核心,直接决定你后面还有没有“来回试”的必要。
| 雾类型 | 密度建议 | 各向异性 g | 颜色策略 | 典型场景 |
|---|---|---|---|---|
| 晨雾 | 0.005–0.02 | 0.0–0.2 | 淡青灰 (0.8,0.85,0.9) | 森林、街道 |
| 丁达尔光柱 | 0.01–0.05 | 0.6–0.8 | 暖白/冷白 | 窗户、舞台 |
| 浓烟 | 0.1–0.5 | 0.3–0.5 | 深灰+黑体 | 火灾、爆炸 |
| 沙尘 | 0.03–0.08 | 0.4–0.6 | 土黄 (0.9,0.75,0.5) | 废土、追车 |
| 水下 | 0.02–0.06 | 0.9–0.95 | 蓝绿 (0.1,0.4,0.6) | 水下镜头 |
技巧:各向异性 g 为正时,光“前向散射”强,逆光拍摄会出现明亮光晕;g 为负则后向散射,适合“从雾中打光”的诡异感。很多教程直接丢 0,浪费了最强的叙事工具。
三、核心操作:从立方体到“体积域”,一次做对
高效流程不修改“场景世界体积”,因为它无法局部控制。正确做法:新建立方体→缩放→指定为体积域。关键在缩放:体积计算量与包围盒体积成正比。一个覆盖 100 米的立方体,密度 0.01,渲染 4K 可能吃掉 8GB 显存。而高效做法是把体积域限制在相机视锥内,只覆盖可见区域,并用相机裁切平面(Clip Start/End)卡在体积外——这一步通常省 40% 渲染时间。
材质节点连接:Volume Scatter 与 Volume Absorption 串联,前者控制散射,后者控制吸收。单独用 Volume Scatter 会导致雾“越远越亮”,因为缺少能量衰减。真实雾是散射+吸收的组合,吸收节点让远处细节自然变暗。

此时你有了基础雾。但手动拖拽立方体、反复对齐相机,本身就很低效。下面进入自动化。
四、自动化脚本:一键创建参数化体积域
我把上面所有物理量、包围盒逻辑、节点组合写进一个 Python 脚本,注册到 Blender 的 Text Editor 里,绑定快捷键。每次新场景,Alt+P 运行,2 秒生成一个“可调物理参数”的雾对象,而不是从头连节点。
import bpy
def create_volume_fog(name, density=0.02, anisotropy=0.2, color=(1,1,1)):
# 创建体积域立方体
bpy.ops.mesh.primitive_cube_add(size=2)
obj = bpy.context.object
obj.name = name
obj.display_type = 'WIRE'
# 新建材质
mat = bpy.data.materials.new(name + '_Mat')
mat.use_nodes = True
nodes = mat.node_tree.nodes
links = mat.node_tree.links
nodes.clear()
# 输出节点
out = nodes.new('ShaderNodeOutputMaterial')
# 散射节点
scatter = nodes.new('ShaderNodeVolumeScatter')
scatter.inputs['Color'].default_value = (*color, 1)
scatter.inputs['Density'].default_value = density
scatter.inputs['Anisotropy'].default_value = anisotropy
# 吸收节点(与散射串联)
absorb = nodes.new('ShaderNodeVolumeAbsorption')
absorb.inputs['Color'].default_value = (1,1,1,1)
absorb.inputs['Density'].default_value = density * 0.5
links.new(scatter.outputs['Volume'], absorb.inputs['Volume'])
links.new(absorb.outputs['Volume'], out.inputs['Volume'])
obj.data.materials.append(mat)
return obj
# 示例:生成晨雾
fog = create_volume_fog('MorningFog', density=0.015, anisotropy=0.1, color=(0.8,0.85,0.9))
脚本一行搞定的事情,手动要 3 分钟。这 3 分钟乘以 20 个场景,就是 1 小时——而脚本的开发成本只有 15 分钟。极客效率的核心不是“学脚本”,而是“识别重复劳动”。
五、参数对比与调优:用数据代替感觉
有了脚本,下一步是批量测试。不要用“我看看”,而是用帧渲染时间、雾浓度直方图、光柱亮度采样三个指标。我通常用 Blender 的 bpy.app.handlers.render_stats 抓取每帧时间,然后在表格里对比。下面是我在 4K 分辨率、RTX 4090 上的实测数据:
| 密度 | 各向异性 | 体积步进 | 单帧时间 | 视觉评价 |
|---|---|---|---|---|
| 0.005 | 0 | 0.1 | 8.2s | 太薄,几乎看不见 |
| 0.02 | 0.2 | 0.1 | 14.6s | 自然晨雾 |
| 0.05 | 0.6 | 0.05 | 38.1s | 丁达尔光柱(推荐) |
| 0.1 | 0.4 | 0.02 | 89.3s | 浓烟,但噪点明显 |
关键参数:体积步进(Volume Step Rate)在 Cycles 中对应“体积采样步长”,数值越小越精确但越慢。我的经验值:预览 0.3,最终 0.05–0.1。低于 0.02 收益递减严重。
注意表格中 0.05 密度、g=0.6 那行,38 秒单帧,看起来不便宜,但对比手动调参三天的工时,这是一个数量级的差异。而且脚本可以批量生成 10 组参数,用 bpy.ops.render.render(write_still=True) 循环输出,一晚上跑完,第二天直接选最优。

行业案例:某游戏宣传片项目中,团队需要 6 个不同氛围的雾景(森林晨雾、战场硝烟、雨夜街灯、水下、废墟沙尘、舞台光柱)。传统流程预计 5 人日。使用上述脚本 + 参数表,实际耗时 4 小时完成全部 6 组体积雾搭建与渲染测试,工时压缩至 1/5。
六、输出交付:让雾“可合成”
最后一步常被忽略:把雾单独渲染成体积通道(Volume Pass),而不是直接烤进 Beauty。这样在合成阶段可以调整雾的强度、颜色、对比度,甚至选择性排除某些物体。Cycles 的 View Layer 中开启 Volume Direct 和 Volume Indirect 通道,输出 EXR 多通道文件。合成时用一个 Color Mix 节点叠加,雾的调整就不再需要重新渲染。
交付清单:
- 主渲染 EXR(含 Volume 通道)
- 体积域对象与脚本(.blend 文件)
- 参数预设 JSON(记录所有密度、各向异性、颜色值)
- 合成节点组(.blend 中的 Node Group,可跨项目复用)
这套交付物让下游环节不再“求你再调一下雾”,而是自己拖滑块。
七、效率复盘:从三天到三小时
回到开头的对比。传统流程:建体积→手动调参→试渲染→再调→崩溃。高效流程:物理量预设表→脚本生成→批量测试→分层输出。两者最终画面可能一样,但前者是“艺术家的手”,后者是“工程师的系统”。
我的判断是:Blender 的雾体积已经不再是“美术参数”,而是“技术美术(TA)参数”。谁先把它脚本化、数据化,谁就能在同样的项目周期里多迭代三个版本。视觉质量不是靠熬时间熬出来的,是靠迭代次数堆出来的。而迭代次数,靠工作流决定。
关于火星人教育:在火星人教育,我们把这套“脚本化体积雾”工作流纳入 AIGC 视觉设计与 UE5 游戏特效课程。创办 24 年来,火星人教育专注数字艺术与 AIGC 实战职业技能培训,开设 AI 漫剧创作、AIGC 视觉设计、UE5 游戏特效、室内全屋定制、MAYA 三维动画、C4D 动态设计、工业设计、NUKE 影视后期、摄影摄像实训等课程。北京、深圳双校区线下面授,面向美术生、在校大学生及转行人群,以项目化实训夯实技能,助力就业与职业提升。咨询电话:010-65918670。








评论(0)