L1 和 L2 解决了「从照片重建三维场景」的问题——给定几十张环绕拍摄的图片,NeRF 或 3DGS 能恢复出可自由漫游的场景。但现实中有大量需求是没有照片、只有描述:「给我一座赛博朋克风格的中式庭院」、「把这个二维 Logo 变成 3D 模型」。
本章将拆解生成式 3D的核心思想:如何让预训练的 2D 图像生成模型(Diffusion)「教」一个 3D 表示(NeRF/3DGS)学会生成合理的三维结构。你会理解 DreamFusion 的 Score Distillation Sampling(SDS)为何能只用文字就生成 3D 对象——这是连接 2D 生成能力与 3D 表示的桥梁。
本课引入生成模型相关术语。如需随时查阅定义,请打开 L3 词汇表(可打印,适合边学边查)。
先澄清一个容易混淆的点:NeRF/3DGS 是三维场景的表示方法(回答「三维空间长什么样」),而 Diffusion/VAE 是二维图像的生成模型(回答「什么样的图片合理」)。二者解决的问题根本不同,但在生成式 3D 中通过「渲染 + 评判」协作:
| NeRF / 3DGS | Diffusion / VAE | |
|---|---|---|
| 本质 | 三维场景的表示与渲染 | 二维图像的生成与分布建模 |
| 输入 | 相机位姿 + 多视角图像 | 随机噪声或隐向量 z |
| 输出 | 任意视角的 2D 渲染图 | 一张新的 2D 图像 |
| 能否创造 | 不能——只能重建已观测场景 | 能——从分布采样新图像 |
| 一致性 | 天然多视角一致 | 每步独立,不保证一致 |
训练一个高质量的 3D 生成模型需要海量的标注 3D 数据。但现实中:
与此同时,2D 图像生成模型已经极其强大。Stable Diffusion、DALL-E、Midjourney 等模型在数十亿张图文对(image-text pairs)上训练,学会了「什么样的图片是合理的」。核心洞察由此产生:与其直接学习生成 3D,不如让一个 3D 表示去「讨好」一个已经懂审美的 2D 生成模型。
在进入 3D 生成之前,先回顾 Diffusion 模型的核心直觉(假设你已具备基础深度学习背景):
Diffusion 模型是一个去噪网络。训练时,它学习从被高斯噪声严重破坏的图像中恢复出清晰的原始图像。推理时,从一个纯噪声图像出发,通过多步去噪逐步生成一张新图像。关键是:这个网络在训练过程中「见过」数十亿张真实图片,因此它知道「什么样的图片看起来是合理的」。
文本到图像的 Diffusion 模型(如 Stable Diffusion)还额外学会了对齐文本语义:给定「一只宇航猫」的文本描述,它去噪出的图像不只是「合理的图片」,而是「符合文字描述的合理图片」。
把 Diffusion 模型想象成一位经验丰富的艺术评委。他不能亲手为你雕塑,但他看一眼你的草图就能告诉你:「这个角度不对,猫的脸应该更圆一些,宇航服的头盔反光太强了。」DreamFusion 的核心思想就是:让这位评委不断给出反馈,指导一个 3D 模型自我调整。
DreamFusion(Poole et al., ICLR 2023)是首个成功实现「Text-to-3D」的里程碑工作。它不直接生成 3D 数据,而是采用以下策略:
上述流程的核心是 Score Distillation Sampling(SDS)。为了理解它,需要先明白 Diffusion 模型的一个性质:
Diffusion 的去噪过程实际上是在估计分数函数(Score Function),即数据分布的对数概率密度对输入的梯度。直观地说,分数函数指向「数据密度更高的方向」——就像山顶的梯度指向海拔上升最快的方向,分数函数指向「更像真实图片」的方向。
SDS 的精妙之处在于:它不直接优化「渲染图像与目标图像的像素差异」(因为没有目标图像),而是优化「渲染图像在 Diffusion 模型看来有多像真实图片」。具体来说:
SDS 的名字中有「Distillation(蒸馏)」,因为它本质上是把预训练 Diffusion 模型中关于「什么是合理图像」的知识,蒸馏到一个 3D 表示中。Diffusion 模型是「老师」,NeRF 是「学生」——学生不断渲染图像给老师看,老师给出改进方向,学生据此调整自己。
SDS 存在一个著名的过饱和(Oversaturation)问题:由于 Diffusion 模型对噪声水平敏感,SDS 倾向于生成颜色过亮、对比度过高的图像,导致 3D 结果看起来有点「塑料感」或「虚假」。后续工作如 Magic3D、Fantasia3D 通过多阶段优化、引入法线贴图等方式缓解了这一问题。
并非任意 3D 表示都能充当 SDS 中的学生。NeRF 和 3DGS 被选中,是因为它们满足三个关键条件:
| 条件 | 为什么重要 | NeRF / 3DGS 如何满足 |
|---|---|---|
| 可微分渲染 | Diffusion 的梯度必须能流回 3D 参数 | NeRF 的体积渲染处处可导;3DGS 的可微分光栅化记录每高斯贡献 |
| 任意视角一致性 | 3D 表示必须从所有角度都「合理」 | NeRF/3DGS 共享同一组参数表达整个场景,天然保证多视角一致性 |
| 连续性 | 优化过程需要平滑的参数空间 | 隐式 MLP 和显式高斯的位置/颜色都是连续变量,梯度下降有效 |
对比传统表示:三角网格的拓扑变化是不连续的(难以用梯度优化),点云没有表面定义(难以渲染出让 Diffusion 评估的图像),体素网格分辨率受限(精细细节需要极高分辨率)。NeRF 和 3DGS 恰好避开了这些陷阱。
DreamFusion 使用 NeRF 作为 3D 表示,训练需要数小时。后续工作迅速将 SDS 框架迁移到 3DGS 上——最典型的是 GaussianDreamer 和 DreamGaussian。为什么要换?
SDS 解决了「Text-to-3D」的问题,但它依赖 Diffusion 模型的文本理解能力。如果用户只有一张图片、没有文字描述呢?
Zero123 系列工作的思路是:训练一个专门的扩散模型,输入是一张参考图和一个目标视角(相对参考视角的旋转角度),输出是该视角下的图像。这个模型在大量「同一场景、不同视角」的图像对上训练,学会了「给定一张图,我能想象出其他角度长什么样」。
有了 Zero123,单图生 3D 的流程变为:
SDS 范式(DreamFusion / DreamGaussian):每步渲染后请 Diffusion 「评委」打分,通过反馈优化 3D。优势是不需要多视角数据,劣势是训练慢、容易过饱和。
Zero123 范式(One-2-3-45 / SyncDreamer):先用多视角生成模型合成虚拟视角,再用标准重建方法拟合 3D。优势是几何一致性更好,劣势是需要额外的多视角模型训练。
实际上,这两种范式正在融合:最新的工作(如 MVDream、ImageDream)结合了两者的优势,用 SDS 框架但以 Zero123 的视角生成模型作为「评委」。
如果你想更深入地理解生成式 3D 的发展脉络和工程实现,推荐以下资源:
模块一(核心原理)到此结束。你已经理解了 NeRF 的隐式表示、3DGS 的显式高斯、以及它们与生成模型的协作关系。下一模块将进入工程实践:L4 将介绍如何用 nerfstudio 训练 NeRF 和 3DGS 模型,L5 将深入调优技巧,L6 将对比两种方法的技术选型。准备好动手了吗?
如有任何概念不清楚,随时向我提问。SDS 是连接 2D 生成与 3D 表示的核心桥梁,而理解 NeRF/3DGS 与 Diffusion/VAE 的本质区别,将帮助你在工程实践中正确选择和使用这些工具——它们是协作关系,不是替代关系。