Remeshing
主要内容:1) Remeshing,Isotropic remeshing,通过split、collapse、flip、smooth、project操作进行remeshing,调整顶点位置等,使得输出的网格的三角形边长尽量是一样的,朝向与主曲率的方向是一致的,能够满足质量准则,对原始网格是一个很好的逼近。2)error-bounded remeshing,提出Hausdorff distance约束,判断输出和输入的网格是近似的。两种保持方式:一是在每一步操作都判断Hausdorff distance,不满足则取消这一步操作;二是在每次remeshing后,找到违反hausdorff distance的地方,通过加点的方式,使其满足到hausdorff distance约束。3)基于参数化的方法,原因是在smooth后会产生点不在原曲面上,于是需要投影。所以通过参数化后转化为2D case,解决点不在原曲面的问题。
概念
给一个3D网格,计算另一个网格,这个网格要满足一些质量准则(如网格是正三角形),三角形的质量会更好,近似于输入的网格模型。
approximating:模型顶点位置接近,比较微分量、顶点位置函数值、一阶normal、二阶curvature。
图中中间:三角形比较一致,更像是各向同性的网格。
图中右1:在曲率高的地方采样的点会多一点,对模型的近似程度更好。
作用
- 网格的质量的提升,有利于其他应用中的处理与分析(有限元分析)。
- 减少曲面网格复杂度。
比如三维扫描一个模型,但是想要提升网格质量,就需要remeshing,remeshing不会修补网格。
问题讨论
输入: 一个manifold三角形网格(修补后的)或者它的一部分。
希望输入和输出是近似的。
输出的网格质量:
- 采样密度:比如曲率高的地方采样点多一点。
- 奇异性(regularity):尽可能得到奇异点少的近似网格模型。
- size:曲率高的地方多采样一些点,点多了,size就会减小。
- orientation:各向异性,希望三角形在曲率大的地方小一点,曲率小的地方大一点,和主曲率的方向对齐。
- Alignment:网格有feature,希望生成的网格与feature是对齐的。
- 网格单元的形状:希望是正三角形的。
- 拓扑约束:希望不要出现拓扑约束,如果出现需要网格修复。
Local Structure
- element shape
- element density
uniform、nonuniform、adaptive
- element alignment and orientation
保持住sharp features
各向异性,三角形的orientation与主曲率的方向一致。
Global structure
- 点
- 非奇异点
- 三角形网格:valence=6
- 四边形网格:度=4
- 奇异点
希望奇异点越少越好,比如奇异点越多,会影响有限元分析的收敛性。
- 非奇异点
- Global
- irregular
- semiregular
在原来粗糙的网格上细分得到的网格,在细分过程中不会产生奇异点,奇异点只存在于原来粗糙的网格。 - highly regular
大部分点都是非奇异的 - regular
所有的点都是非奇异的,不存在
算法
- 目的:希望生成一个各向同性、三角形的边长尽可能接近的。
- 输入:三角形网格和目标边长
- 输出:输出另一个三角形网格,希望所有的三角形都是正三角形并且边长与目标边长尽量的接近。
将网格中的比较长的边一分为二,较短的边做一个collapse,然后flip调整度,relocation做一个smooth,使点分布更均匀,三角形更像一个正三角形。
-
算法流程
其中 4/5、4/3、10都是经验参数,不用改变。 -
算法操作
-
split
- 访问所有的边
- 在长的边的中点做split
-
collapse
注意collapse会将短的边变长,要判断变长的边是否超过4/3,若超过,可以拒绝本次collapse操作。
-
equalize valences(flip)
- 详见书p100-102
- 看度是否接近6,看flip之后度的变化
- 准则:每个点的|度-6|求和,如果flip后这个和变小,则可以做flip。
-
The tagential relaxation(smooth)
- 拉普拉斯
- 投影
openmesh中实现了一些操作,需要配置CGAL,学习AABB tree的使用。
-
-
与主曲率的自适应的关系
-
feature的保持
- feature边和点在输入时给出
- corner点:多条feature线的交汇点
- feature点:仅沿着feature线移动的点
- 其他的点可以随意移动,remeshing过程中满足上述点的要求。
基于参数化的方法
- 过程:参数化 -> remeshing -> 返回回原曲面。
-
优点:参数化后都在二维平面区域,不会出现remeshing后的点不在原区域内,不需要投影。
-
缺点:
- 参数化后二维区域的remeshing 会出现扭曲,比如在二维区域看似正三角形,投影到曲面上相差较大。
- 在原曲面上有一条切缝,在二维曲面上有两条切缝,做完split flip操作等返回到曲面上时两条切缝如何保证能合上。
-
问题解决
- 扭曲:把网格分成一块一块的,每一块做remeshing,并保证扭曲比较低,解决扭曲问题。
- 割缝:两条缝左边和右边都做remeshing,如何保证合上?一块一块做,这一块保证扭曲比较低,并且remeshing不处理边界,下一块的时候把上一块未处理的边界包含上作为内部部分一起处理。
-
逼近-Hausdorff距离
- 输出和输入的相似性
- 看上去比较接近
- 法向和曲率、高阶的微分量比较接近。- 逼近方法-Hausdorff距离
-
不考虑法向、曲率的difference。
-
考虑两个网格的位置之间的difference。
-
Hausdorff距离
- 测度空间之间的difference
- X、Y看做两个点云
- 给定一个x,在Y里面找一个点y,使得x和y的距离是最小的,对每一个x操作,对所有的x求一个最大值;
- 给定一个y,在X里面找一个点x,使得x和y的距离是最小的,对每一个y操作,对所有的y求一个最大值;
- 求前两者中的最大值,该值被定义为Hausdorff距离。
-
- 逼近方法-Hausdorff距离
- 三角形网格之间的Hausdorff distance
- 两个距离之间的最大值。
- Hausdorff distance 的近似:一般是算Hausdorff距离的近似,在网格上做采样。但是注意是计算采样点到另一个网格(三角形面片)上的所有点的距离,不是两个网格的采样点互相求距离。
- Hausdorff distance 的近似:一般是算Hausdorff距离的近似,在网格上做采样。但是注意是计算采样点到另一个网格(三角形面片)上的所有点的距离,不是两个网格的采样点互相求距离。
- 两个距离之间的最大值。
Error-bounded remeshing
- 希望输入和输出网格的hausdorff距离是有界的。
- 将此作为一个约束,每做一次操作,判断一次hausdorff距离,不满足则拒绝该次操作,保证每一步生成的网格都是满足约束的,在error-bounded space里的。
- 显式保证了hausdorff距离是有界的,输出不会偏离输入太远,但是代价比较高。
- 每一次都判断代价太高,解决方法:在remeshing过程中在违反hausdorff距离严重的地方插入更多的点,使hausdorff距离减小,回到界内。做完一次加点操作再去判断。
- 算法
初始化目标边长,做完一次remeshing,如果违反hausdorff距离约束,调整目标边长,加点、更新。
角的处理
- 在最大角和最小角做一个提升,让输出不会产生很大或很小的角(split、collapse)。
- 方法
- 方法