ML for 3D 课程文档
Marching Cubes 算法
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
Marching Cubes 算法
Marching Cubes 算法是一种将体素表示转换为密集网格的算法。
- 将空间划分为体素: 将 3D 空间分割成体素(立方体单元)网格。每个体素的大小决定了网格的分辨率。
- 采样八个顶点位置: 对于每个体素,采样八个顶点(角)处的密度。根据密度确定每个顶点是在表面内部还是外部。
- 确定三角形配置: 每个体素有八个顶点,每个顶点有两种可能的状态(内部或外部),从而产生 256 种可能的配置。每种配置都对应于特定的三角剖分模式。
让我们更详细地了解这些步骤。
1. 将空间划分为体素
第一步是将 3D 空间划分为体素网格。每个体素的大小将决定网格的分辨率。
2. 采样八个顶点位置
对于每个体素,该算法对八个顶点处的密度进行采样。根据密度,每个顶点被分类为内部
或外部
表面。
3. 确定三角形配置
每个体素的八个顶点可能处于两种可能的状态,从而产生 $2^8 = 256$ 种可能的配置。每种配置都对应于特定的三角剖分模式。
4. 生成网格
为了生成最终网格,该算法“遍历”每个体素并应用相应的三角形配置,因此得名“Marching Cubes”(行进立方体)。
此过程生成一个密集的、粗糙的网格,该网格近似于体积的表面。
局限性
虽然 Marching Cubes 网格对于可视化很有用,但由于以下几个限制因素,它们大多不适用于游戏等产品
- 多边形数量: 高多边形网格需要更多的计算来进行渲染,这会严重影响实时应用程序的性能。
- 边流: 较差的边流会影响网格在动画时的变形方式,从而导致不希望出现的伪影,如折痕和挤压。
- 纹理贴图: 密集且不规则的拓扑结构使 UV 贴图和纹理贴图变得复杂,从而导致纹理伪影。
改进
诸如 FlexiCubes 等技术通过允许网格顶点移动来解决一些局限性,从而创建更平滑的表面。InstantMesh(当前领先的开源 3D 管道)使用了这种方法。然而,生成的网格仍然过于密集,不适合生产。
实际应用
清理 Marching Cubes 输出的拓扑结构通常比从头开始创建网格需要更多的时间和精力。这为 ML for 3D 应用程序造成了主要的瓶颈。如前所述,Gaussian Splatting 为此瓶颈提供了一种潜在的解决方案。
然而,最近出现了直接解决此瓶颈的工作,使用可微分技术来生成具有更高质量拓扑结构的低多边形网格。这将在下一节中介绍。
< > 在 GitHub 上更新