mesh repair

来源:互联网 发布:c语言用什么编译器好 编辑:程序博客网 时间:2024/05/17 07:30

摘要

处理坏损的3D模型是一个非常费时的问题。这里用于automatic mesh repair的流水线包括三步:生成八叉树,表面重建和光线投射。光线投射用于移除隐藏的物体,流水线还包括一个预处理步骤用于移除相交的三角形,及一个后处理步骤用于错误检测。

这里的算法是和一种容量法(volumetric method),它生成的八叉树中包含了输入模型中的数据,在生成输出之前,八叉树中的数据为了去除不一致性会进行修补。表面重建使用称为Manifold Dual Contuoring方法。用奇异值分解来计算新的三角形定点的位置。


Problem

有时3D模型是不正确的,例如包含holes和不正确的三角形法向量。


缩写词

DC:Dual Contouring

MDC:Manifold Dual Contouring

QEF: Quadratic Error Function

SVD: Singular Value Decomposition奇异值分解

EVD: Eigenvalue Decompositin 特征值分解

DMC: Dual Marching Cubes

PGC: Parametric Graphical Configuration


计算机图形学

一个vertex是一个多边形的顶点,一个多边形mesh是形成一个形状的一组多边形,三角形在计算机图形网格中使用最多的多边形。一个voxel可以被看作是3D中的一个像素。

一个manifold多边形网格是指这个网格watertight,即如果这个mesh是manifold,那么在mesh内部的水是不会出来的。Hermiter Data包含两个向量:边上交点的位置和此点在表的法向量。


相关概念

Remeshing: 一种提高网格质量的技术,网格质量指的如采样密度、大小、reaularity。它的目标是简化网格和提高网格质量。

Uniform grid: grid中所有voxels都是一样大小的。

树结构:主要作用是使用mesh repair的处理时间缩短,树会对数据排序,使用数据搜索更简单。

BSP树:表示binary space-partitioning tree。

Octree: 每个节点都有8个孩子,


Mesh errors

冗余的vertices,如几个vertices在相同的位置上或是孤立的vertice

重叠或相交的三角形

hanging triangles


T_junctions


degenerate triangles,指三角形的面积为0,如一个点或线

反向的法向量

填补不相要的holes

保持相要的holes

生成manifold result

移除不可见的特征

控制输出的分辨率


Mesh repair算法可以分为surface-based或volume-based,也可能是二者的组合,surface-oriednted methodd也称作局部方法,volumetric称为全局方法。还有一种方法,它输入的模型转化为点云,然后再从点云中生成输出表面。


Surface-based methods

不会生成新的mesh,直接在输入数据上修改,对于一些特殊情况处理会有问题,比如相交。它会在物体小的区域进行修改,如cutting and stitching是局部方法的例子,上述的方法只会对输入的拓扑中加入一些变化,会添加一些三角形。然而这个方法当输入模型中的三角形比较多时,在健壮性和速度上有问题。另外,它一般只能用于一类问题,不能用于处理所有的mesh errors。它还对输入的模型有质量要求,否则输出合法。基本上不是自动的,需要与用户交互及后期处理。这个方法可以用于解决缺口(gaps)和空洞(holes)。它适合用于输入模型的错误比较少,并对健壮性的要求不高的情况。

Volume-based methods

Volumetric 算法把输入的模型转化为一个volumetric 表现形式,然后从这种表现形式中提取出模型。可以用Marching cubes或Dual Contouring从中提取出模型。



0 0
原创粉丝点击