跳到主内容
快讯直播
AI智模界
AI 词典

搞懂 Marching Cubes:把体素和 SDF 变成三角网格

一句话定义:Marching Cubes(行进立方体)是一种把三维标量场——比如体素密度、占用网格(occupancy grid)或有符号距离场(SDF,Signed Distance Field)——转换成三角网格(triangle mesh)的经典算法,输出的是能直接被游戏引擎、建模软件和渲染管线使用的表面。

先说原理。想象一张等高线地图:地图上每个点都有海拔,把海拔相同的点连起来,就画出了山的轮廓。Marching Cubes 做的是同一件事,只不过从二维升到了三维——把空间切成一个个均匀的小立方体,每个立方体的 8 个顶点都带一个数值,拿它和阈值比较:大于阈值算“在物体内”,小于算“在物体外”。8 个顶点各有内外两种状态,一共 2⁸ = 256 种组合。算法提前把这 256 种情况枚举好:每种情况下,内与外的分界线应该长什么样,用哪几个三角形去近似。运行时每个立方体只需判断自己属于哪种情形,查表取出对应的三角形,再把所有立方体产生的三角形拼起来,就得到一张连续曲面。

打个生活化的比方:拿一堆魔方拼出一个土豆的形状,然后逐个观察每个小方块——它的 8 个角里,哪些在土豆里面,哪些在外面——据此在这个方块内部切出一两片三角面。所有方块都切完,土豆的表面就浮现出来了。名字里的“marching”(行进)指的就是表面从立方体的一条棱“穿”到另一条棱的过程。

它和相邻概念的分工,可以用一张表看清:

概念输入输出典型用途
Marching Cubes体素 / 标量场三角网格医学可视化、SDF 转网格
体素化(voxelization)网格体素碰撞检测、空间加速
点云重建(如泊松重建)点云网格扫描数据复原
体渲染(volume rendering)体素图像直接出图,不产出网格

对 AI 从业者来说,这一步的分量比它看起来重。今天大量三维生成模型——文本生成 3D、单图生成 3D、神经隐式场——内部学到的往往是一个连续函数:输入一个坐标,返回“这里离表面有多近”。这种隐式表示没法直接拖进 Unity、Blender,也不能送去 3D 打印。要落地,就得先在某一步把它采样成体素网格,再用 Marching Cubes 这类算法转成网格。可以说它是“AI 生成 3D”的最后一道关:模型决定形状好不好看,这一步决定形状能不能被用起来。

当然它也有代价。网格分辨率越高越接近原形,三角形数量和显存占用也涨得很快;尖锐的棱角容易被磨圆;某些立方体的连接方式还存在拓扑歧义,所以后来才有 Marching Tetrahedra、Dual Contouring 等改良方案。普通职场人不必会写这个算法,但知道“AI 出的 3D 模型要经过一层体素到网格的转换”,就能理解为什么同一份生成结果,换个分辨率会像换了个模型。

具体软件或库的实现细节与参数,以官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。