怎么从一个 latent 空间采样出新的 3D 物体,而不靠参考图或 CAD 模型?
关键想法:一个体积卷积 GAN——生成器输出 voxel 占据网格,判别器逼它隐式抓住物体结构。第一个真正意义上的 3D 生成模型。
把 2D 图像 GAN 整套搬到 $O(N^3)$ 的体素网格上;代价是分辨率被死死压在 $\sim 64^3$。
在 SDS 和原生扩散出现之前,3D 生成已经热闹了七年。这一部速读——只点里程碑, 重点是看清哪些东西活到了现代:triplane(EG3D)、auto-decoder 隐式场(DeepSDF)、 DMTet 取面(GET3D)、以及逐场景蒸馏(DreamFields → DreamFusion)。
最早的思路最朴素:把 2D GAN 直接搬到 3D 网格或点云上。它们证明了"3D 可以被生成",但很快撞上分辨率 / 内存的墙—— 这正是痛点 (b)的第一次现身。
怎么从一个 latent 空间采样出新的 3D 物体,而不靠参考图或 CAD 模型?
关键想法:一个体积卷积 GAN——生成器输出 voxel 占据网格,判别器逼它隐式抓住物体结构。第一个真正意义上的 3D 生成模型。
把 2D 图像 GAN 整套搬到 $O(N^3)$ 的体素网格上;代价是分辨率被死死压在 $\sim 64^3$。
同期的 PrGAN / PlatonicGAN / HoloGAN 用可微投影从 2D 视图反推 voxel;点云一支有 r-GAN / l-GAN(Achlioptas, 在预训练自编码器的 latent 里跑 GAN——"latent 空间生成"这个套路从这里立起)与流模型 PointFlow(连续正规化流,精确似然)。 这些今天基本只作为历史脚注,但"在 latent 空间而非原始空间里生成"的思想活到了今天。
这一组本身不是生成器,但它们贡献了现代几乎所有生成器都在用的连续隐式表示,以及 DeepSDF 的 auto-decoder 套路—— 这是原生 3D 扩散的直接祖先。
体素的立方内存让分辨率上不去(痛点 b)。
关键想法:把表面表示成一个连续神经分类器的决策边界——MLP 吃 3D 坐标,吐"在内 / 在外"。分辨率不再受网格限制,想多细查多细。
从"存一个离散网格"变成"存一个连续函数";占据场 = 把表面定义为 $\{o(x)=0.5\}$。
想要一个紧凑、连续、还能补全的形状表示。
关键想法:auto-decoder——每个形状有一个 latent code,和一个共享的 SDF MLP 联合优化,不需要 encoder。这正是"把形状压成 latent、再在 latent 上学分布"这套现代范式的祖型。
相比 OccNet 学的是有符号距离(而非二分占据),且确立了"逐形状 latent + 共享解码器"的 auto-decoder 训练法。
网格一支的 AtlasNet(把形状解码成若干参数曲面片)和 Pixel2Mesh(图卷积变形椭球模板)也属于这一代—— 它们的 mesh-as-output 直觉,会在很久以后的 mesh 自回归生成(Part VIII)里复活。
把体渲染嫁接进 StyleGAN,催生了这一代最重要的遗产——triplane。它会成为后来 LRM、原生扩散的默认 latent 之一。
3D-aware GAN 又慢又糊,到不了实时高分辨率。
关键想法:tri-plane 混合表示——StyleGAN2 生成器产出三张 2D 特征平面(XY/XZ/YZ),查询任意 3D 点时投影到三平面、采样、求和,再喂一个极小 MLP 出密度+颜色。3D 生成一下变得又便宜又高质。
用三张 2D 平面($O(3R^2)$)替代稠密体素($O(R^3)$),是整个时代被复用最多的一个想法。
前面那些都只能渲图,给不了游戏能直接用的带纹理网格。
关键想法:triplane SDF + 纹理场,接 DMTet 可微取面 + 可微渲染,在 2D 上对抗训练,直接吐带纹理 mesh。
第一次把 triplane(来自 EG3D)和 DMTet(来自 NeurIPS'21)拼起来端到端出网格——这个组合后来在 Fantasia3D、InstantMesh、MeshLRM 反复出现。
2022 年底,扩散模型涌入 3D,分裂成两条今天仍在主导的路线:"原生 3D 扩散" 与 "把 2D 扩散当先验"。
没有任何 3D 训练数据,怎么从文字生成 3D(痛点 a)?
关键想法:逐 prompt 优化一个 NeRF,让它的多视图渲染最大化 CLIP 相似度。这套"逐场景优化 / 蒸馏"的配方,被 DreamFusion 原样继承、只把 CLIP 换成扩散模型。
SDS(Part III)的直接前身——只差把 CLIP 评委换成扩散评委。
DreamFields 一个 prompt 要优化几小时(痛点 d)。
关键想法:Point-E 走"文本→合成图→图像条件的点云扩散",几分钟出结果(牺牲质量换 ~100× 速度);Shap-E 更进一步,直接扩散一个隐式函数(NeRF+mesh)的参数。"扩散一个 3D 表示"的雏形。
第一批前馈、原生 3D 的扩散生成器;但点云 / MLP 权重这两个 latent 都不好 scale,很快被 vecset 取代。
同一波里还有 NFD(triplane 上跑标准 2D 扩散)、LION(latent 点云扩散)、DiffRF(体素辐射场扩散)、 GAUDI(场景级 latent 扩散)、Diffusion-SDF。它们各押了一种 latent(triplane / 点 / voxel / MLP 权重), 谁都没赢——直到 2023 年初 3DShape2VecSet 给出了那个对的答案:vecset。那是 Part VI 的开篇。
① triplane(EG3D → NFD、LRM、Direct3D)· ② auto-decoder 隐式场(DeepSDF → 3DShape2VecSet、Shap-E)· ③ DMTet 可微取面(GET3D → Fantasia3D、InstantMesh)· ④ 逐场景蒸馏(DreamFields → DreamFusion 的 SDS)。 其余的 voxel-GAN、点云扩散都只是脚注。把这四样记住,下面四部就有了根。