模型简化

来源:互联网 发布:unity3d退出游戏代码 编辑:程序博客网 时间:2024/06/05 10:43

简化算法大致可分为三类:顶点聚类法,顶点删减法,边折叠法。


顶点聚类法

顶点聚类的思想很简单:对于给定的多边形表面,把模型所在空间分成很多个小格(小格尺寸小于用户指定的近似误差阈值),为每个小格计算一个代表顶点,把原始模型落在这个小格内的顶点都合并到代表顶点上。如果一个三角形有两个或者三个顶点位于同一小格内,就会被删除,网格因此得到简化。聚类算法主要特点包括:(1)效率高(2)健壮性好,对输入网格的拓扑结构没有限制(3)可能在简化过程中修改网格的拓扑结构(4)简化模型的精度依赖于小格的尺寸。

1.基本概念[参考文献1]

定义1.空间中一组三角形,沿公共边及在顶点处相邻接,把这样的一组三角形定义为三角形网格TM,TM可由顶点集V=(v1,v2,...,vn)和三角形集合T=(t1,t2,...,tm)所组成的二元组(V,T)来表示。

定义2.对TM中任一条边,如果该边只为一个三角形所享有,则称该边为边界边,该边的两个顶点被称为边界顶点,该边所在的三角形被称为边界三角形

定义3.对TM中任一顶点vi,所有以vi为一个顶点的三角形Tik构成的集合,称为与顶点vi相关的三角形集合Pi

定义4.对TM中一个顶点集合Vs={v0,v1,...,vk},与Vs中的每个顶点相关的三角形集合的并集,称为与顶点集合Vs相关的三角形集合Ts(Vs),即


2.顶点聚类的新顶点的生成和误差的度量

首先考虑,如果一些顶点落在一个长方体内时,删除这些顶点后,如何生成一个新顶点以及用该新顶点代替被删除的顶点所产生的误差是多少。这就有一个选择误差标准的问题,可以以点到平面的距离为误差标准。


3.网格模型的自适应划分

现在来考虑如何对原网格模型的包围盒进行划分。我们的基本工具是八叉树。原网格模型的包围盒作为八叉树的根节点,然后按顺序把原网格的所有顶点插入八叉树。本文算法是通过控制八叉树的每个叶子节点的性质来实现网格模型的自适应性划分。

当一个顶点插入八叉树的某一叶子节点时,如果该叶子节点内还不包含顶点,则把该顶点直接放入该节点,不用做其他操作。如果该叶子节点内已经含有顶点,那就要判断该叶子节点所表示的长方体的尺寸是否大于用户指定的每个长方体的最大尺寸以及该节点所包含的顶点数目是否大于用户指定的每个长方体最多所能包含的顶点数目,如果是,则需要分裂该节点并把该节点包含的顶点分配到其子节点中去。否则,为了保证每个长方体内的顶点和边所构成的图是连通的和避免变形过大的聚类,算法还要判断在把顶点放入该长方体后,会不会导致与新顶点集合相关的三角形集合中某些三角形的朝向(法向量)相反,如果会,该节点也要被分裂。


Rossignac算法对特殊网格造成的变形


自适应划分


顶点删除法

顶点删除每次删除一个顶点和它的相邻面,产生的空洞通过局部三角化填补,操作反复进行,直到网格不能再简化或达到用户的简化要求为止。该类算法特点是:(1)最擅长删除冗余几何信息(2)生成模型的质量比较好(3)多数不允许改变拓扑结构,因此大幅度简化能力有限(4)不同算法的实现难度和处理速度相差很多。

Schroeder提出的网格简化算法[2]对于顶点删除法首先根据顶点的局部几何和拓扑信息把顶点分成“可删除”和“不可删除”两类。每次选择一个可删除顶点,如果顶点到相邻顶点“平均平面”的距离小于误差阈值,就删除它。对非流型输入模型,先把它分割成各自满足流型结构的块,分别处理之后再进行拼接。算法在时间和空间上的效率都比较高,实现和应用也简单,简化质量也不错,可以在大规模网格上应用。但对于保持光滑表面有困难。

Cohen提出的简化信封(SimplificationEnvelopes,SE)算法[3] 。对给定输入表面M,以偏移-ε和+ε分别建立表面M的信封表面M-和M+,对原始顶点,只有当删除后形成的新三角形不与M-或者M+相交时,才可以删除。简化结果质量很好,近似误差严格控制在给定的阈值内。但只能处理流型拓扑结构,而且时间空间开销很大。


边折叠法

Hoppe等人在网格优化算法[4]中首次提出用边折叠进行简化操作。边折叠操作选择两个相邻的顶点u和v,删除它们之间的边(u,v)和这条边上的两个三角形,两顶点合并到一个位置w。对不同的算法么,新顶点w的选择方案有多种。边折叠算法的特点有:(1)简化模型的质量比较好(2)健壮性好,可以在任何拓扑结构上进行简化(3)多数可以闭合模型表面的孔洞,从而改变拓扑结构,进行大幅简化(4)生成不同精度的模型,很容易进行相互之间的无缝切换(5)不同算法的区别主要在采用不同的误差度量来选择要折叠的边和新顶点的位置,实现难度和处理速度相差很多。Hoppe渐进网格算法[5],Qslim算法[6]用QEM(Quadric Error Metrics二次误差度量,表示顶点到平面集合的距离平方和)来度量误差。

下图是一个折叠过程的示意图。算法折叠了 边。u点, 边,以及三角形①②在折叠后从原网格中消失;而三角形③④⑤⑥原先以u为顶点的点修改为以v为顶点,发生了变化。
边折叠算法的优势在于它可以生成连续的细节层次,并且有相应的处理纹理信息的方法。采用Hoppe于1996年提出的递进网格算法[5],可以生成多个连续的细节层次,方便地控制简化的面数,同时简化后顶点和对应的纹理不变,保证简化模型的一致。此外,边折叠算法还有很好的扩展性。对算法加以改进就可以实现与视点相关的动态简化。


参考文献

1.周昆 潘志庚 一种新的基于顶点聚类的网格简化算法 自动化学报 Vol.25,No.1 Jan,1999

2.W Schroeder,J Zarge,et al Decimation of TriangleMeshes[C]. Proc of the ACM SIGGRAPH’92, Chicago, Illinois, USA, 1992.65-70.

3.J Cohen, A Varshney,D Manocha,et al Simplification Envelopes [J]. ComputerGraphics, 1996, 30: 119-128

4.H Hoppe,T DeRose,et al.Mesh Optimization[C] Proc of the ACM SIGGRAPH’93,Anaheim,CA,1993.19-26.
5.H Hoppe Progressive Meshes[C]. Proc of the ACM SIGGRAPH ’96,NewYork,1996.99-108.
6.A Kalvin R Taylor.Superfaces:Polygonal Mesh Simplification with Bounded Error[J].IEEE Computer Graphics and Applications,1996,16(3):64-77.

0 0
原创粉丝点击