关键想法:在 Objaverse 渲染上微调 Stable Diffusion,让它以一个相对相机变换(Δ方位、Δ仰角、Δ半径)为条件生成新视角。第一次教会 2D 扩散模型"显式的视角控制"。
先造出一致的几张视图,再重建
SDS 慢在"逐资产优化"。这一部换思路:微调一个 2D 扩散模型,让它一次性吐出几张相互一致的视图, 再丢给一个重建后端。一致性靠"视图共享 attention"几乎免费换来(Demo 5)。 从 Zero123 的单视图条件,到 CAT3D 的任意视图重建,主攻 痛点 (c) 一致性。
§4.1Zero123 · 教 2D 模型"换个角度看"
Zero123-XL(更大的 Objaverse-XL 重训)与 Stable Zero123(质量过滤 + 仰角条件 + 训练提速)只提保真、不改架构。 问题留在了"独立生成 → 不一致"上——下面三节都是在补这个洞。
§4.2固定视图网格 + 快速前馈重建
关键想法:把 6 张固定视角拼成一张 3×2 的大图,在一次扩散里生成——这些视角共享 SD 自己的 self-attention,一致性"免费"得到。再加 reference attention + 调好的噪声调度。
有了一组一致视图,重建就能前馈化:One-2-3-45(2306.16928,跑 Zero123 出多视图 → 一个 cost-volume SparseNeuS 在 ~45s 出 mesh,无 SDS)、 One-2-3-45++(一致多视图 → 多视图条件的原生 3D 扩散,已经在往 Part VI 靠)、 Instant3D(2311.06214,文本→4 视图网格 → transformer LRM 回归 triplane NeRF,~20s——这是通往 Part V 的桥)。
§4.33D-aware attention · 把几何先验做进注意力
统一的招数:让视图之间共享 attention,使网络把它们当成一个联合样本,而不是 N 个独立样本。具体有几味:
- 共享 / 拼接 self-attention(Zero123++、MVDream):把视图拼在 token 轴上,每个视图的 query 能看到所有视图的 key/value。最便宜、最流行。
- Epipolar attention(EpiDiff、Era3D 的行注意力):只在几何上有效的对应(极线 / 图像行)之间做 cross-attention,是更强的归纳先验、也更可扩展。
- 3D-aware 体积 attention(SyncDreamer):每步去噪都把特征投进一个共享 3D 特征体积同步。
- 显式相机 embedding / 共享噪声 / 共享 UV latent(Zero123、Free3D、SyncMVD)。
四个视图在并行去噪。关掉共享再点"跑一次去噪":四个视图各自漂移成不同颜色/形状(不一致)。 打开共享:虚线表示视图间的 attention 把它们拉向同一个共识,越去噪越一致。 这就是 Zero123++ / MVDream 的核心——一致性不是事后对齐,而是生成时就耦合。
关键想法:SyncDreamer 用3D 特征体积每步同步;Wonder3D 同时生成 RGB + 法线(跨域 attention),法线融合直出 mesh;Era3D 用行注意力把极线先验做便宜(省 12× 算力),上到 512² 且支持任意相机内参。
§4.4视频扩散先验 · 把环绕轨迹当成一段视频
既然视频模型天生有时间一致性,那"绕物体一圈"就是一段视频。SV3D(2403.12008, 把 Stable Video Diffusion 改成可控环绕视频)、V3D(视频模型出几百帧,密集视图喂重建)、 IM-3D(2402.08682,视频生成 + 3DGS 重建的迭代循环,2D 评估次数少 10–100×)。 密集的帧 → 更少 floater、更稳的重建。这是对"少量固定视图覆盖太稀疏"的回应。
§4.5任意视图重建 · CAT3D 收尾
关键想法:一个多视图扩散模型吃任意数量输入视图、生成大量 3D 一致的目标视图(高效并行采样),再喂一个稳健的 NeRF/3DGS 重建。整个场景 ~1 分钟。