3D生成


文档摘要

3D生成 本节摘要:3D 是「2D 到 3D 杠杆」最强的模态。2023 年的突破是 3D 高斯泼溅(3D Gaussian Splatting, 3DGS);2024-2026 的生成推进,在它之上叠加「多视角扩散 + 3D 重建」,从单条提示或单张照片产出物体与场景。本节讲透 3D 生成的两大支柱:表示法(网格、点云、体素、SDF、NeRF、3D 高斯各自的取舍)与两阶段管线(先用扩散生成多视角 2D 图,再用高斯泼溅/NeRF 拟合成 3D)。

3D生成

本节摘要:3D 是「2D 到 3D 杠杆」最强的模态。2023 年的突破是 3D 高斯泼溅(3D Gaussian Splatting, 3DGS);2024-2026 的生成推进,在它之上叠加「多视角扩散 + 3D 重建」,从单条提示或单张照片产出物体与场景。本节讲透 3D 生成的两大支柱:表示法(网格、点云、体素、SDF、NeRF、3D 高斯各自的取舍)与两阶段管线(先用扩散生成多视角 2D 图,再用高斯泼溅/NeRF 拟合成 3D)。我们会推导 3DGS 为何用约 100 万个高斯、每个 59 参数(位置 + 协方差 + 不透明度 + 球谐颜色)就能可微渲染到 1080p100fps,梳理 DreamFusion 的 SDS(分数蒸馏采样)到 LRM/InstantMesh 的直接重建的演化,并指出 3D 至今没有像图像/视频那样的统一运行时底料。

对应原课程:Phase 08 · Lesson 12 · 3d-generation(原英文 phases/08-generative-ai/12-3d-generation/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 列出 3D 的主要表示法(网格、点云、体素、SDF、NeRF、3D 高斯)及各自取舍。
  2. 讲透 3D 高斯泼溅(3DGS):场景表示为约 100 万个高斯,每个 59 参数(位置 3 + 协方差 6 + 不透明度 1 + 球谐颜色 48),渲染 = 投影 + alpha 合成,可微、1080p100fps。
  3. 说清两阶段管线:先用多视角扩散(Zero123、MVDream、CAT3D)生成一致的多视角 2D 图,再用 3DGS/NeRF 拟合成 3D。
  4. 解释 SDS(分数蒸馏采样) 如何用 2D 扩散分数当伪梯度训练 3D 模型(DreamFusion),以及为何被直接重建(LRM、InstantMesh)取代。
  5. 在二维上手写一个高斯泼溅拟合(前向渲染 + 梯度下降拟合),理解 3DGS 的两个核心操作。

一、问题与直觉

3D 内容很痛苦:

  • 表示法:网格、点云、体素网格、有符号距离场(SDF)、神经辐射场(NeRF)、3D 高斯。各有取舍。
  • 数据稀缺:ImageNet 有 1400 万张图;最大的干净 3D 数据集(Objaverse-XL,2023)约 1000 万物体,多数质量低。
  • 内存:512³ 体素网格是 1.28 亿体素;一个有用场景的 NeRF 每条射线需 100 万采样。生成比重建更难。
  • 监督:对 2D 图像你有像素;对 3D 你通常只有 handful 张 2D 视角,得提升到 3D。

2026 年的栈把两个问题分开:先用扩散模型生成 2D 多视角图,再拟合一个 3D 表示(通常是高斯泼溅)到这些图上

表示法:3D 高斯泼溅(Kerbl 等,2023)

把场景表示为约 100 万个 3D 高斯的云。每个有 59 参数:位置(3)、协方差(6,或四元数 4 + 缩放 3)、不透明度(1)、球谐颜色(3 阶时 48,0 阶时 3)。

渲染 = 投影 + alpha 合成。快(4090 上 1080p 约 100fps)、可微。用梯度下降对真实照片拟合。一个场景在消费 GPU 上 5-30 分钟拟合完成。

之上两个 2023-2024 创新:

  • 生成式高斯泼溅:LGM、LRM、InstantMesh 等模型从一张或几张图直接预测高斯云。
  • 4D 高斯泼溅:带每帧偏移的高斯,用于动态场景。

多视角扩散

微调一个预训练图像扩散模型,从文本提示或单张图生成同一物体的多个一致视角。Zero123(Liu 等,2023)、MVDream(Shi 等,2023)、SV3D(Stability,2024)、CAT3D(Google,2024)。通常输出环绕物体的 4-16 个视角,通过高斯泼溅或 NeRF 提升到 3D。

💡 为什么必须「多视角一致」? 如果你独立生成 4 个视角,它们对物体结构的「意见」会不一致——同一只椅子的腿数可能在不同视角里不同。3D 拟合会把这些分歧平均成一个模糊的残缺物。多视角扩散用共享注意力让所有视角在同一套潜变量上解码,从而结构一致。这是它能产出可用 3D 的关键。

NeRF(背景知识)

神经辐射场(Mildenhall 等,2020)。一个小 MLP 吃 (x, y, z, 视角方向) 输出 (颜色, 密度)。沿射线积分渲染。质量胜过基于网格的新视角合成,但渲染慢 100-1000 倍。在实时用途上多被高斯泼溅取代,但在研究中仍主导。

二、文生 3D 管线演化

模型 输入 输出 时间
DreamFusion(2022) 文本 经 SDS 的 NeRF 每资产约 1 小时
Magic3D 文本 网格 + 纹理 ~40 分钟
Shap-E(OpenAI,2023) 文本 隐式 3D ~1 分钟
SJC / ProlificDreamer 文本 NeRF / 网格 ~30 分钟
LRM(Meta,2023) 图像 三平面 ~5 秒
InstantMesh(2024) 图像 网格 ~10 秒
SV3D(Stability,2024) 图像 新视角 ~2 分钟
CAT3D(Google,2024) 1-64 张图 3D NeRF ~1 分钟
TripoSR(2024) 图像 网格 ~1 秒
Meshy 4(2025) 文本 + 图像 PBR 网格 ~30 秒
Rodin Gen-1.5(2025) 文本 + 图像 PBR 网格 ~60 秒
腾讯 Hunyuan3D 2.0(2025) 图像 网格 ~30 秒

2025-2026 方向:直接「文生网格」,带适合游戏引擎的 PBR 材质。对通用物体,「多视角扩散中间步骤」仍是最优配方。

三、从零实现:二维高斯泼溅拟合

code/main.py 实现一个玩具 2D「高斯泼溅」拟合:把一个合成目标图像(平滑梯度)表示为一组 2D 高斯泼溅的和。用梯度下降优化位置、颜色、协方差来匹配目标。你会看到两个核心操作:前向渲染(泼溅 + alpha 合成)与梯度下降拟合

步骤 1:2D 高斯

def gaussian_at(x, y, gaussian): px, py = gaussian["pos"] sigma = gaussian["sigma"] d2 = (x - px) ** 2 + (y - py) ** 2 return math.exp(-d2 / (2 * sigma * sigma))

步骤 2:求和渲染

def render(image_size, gaussians): img = [[0.0] * image_size for _ in range(image_size)] for g in gaussians: for y in range(image_size): for x in range(image_size): img[y][x] += g["color"] * gaussian_at(x, y, g) return img

真实 3D 高斯泼溅按深度排序高斯并按序 alpha 合成。我们的 2D 玩具只是求和。

步骤 3:梯度下降拟合

for step in range(steps): pred = render(size, gaussians) loss = mse(pred, target) gradients = compute_grads(pred, target, gaussians) update(gaussians, gradients, lr)

💡 3DGS 训练的两个核心启发式:① 致密化(densification)——在梯度大的区域分裂/克隆高斯,捕捉更多细节;② 剪枝(pruning)——删掉不透明度趋零的高斯,控制总数。没有这两个,高斯数会失控膨胀到 1000 万并过拟合。这正是为什么 3DGS 能在 ~100 万高斯下达到高质量——它是被精心「种」和「剪」出来的。

四、典型陷阱与修复

  • 视角不一致:独立生成 4 个视角、它们对结构意见不一,3D 拟合就模糊。修复:带共享注意力的多视角扩散。

  • 背面幻觉:单图→3D 必须发明未见的那一面,质量参差不齐。

  • 高斯泼溅爆炸:无约束训练会涨到 1000 万泼溅并过拟合。致密化 + 剪枝启发式(3D-GS 原论文)必不可少。

  • 拓扑问题:隐式场(SDF)来的网格常有洞或自相交。交付前跑重网格器(如 blender 的体素重网格)。

  • 训练数据授权:Objaverse 授权混杂,商用因模型而异。

五、框架对比:2026 年用例

任务 2026 年选择
从照片重建场景 高斯泼溅(3DGS、Gsplat、Scaniverse)
游戏「文生 3D」物体 Meshy 4 或 Rodin Gen-1.5(PBR 输出)
图生 3D Hunyuan3D 2.0、TripoSR、InstantMesh
从少量图做新视角合成 CAT3D、SV3D
动态场景重建 4D 高斯泼溅
头像 / 着装人体 Gaussian Avatar、HUGS
研究 / SOTA 上周刚发的那个

交付生产 3D(游戏或电商管线):Meshy 4 或 Rodin Gen-1.5 输出 PBR 网格,直接进 Unity / Unreal。

六、生产推理:3D 还没有统一底料

不像图像(潜在扩散 + DiT)和视频(时空 DiT),3D 在 2026 年没有单一主导运行时。生产决策树按表示法分叉:

  • NeRF / 三平面:推理是光线行进 + 每采样一个 MLP 前向。512² 渲染需数百万次 MLP 前向。激进批处理射线采样;SDPA/xformers 适用。

  • 多视角扩散 + LRM 重建:两阶段管线。阶段 1(多视角 DiT)就是第 07 节那样的扩散服务器。阶段 2(LRM Transformer)是对视角的一次性前向。整体延迟画像 =「扩散 + 一次性」,按阶段选服务原语。

  • SDS / DreamFusion:每资产优化,不是推理。建作业(job),不是请求处理器。

对大多数 2026 产品,正确答案是:按请求跑多视角扩散,异步重建到 3DGS,再用 3DGS 服务实时查看。这把工作负载干净地分给 GPU 推理服务器(快)与离线优化器(慢)。

七、可复用产物

本节产出一个 3D 管线技能文件(位于原课程 outputs/skill-3d-pipeline.md)。

  • skill-3d-pipeline.md:输入 3D 简报(输入:文本/单图/少量图;输出:网格/泼溅/NeRF;用途:渲染/游戏/VR),输出:管线(多视角扩散+拟合,或直接网格模型)、底座模型、迭代预算、拓扑后处理、所需材质通道。

八、练习

  1. 简单。 用 4、16、64 个高斯跑 code/main.py。报告对目标的最终 MSE。

  2. 中等。 扩展到彩色(RGB)高斯。确认重建匹配目标的颜色模式。

  3. 困难。 用 gsplat 或 Nerfstudio,从 50 张照片重建一个真实物体。报告拟合时间与留出视角的最终 SSIM。

本节要点回顾

  1. 3D 内容难:表示法多样、数据稀缺(Objaverse-XL ~1000 万但质量低)、内存大(512³ = 1.28 亿体素)、监督只有少量 2D 视角。
  2. 3DGS:~100 万高斯,每高斯 59 参数(位置+协方差+不透明度+球谐颜色),渲染=投影+alpha合成,可微、1080p100fps;训练靠致密化+剪枝。
  3. 两阶段管线:多视角扩散(Zero123/MVDream/CAT3D)生成一致 2D 视角 → 3DGS/NeRF 拟合;视角必须一致(共享注意力)否则 3D 模糊。
  4. SDS(DreamFusion):用 2D 扩散分数当伪梯度训 3D,慢(~1 小时/资产);被 LRM/InstantMesh 直接重建取代(~秒级)。
  5. 2025-2026 方向:直接文生 PBR 网格(Meshy 4、Rodin Gen-1.5),适合游戏引擎。
  6. NeRF 仍是研究主导:质量好但渲染慢 100-1000 倍,实时用途让位给 3DGS。
  7. 生产:按请求跑多视角扩散,异步重建 3DGS,再用 3DGS 服务实时查看——快慢分离。

下一节,我们进入扩散家族的最新演化——流匹配与整流流:用「直线路径」取代 DDPM 的「曲线路径」,训练无需仿真、采样路径更直,4-10 倍加速,这是 SD3、Flux、AudioCraft 2 的共同底料。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U