网格修复

1. 网格介绍

网格指的是三维多边形网格模型,以下简称为“网格”。简单来说,可以给网格下一个简单定义:由多边形集合定义的,用以表示三维模型表面轮廓的拓扑和空间结构称为“网格”,英文称作“polygon mesh”或“mesh”。

其中,尤以三角网格应用最为广泛(表示最为简单且稳定),因此本文一般讨论的网格是三角网格,但即便是由四边形及以上的多边形构成的网格也可以通过三角剖分(Triangulation)算法来获得三角网格。

2. 网格修复介绍

在3D打印,CAD研发,多目重建,三维扫描重建,数字文物建模以及其他三维图形处理领域,多半会遇到网格表面的质量不够好的情况。

四种典型的网格质量问题

四种典型的网格质量问题

  • 总结来说, 网格的问题可以归结为六种:

    1. 法向错误(反向?)

      三角形的顶点次序与三角形面片的法向量不满足规则。这主要是由于生成STL文件时顶点顺序的混乱导致外法向量计算错误。这种错误不会造成以后的切片和零件制作的失败,但是为了保持三维模型的完整性,我们必须加以修复。

      Untitled

    2. 孔洞

      这主要是由于三角面片的丢失引起的。当CAD模型的表面有较大曲率的曲面相交时,在曲面相交部分会出现丢失三角面片而造成孔洞。孔洞修复通过添加新的面片以填补缺失的区域。

    3. 缝隙

      通常由于顶点不重合引起的。缝隙和孔洞都可以看作是三角面片缺失产生的。但对于裂缝,修复通常是移动点将其合并在一起。

    4. 多壳体

      壳体的定义是一组相互正确连接的三角形的有限集合。一个正确的STL模型通常只有一个壳。存在多个壳体通常是由于零件块造型时没有进行布尔运算,结构与结构之间存在分割面引起的。

      STL文件可能存在由非常少的面片组成、表面积和体积为零的干扰壳体。这些壳体没有几何意义,可以直接删除。

    5. 重叠或相交

      重叠面错误主要是由三角形顶点计算时舍入误差造成的,由于三角形的顶点在3D空间中以浮点数表示的,如果圆整误差范围较大,就会导致面片的重叠或者分离。

    6. 错误边界

      在STL格式中,每一个三角面片与周围的三角面片都应该保持良好的连接。如果某个连接处出了问题,这个边界称为错误边界,并用黄线标示, 一组错误边界构成错误轮廓。面片法向错误、缝隙、孔洞、重叠都会引发错误的边界,对不同位置的错误确定坏边原因,找到合适的修复方法。

      Untitled

  • 注意:大多数的网格处理算法都是基于表面封闭且符合2-manifold特性的网格来设计的(可以暂时理解成网格表面封闭且光滑),甚至有些算法还需要多边形在网格上分布均匀。

3. 现有算法介绍

Untitled

Untitled

目前网格修复算法分类:

  • 基于点云或基于网格:
    • 体数据修复(Volume-based methods):先构建体数据(例如LDI,Octree,Uniform grid等),在体数据上修复完成后重建网格。
    • 表面数据修复(Surface-based methods,网格修复):直接在网格表面进行修补孔洞和其他缺陷。
  • 神经网络/模式学习:
    • 学习某些区域的特征来修复
    • 利用同类或相似三维模型的局部相近区域进行拷贝修整

3.1. 基于点云

  • 基于点云的方法是最先被研究的,其中确实有一些有价值的理论,可能对未来的研究者来说,对孔洞填充的研究有所启发。随着计算机图形学的快速发展,基于网格的方法得到了越来越多的关注,并在曲面重建中发挥了基础作用。尽管存在不同种类的网格,只有三角网格是最流行的重建表面的方法。所以2018年的综述只讨论了基于网格的方法。

3.2. 基于网格

3.3. 神经网络

参考资料

浅谈三维网格修复

Mesh Repairing Software on the Web