3D 机器学习课程文档

行进立方体

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

行进立方体

行进立方体是一种将体素表示转换为密集网格的算法。

Torus Point Cloud

  1. 将空间划分为体素: 将 3D 空间划分为体素网格(立方体单元)。每个体素的大小决定了网格的分辨率。
  2. 采样八个顶点位置: 对于每个体素,采样其八个顶点(角点)处的密度。根据密度确定每个顶点是在表面内部还是外部。
  3. 确定三角形配置: 每个体素有八个顶点,每个顶点有两种可能状态(内部或外部),从而产生 256 种可能的配置。每种配置对应一种特定的三角剖分模式。

让我们更详细地了解这些步骤。

1. 将空间划分为体素

第一步是将 3D 空间划分为体素网格。每个体素的大小将决定网格的分辨率。

2. 采样八个顶点位置

对于每个体素,算法会采样八个顶点的密度。根据密度,每个顶点被分类为表面内部外部

3. 确定三角形配置

每个体素的八个顶点可以有两种可能状态,从而产生 $2^8 = 256$ 种可能的配置。每种配置对应一种特定的三角剖分模式。

Marching Cubes Lookup

4. 生成网格

为了生成最终网格,算法会“遍历”每个体素并应用相应的三角形配置,因此得名“行进立方体”。

Marching Cubes Head

这个过程会产生一个密集、粗糙的网格,近似于体积的表面。

局限性

虽然行进立方体网格对于可视化很有用,但由于几个限制因素,它们大多不适用于游戏等生产场景。

  1. 多边形数量: 高多边形网格需要更多的计算量进行渲染,这会显著影响实时应用程序的性能。
  2. 边流: 糟糕的边流会影响网格在动画时的变形方式,导致折痕和挤压等不良伪影。
  3. 纹理: 密集且不规则的拓扑结构使 UV 映射和纹理化变得复杂,从而导致纹理伪影。

Mesh Topology

改进

FlexiCubes 这样的技术通过允许网格顶点移动来解决一些限制,从而创建更平滑的表面。这种方法被 InstantMesh 使用,它是当前 领先的 开源 3D 管线。然而,由此产生的网格仍然过于密集,不适合生产。

实际应用

清理行进立方体输出的拓扑结构通常比从头创建网格需要更多的时间和精力。这给 3D 机器学习应用带来了主要瓶颈。如前所述,高斯溅射提供了解决此瓶颈的潜在方案。

然而,最近出现了一些工作,直接解决了这个瓶颈,使用可微技术生成具有更高质量拓扑的低多边形网格。这将在下一节中介绍。

< > 在 GitHub 上更新