3D Representations¶
3D 视觉生成与编辑的第一步是选择合适的 3D 表征方法。不同的表征决定了模型的生成方式、渲染效率和编辑灵活性。本文梳理当前主流的五种 3D 几何/渲染表示。
关于隐空间表征
生成模型中使用的 latent space representations(VecSet、SLAT、O-Voxel 等)属于不同层面的问题——它们关注如何将 3D 数据压缩为适合生成建模的中间表示,详见 3D Latent Space Representations。
Overview¶
| 表示 | 类型 | 核心数据 | 渲染方式 | 可编辑性 | 典型应用 |
|---|---|---|---|---|---|
| Mesh | 显式 | 顶点 + 面列表 | 光栅化 | 高(直接操作顶点/面) | 游戏、影视、3D 打印 |
| SDF | 隐式 | 标量场 (距离值) | Ray Marching | 中(CSG 运算方便) | 医学成像、AI 生成 |
| NeRF | 隐式 | MLP 权重 | 体积渲染 (Ray Marching) | 低(网络权重难局部修改) | 新视角合成 |
| 3DGS | 显式 | 高斯原语集合 | Splatting + Alpha Blending | 高(显式参数可局部操作) | 实时渲染、交互编辑 |
| Triplane | 混合 | 3 张正交特征平面 | MLP 解码 + 体积渲染 | 中(2D 特征图可操作) | 生成模型中间表示 |
1. Mesh(三角网格)¶
Mesh 是计算机图形学中最基础的 3D 表示——由顶点 (Vertex)、边 (Edge) 和面 (Face) 组成的多面体。
核心存储结构¶
- 顶点列表 (Vertex List):有序数组,每个顶点存储 \((x, y, z)\) 坐标
- 面列表 (Face List):通过顶点索引定义三角形/四边形面,例如
f1 = (1, 2, 3)
这种索引式存储极大节省了空间——每个顶点坐标只存一次,即使被多个面共享。
半边数据结构 (Half-Edge)
存储更丰富的拓扑信息(边的相邻面、循环关系等),使编辑和遍历更高效,但内存开销更大。
主要属性¶
| 类别 | 属性 | 说明 |
|---|---|---|
| 几何 | 顶点位置、顶点/面法线 | 定义形状与表面朝向,法线决定光照效果 |
| 外观 | UV 坐标、顶点颜色、材质 (PBR) | UV 映射 2D 纹理;材质含颜色/金属度/粗糙度/自发光/透明度 |
| 动画 | 骨骼蒙皮权重、Blend Shapes | 骨骼驱动关节变形;Morph Targets 实现面部表情插值 |
常见文件格式¶
| 格式 | 特点 |
|---|---|
| .OBJ | 文本格式,清晰简单(v, vt, vn, f),不支持动画 |
| .FBX | Autodesk 二进制格式,支持几乎所有属性(几何、材质、骨骼、动画、相机) |
| .glTF / .glb | "3D 的 JPEG",Web/移动端高效传输,JSON 描述 + 二进制数据,支持 PBR |
| .STL | 3D 打印专用,仅存三角面 + 法线,无颜色/纹理 |
Mesh 编辑方法¶
| 方法 | 核心思想 | 优点 | 缺点 | 应用场景 |
|---|---|---|---|---|
| 多边形建模 | 直接操作点、线、面 | 精确、可控 | 曲面建模耗时 | 硬表面模型、游戏资产 |
| 数字雕刻 | 笔刷塑造"数字粘土" | 直观、艺术性强 | 拓扑混乱、面数巨大 | 有机模型、角色设计 |
| 修改器建模 | 非破坏性操作层 | 灵活、易修改 | 依赖软件功能 | 迭代开发、产品可视化 |
| 重新拓扑 | 在高模基础上重建低模 | 优化动画/性能 | 耗时、技术性强 | 动画角色、VR/AR |
2. SDF(符号距离函数)¶
Signed Distance Function (SDF) 是一种隐式表示:一个函数 \(f(p)\) 为空间中任意点 \(p = (x, y, z)\) 返回到物体表面的有符号距离。
核心定义¶
所有满足 \(f(p) = 0\) 的点构成物体的表面,称为零水平集 (Zero-level Set)。
离散化:标量场¶
在计算机中,SDF 被离散化为一个 3D 网格(体素),每个体素存储一个浮点数值。例如一个 \(64 \times 64 \times 64\) 的 SDF 网格包含 262,144 个浮点值。
Hunyuan3D 中的 Grid Queries
论文中的 Grid Queries 就是生成网格点坐标,然后用解码器计算每个点的 SDF 值,形成标量场数据,再通过 Marching Cubes 提取表面。
CSG 运算¶
SDF 通过简单的数学运算组合形状(构造实体几何, CSG):
- 并集:\(SDF_{union}(p) = \min(SDF_A(p), SDF_B(p))\)
- 交集:\(SDF_{inter}(p) = \max(SDF_A(p), SDF_B(p))\)
- 差集:\(SDF_{diff}(p) = \max(SDF_A(p), -SDF_B(p))\)
优势¶
- 拓扑灵活性:轻松表示嵌套、孔洞、互穿结构
- 平滑表面:本质连续,避免三角面片感
- 高效几何查询:瞬间判断内/外及距离——碰撞检测利器
- Ray Marching 渲染:沿光线安全步进 SDF 值的距离
- Neural SDF:用神经网络学习连续 SDF(如 DeepSDF),内存高效、分辨率无限
3. NeRF(神经辐射场)¶
Neural Radiance Field (NeRF) 用一个 MLP 神经网络隐式表示整个 3D 场景的几何与外观。
核心映射¶
- 输入:空间坐标 \(\mathbf{x} = (x, y, z)\) + 观察方向 \(\mathbf{d} = (\theta, \phi)\)(5D)
- 输出:颜色 \(\mathbf{c} = (R, G, B)\) + 密度 \(\sigma\)(4D)
密度 \(\sigma\) 表示不透明度:0 = 空气,高值 = 不透明表面。
训练流程¶
- 输入:多视角静态图像 + 相机位姿(通常由 SfM 预计算)
- 光线发射:从相机穿过每个像素向场景发射光线
- 采样 → 查询:沿光线取采样点,将每个点的 \((x,y,z,\theta,\phi)\) 送入 MLP,得到 \((R,G,B,\sigma)\)
- 体积渲染:将光线上所有采样点的颜色和密度按物理规则积分,得到像素颜色
- 损失计算:渲染图 vs 真实照片的像素级 L2 Loss → 反向传播更新 MLP 权重
Per-Scene vs Generalizable¶
| 类型 | 是否每个场景训练一个网络 | 特点 |
|---|---|---|
| Per-Scene NeRF | 是 | 高质量,但训练耗时数小时 |
| Generalizable NeRF | 否——通过条件输入/少量微调适配新场景 | 快速适配,质量略有折衷 |
优势与局限¶
- 优势:照片级真实感、视角相关效果(高光/反射)、紧凑存储(MLP 权重仅几 MB)
- 局限:训练/渲染速度慢(后续 Instant-NGP 等明显改善)、仅处理静态场景(D-NeRF 扩展至动态)、数据要求高
4. 3D Gaussian Splatting (3DGS)¶
3DGS 将场景建模为一组三维高斯椭球——一种显式、可实时渲染的 3D 表示。
高斯原语参数¶
每个 3D Gaussian 携带:
| 参数 | 符号 | 说明 |
|---|---|---|
| 位置 | \(\mu \in \mathbb{R}^3\) | 空间中心点 |
| 形状 | \(\Sigma\)(等价于 scale + rotation) | 椭球形状与方向 |
| 颜色 | \(c\)(RGB,可选 SH 系数) | 视角相关外观 |
| 不透明度 | \(\alpha\) | 遮挡与贡献强度 |
渲染流程¶
- 将每个 Gaussian 投影到图像平面 → 二维椭圆 splat
- 按深度排序,计算每个 splat 在像素上的权重
- 加权混合得到像素颜色:
训练 / 优化¶
- 初始化:从 SfM 稀疏点云初始化位置,赋予初始参数
- 优化:L1 / MSE / SSIM Loss → 梯度下降更新所有参数
- 动态操作:
- Splitting:误差大的区域拆分为更小的 Gaussian
- Pruning:移除低透明度 / 低贡献 Gaussian
- Cloning:复杂区域复制 Gaussian 增强表现力
3DGS vs NeRF¶
| 特性 | NeRF | 3DGS |
|---|---|---|
| 表示方式 | 隐式 MLP | 显式 Gaussian 集合 |
| 渲染方式 | Ray marching + 体积渲染 | 投影 splatting + alpha blending |
| 训练耗时 | 数小时 | 数分钟 |
| 渲染速度 | 慢 | 实时 |
| 编辑友好性 | 难以局部修改 | 显式可控,支持局部操作 |
5. Triplane¶
Triplane 用三张正交的二维特征平面(XY、XZ、YZ)来编码三维空间特征,是介于全隐式(NeRF)和全显式(Mesh)之间的折中方案。
查询流程¶
给定空间点 \(p = (x, y, z)\):
- 投影到三张平面:
- XY 平面:用 \((x, y)\)
- XZ 平面:用 \((x, z)\)
- YZ 平面:用 \((y, z)\)
- 在每张平面上做双线性插值,得到 3 个特征向量
- 融合(concat / sum / 加权)→ 统一特征向量
- 送入下游 MLP Decoder,输出密度 / 颜色 / SDF 等
优势¶
- 用 2D 特征图处理,计算和存储高效
- 可直接利用 2D 卷积网络的成熟架构
- 能编码三维结构、密度、颜色等属性
典型应用¶
EG3D、LRM 等生成模型广泛使用 Triplane 作为中间表示。在 TRELLIS 中,Triplane 是 SLAT 解码为 3D 输出的核心路径之一。
表征选择指南¶
| 场景需求 | 推荐表示 | 理由 |
|---|---|---|
| 游戏 / 影视资产导出 | Mesh | 工业标准,渲染管线原生支持 |
| AI 生成中间表示 | SDF / Triplane | 连续、可微、适合神经网络优化 |
| 新视角合成(高质量) | NeRF | 照片级真实感 |
| 新视角合成(实时) | 3DGS | 实时渲染、显式可编辑 |
| 3D 编辑 pipeline | 3DGS / Mesh | 显式表示便于局部操作 |
| CSG 建模 / 碰撞检测 | SDF | 内外判断与距离查询天然高效 |