Marching Cubes¶
Marching Cubes: A High Resolution 3D Surface Construction Algorithm (Lorensen & Cline, 1987)

Marching Cubes (MC) 是从隐式场(SDF / 标量场)中提取三角网格表面的经典算法,诞生于医学成像领域(CT/MRI 体数据可视化),至今仍是最广泛使用的等值面提取方法。其核心思想是分治法——逐个遍历体素网格中的立方体单元,在每个单元内独立决定如何用三角片"切割"出表面。
算法四步骤¶
Step 1: 分类 (Classification)¶
对每个由 8 个相邻体素顶点组成的逻辑立方体,检查每个顶点的标量值:
- 值 > 等值面阈值 → 标记为"内部" (1)
- 值 ≤ 等值面阈值 → 标记为"外部" (0)
8 个顶点各有 0/1 两种状态,形成 8 位二进制编码,共 \(2^8 = 256\) 种可能的组合。
Step 2: 查表 (Lookup Table)¶
256 种状态中有大量等价情况。通过旋转对称性和互补对称性(内外翻转),可将所有情况归约为 15 种基本拓扑。
算法使用 8 位编码作为索引,查预计算的拓扑表,直接获取该立方体内应生成的三角形数量和连接方式。这是 MC 高效的关键——无需逐个做几何判断,查表即得。
15 种基本拓扑
从"0 个内部顶点"(无三角形)到"所有顶点均为内部"(同样无三角形),中间包含各种单面、双面、多面切割情况。每种拓扑定义了三角形应切过哪些边。
Step 3: 插值 (Interpolation)¶
查表确定三角形切过哪些边后,需要在边上找到精确切点。使用线性插值:
其中 \(P_1, P_2\) 是边的两个端点坐标,\(V_1, V_2\) 是对应标量值,\(\text{Iso}\) 是等值面阈值。
这一步将顶点限制在网格边上——这正是 MC 无法表达锐利特征的根本原因。
Step 4: 法线计算¶
通过标量场在切点处的梯度估算表面法线:
梯度通常用中心差分近似。法线信息用于后续的光照渲染。
MC 的优势¶
| 优势 | 说明 |
|---|---|
| 简单高效 | 查表 + 插值,逻辑清晰,实现简单 |
| 天然并行 | 每个立方体独立处理,可高度并行化(GPU 友好) |
| 保证水密性 | 相邻立方体共享边上的切点,网格自然闭合 |
| 通用性强 | 适用于任何标量场——SDF、密度场、CT 数据等 |
MC 的局限性¶
特征丢失¶
顶点只能出现在网格的边上,无法偏移到体素内部。结果:
- 锐利边缘被削成倒角(chamfer)
- 尖角被磨平
- 几何细节受限于网格分辨率
Sliver Triangles(退化三角形)¶
当等值面恰好接近某个顶点时,插值点极度靠近端点,产生极细长的三角形。这类三角形:
- 渲染时可能出现视觉伪影
- 物理模拟中导致数值不稳定
- 下游处理(简化、参数化)困难
不可微性¶
MC 的核心操作——查表确定拓扑——是一个离散跳变过程。当 SDF 值发生微小变化导致某个顶点的符号翻转时,拓扑类型突变,三角形数量和连接方式瞬间改变。
AI 时代的最大痛点
不可微性意味着 MC 无法嵌入深度学习的端到端训练管线。无法通过反向传播优化 SDF,因为梯度在拓扑变化处断裂。这直接催生了 FlexiCubes 等可微替代方案。
变体与改进¶
| 变体 | 改进方向 |
|---|---|
| Marching Tetrahedra | 用四面体代替立方体,消除歧义情况 |
| Dual Marching Cubes (DMC) | 将顶点放在体素内部(对偶方法),可更好贴合形状 |
| Extended Marching Cubes | 利用 Hermite 数据(梯度信息)保留锐利特征 |
| Neural MC / Neural Dual Contouring | 用神经网络预测切点位置,提升质量 |
在 3D 生成中的角色¶
尽管存在不可微的局限,MC 在现代 3D 生成管线中仍然广泛使用:
- 推理阶段提取:训练完成后,用 MC 从学到的 SDF/密度场中提取最终 Mesh(此时不需要梯度)
- VecSet 系列(如 Direct3D):模型直接生成 SDF 网格值,推理时用 MC 提取表面
- 对比基线:在可微 pipeline 中,MC 常作为 FlexiCubes 的对比方法
当 pipeline 不需要"通过网格反传梯度"时,MC 的简单、高效、稳定仍是最优选择。
一句话总结¶
Marching Cubes 是对标量场的机械式翻译——给什么数据就按固定规则切什么三角形。简单可靠、但无法学习、无法优化,在需要端到端可微的现代 AI pipeline 中让位于 FlexiCubes 和 DMTet 等可微替代方案。