梁 成, 张嘉华, 李桂清,李 琳
(华南理工大学 计算机科学与工程学院,广东 广州 510640)
Simplification of Non-manifold Building Meshes
Liang Cheng, Zhang Jiahua, Li Guiqing, Li Lin
( College of Computer Science and Engineering, South China University Of Technology, Guangzhou 510640, China )
+Corresponding author: Phn: +86-13560097480, 86-020-33645269, E-mail: aliceliang85@126.com
Abstract: A novel approach is proposed for decimating non-manifold mesh models of buildings created by 3D modeling softwares. A 1/x edge data structure is introduced for retrieving proximities in the non-manifold models. Moreover, a special cost function is derived for edge collapsing of this special kind of mesh models. Metopes and roofs are also recognized before simplification in order to preserve these important topology and shape features.
Key words: non-manifold, building model, mesh simplification, edge collapses, 1/x edge
摘 要: 本文提出了一种针对利用三维造型软件手工制作的非流形建筑物网格模型的简化方案。为了能兼容建模过程中出现的非流形问题,引入了1/x边结构以处理邻接关系。同时,提出一种适合非流形建筑的边折叠代价公式。此外,通过识别建筑物主墙体和屋顶来保持保持建筑物的重要拓扑关系和形状特征。
关键词: 非流形,建筑物模型,网格简化,边折叠,1/x边
中图法分类号: TP391.41 文献标识码: A
在一些3D图形应用程序中会经常遇到各种建筑物的绘制。特别是在数字地球漫游系统,例如Google Earth,World Wind等,往往需要同时绘制大量不同精度的建筑物。一些商业公司的做法是,让建模人员利用三维造型系统地对同一建筑物制作不同精度的模型来实现细节层次(Level of Detail,LOD)。这样不但会增加制作成本,而且容易导致模型的不一致性。另一方面,传统的简化算法要么不能处理非流形模型,要么没有兼顾建筑物所具有的特性。为此本文提出一种针对手工制作的非流形建筑物模型的简化算法,并在此基础上自动生成不同精度的建筑物模型。本文的工作有如下特点:
l 针对非流形建筑物,提出了专门用于处理非流形网格的1/x边结构,能够很好地处理非流形建筑物网格。
l 特征和轮廓保持:提出了更全面考虑建筑物特征的边折叠算法的代价公式,针对非流形拓扑关系引入了限制条件,消除了简化后网格的零面积三角形并避免产生拓扑裂缝。能够维持原网格的保真度,简化后建筑物网格的基本特征和轮廓得到保持。
1 相关工作
Masuda等认为非流形网格可以直观地理解为线框、表面和实体的复合体[1]。与流形网格不同,非流形网格允许存在悬点、悬边、悬面等,n维集合元素不再仅只由n-1维集合元素组成,而是由各种元素粘合得到。常见的非流形模型的表示方法主要有以下4种:基于S集的表示方法[2]、边界表示方法[3]、SGC表示方法[4]和CNRG表示方法[5]。其中,S集方法的点集操作不便于描述建筑物特征和轮廓。SGC和CNRG方法虽然适合于非流形网格简化,但其布尔操作不支持对建筑物部分带有凹陷再凸起的细节描述。边界表示方法不能处理多个面共边的情况。上述表示方法都不能解决建筑物模型一个顶点对应多个纹理坐标的问题。
迄今已有大量网格简化算法, 大都基于点线或面的删除。Hoppe等的渐进网格(PM,Progressive Meshes)[6]已经可以通过优先队列使得简化和细化过程实时进行,但直接使用非常容易造成裂缝。因此,上述简化方法还不是通用的能处理非流形网格的方法。
而对于非流形网格的简化也有很多方法。Rossignac等人的基于空间分割算法是一种通用的非流形网格简化算法[7]。该方法可以适应非流形不具有密不透水(water-right)的情况,但无法很好的保持拓扑与几何细节。Garland等人的QEM(Quadric Error Metrics)算法能够连接网格中的不连通区域[9]。该算法的虽然可以支持非流形网格,但是用于简化非流形建筑物网格时容易产生裂缝。
2 建筑物模型的特殊性
根据对大量模型的处理与分析发现,手工制作的建筑物模型,容易出现以下几种非流形的拓扑关系情况:
(a) (b) (c) (d) (e) (f)
图1 手工制作的建筑物几种比较常见的特殊情况
Fig 1: several special circumstances of hand-made buildings
1)顶点落在边上,如图1(a)。2)不同元素交错粘合,不同长度的边重叠在一起共线(图1(b)),两个三角面错位相交(图3(c)中的屋顶)。3)边界面/悬面。在模型中经常出现单调面,如图1(d)中从房体结构飘出的阳台。4)悬边。在模型中出现不属于任何面的单边,例如图1(e)中的避雷针。5)悬点。多个面相交于一个点,如图1(f)。
3 简化流程
下面是非流形网格简化的主要流程:
1) 读入原始网格,建立1/x边结构(详见第4节),并识别建筑物特征(详见第5.2节);
2) 用户指定简化后面数,程序以迭代形式进行边折叠,重复第3,第4步,直到指定面数进入步骤5;
3) 根据第5节计算各条1/x边的折叠代价;
4) 在选出了最需要被折叠的1/x边后,对网格进行边折叠操作;
5) 输出简化网格。
4 1/x边结构
半边结构无法直接处理非流形的网格。本文在半边结构的基础上,建立顶点的1/x边集来表示pair关系,称为1/x边结构(这里x表示该边由x个面共享)。
|
如图2,1/x边结构由顶点,1/x边以及面组成,记
为非流形三角网格,
。其中
为顶点集合,下标i为顶点编号。图2中用灰色点表示顶点;
为有向面集合,fxyz
F表示由vx,vy,vz按顺时针构成的面;有向1/x边集的元素同样用顶点序号三元组表示:
,不过边(i,j,k)中的i,j表示该边的两个端点的序号,而且k用来指定该边属于三角面fijk。我们也用eijk表示1/x有向边(i,j,k)。
如果一条以i,j为端点的边被y个面共享,它相应地有y条1/x边, 具有相同端点的1/x边互称为影子。相对于1/x有向边eijk而言,它的影子被分成两类。一类与它同向,eijk的同向1/x边集合记为(eijk)Forward={eijl
E,l
k},另一类与它反向记为(eijk)Back= {ejil
E },顶点vi放射的所有1/x边集合记为Ei+={eijk
E}。对于每条1/x边,用next指针来记录同一个面上的下一条1/x边某条1/x边eijk在同一个三角面fijk内的下一条1/x边为ejki,记为(eijk)next=ejki,同理有(ejki)next=ekij,(ekij)next= eijk。
整个网格的邻接关系主要由1/x边间的关系来表示。例如图4中无向边ij共有3个面与其邻接,因被拆分为3条有向1/x边来表示,这里x=3。而三角面fijk中的有向1/x边eijk
fijk有两条逆向1/x边
,
作为其影子。
对于1/x边结构,查找某条1/x边的反向1/x边集时,需要进行多步操作。某条1/x有向边eijk的反向边集也可以表示如下:
采用1/x边结构表示建筑物模型具有如下特点:
l 与翼边结构相比,1/x边结构更节省空间;与半边结构相比,1/x边结构能够支持非流形网格。
l 每条1/x边对应顶点的一个纹理坐标,解决了同一个顶点在不同邻接面的纹理坐标不一样的问题。
l 每条1/x边都可是一条有向边,反映了边上的方向,可以对应上边折叠时的折叠方向。
5 代价函数与特征保持
5.1 考虑特征的代价函数
边折叠算法的关键是模型简化的评价准则,称之为代价函数。每次折叠时选择代价最小的1/x边进行折叠。针对二维流形网格,[10]提出了如下评价公式:
(1)
其中简化方向是从顶点vi往顶点vj折叠,Fi表示包含顶点vi的三角形集合,fipq为Fi里的元素,Fij表示同时包含vi和vj的三角形集合,fijq为Fij里的元素。|eijk|表示1/x边eijk的长度。nipq表示三角面fipq的法向量。
第2节提到的最后两种情况:情况(4)不能折叠,情况(5)没有边可以折叠,都无须考虑边的代价,因此下面只针对其它三种情形来考虑更全面的代价函数,此外,还需要考虑根据建筑物的特征来保持它的轮廓:
(2)
其中
为系数,在我们的实验里发现取
,
在5.2节中定义,Fi,Fij,|eijk|,nipq的含义同公式(1)。简化方向是从顶点vi往顶点vj折叠。修改后公式(2)比公式(1)多了取最小值及增加偏移值两步操作,在预处理后公式(2)复杂度与公式(1)同级别。
新的代价公式(2)主要考虑了以下因素,对于各种非流形情况具有较强的鲁棒性和可行性:
(a) 考虑建筑物墙体角度:对于建筑物来说,最重要的角度是90°而不是180°。
(b) 考虑建筑物屋顶的特征:根据经验,一般屋顶的角度在arccos(1/3)至arccos (-1/3)之间,因此可以增加一个约束
,使得角度在实验值的夹角范围外的cost值始终为1.0。
(c) 考虑边的长度因素:在单位化建筑物,并调整了角度的控制因素后,边长的控制因素不变。
(d) 考虑非流形边:最常见的有两种情况,一种是边界边;另一种是“点在线上”的边,即这条1/x边的邻接边被拆成了多条1/x边和1个顶点。这样的边比流形的边在代价函数中少了一半的比较元素,并且简化这样的边易引起建筑物的变形和裂缝。但就公式(1)而言,它同样是取几个邻面的最小值,不需要增加控制因子。
(e) 保持轮廓:因为轮廓一般为模型中长度较大的边,因此需要加入一个限制条件,当顶点vi为轮廓顶点时cost值增加100(轮廓顶点的定义见4.4节),即公式(2)中附加上偏移值
=100。
5.2 轮廓保持
对于建筑物,往往更希望能保持外围轮廓的几个特征顶点的位置,以更好地保持简化后的建筑物与原网格轮廓一致性。为此加入了“1/x轮廓边”和“轮廓顶点”的概念。记1/x轮廓边集合为:
当一个顶点放射的两条以上的1/x轮廓边时,定义这个顶点为轮廓顶点。记所有轮廓顶点集合为:
为了使真正轮廓边和对角线影响相同,这里计算1/x边长度的时候不是以1/x边的欧几里德长度作为度量,而是以1/x边分别在3个坐标轴上的投影长度来进行度量:
(3)
其中|eopq|表示1/x边在x坐标轴上的投影长度,另外两个坐标轴类同。
这种方法适用于一些手工建模的建筑物模型。在手工建模时,建模人员一般会用大的形体或三角形勾勒出建筑物的主要轮廓再添加细节,轮廓顶点一般处在主墙体的顶点上,而且带有影响较大的纹理uv值,一般不移动其位置。模型需要强制简化时,轮廓顶点也可作为被折叠的对象。所以在公式(2)轮廓顶点发出的1/x边的代价值上需要加上一个较大的固定偏移值,以降低该1/x边的简化优先度,经实验发现,取100比较合适。
需注意的是,进行边折叠后,一些非特征边也会越来越长,但算法不会把它们当作轮廓处理,所以设定顶点为轮廓顶点在预处理后将不再改变。
5.3 零面积三角形消除
如图3,三角面fijk和三角面fikl共面。当顶点vi往顶点vj折叠时,会删除三角面fioj和三角面fijk,但三角面fikl会随着边折叠过程缩减成为一个零面积的三角形。
在保持纹理的前提下,解决方案是遍历顶点vi的1/x边数组,取出其放射某条的1/x边所在三角形fikl,并计算其面积Sikl,这里可以通过其法向量nikl来确定面积是否为0。对于其拓扑关系,由于三角面fijk和三角面fikl可是视为一个三角形合并,2个三角形同时删除,所以网格的拓扑关系无需再改变。
图3 零面积三角形情况产生示意 图4 裂缝情况产生示意
Fig 3: 0-area triangle caseses Fig 4: crack cases
5.4 裂缝消除
如图4,顶点vi在lk边上,因此如果顶点vi向顶点vj折叠时,1/x边elio边将会引向1/x边eljo,从而出现一个以ijk为边界的裂缝。如果通过查找发现某条边没有对称1/x边,则这条边就可能处于边界上或者属于上述类型,被折叠时会出现裂缝。
为解决这类问题,引入了边界1/x边和边界顶点的概念。边界1/x边定义为没有对称1/x边的有向1/x边,而放射边界1/x边的顶点称之为边界顶点。例如上图中,无向边il,ik,lk为边界边,这些边对应的1/x边称之为边界1/x边,顶点vi,vl,vk为边界顶点。分别记边界1/x边集和边界顶点集为
和
,则有:
规定边界顶点只能在边界1/x边上移动产生裂缝。一般的边界顶点和边界1/x边在预处理时就可以标记出来。但是简化时会有一些新增加的边界出现,包括被折叠边的结束点以及零面积三角形对应的顶点。因此在顶点vi往顶点vj折叠后,需要对顶点vi进行一次判断。
6 实验与讨论
建模过程中一般把建筑物分为两类,一种为地标形建筑,另一种为住宅建筑。后者的三角形面数大都在200-1000之间;在城市场景中一般分布较多且视觉敏感度低,可以大幅度简化:
(a1) (a2) (b1) (b2) (c1) (c2)
图5 针对不同情况的化简实验
Fig 5: simplification of the different circumstances
图5(a)测试针对第2节中第1种情况(单三角形分裂)的简化。(a1)为简化前线框图,83个面52个顶点,(a2)为简化后线框图。42个面24个顶点。在简化时,红圈内部分,对边界边进行锁定以保持其特征,模型没有出现裂缝现象。
图5(b)测试针对第2节中第2种情况(边点、面边粘合)的简化。(b1)466个面309个顶点,(b2)233个面143个顶点。红圈范围内的屋顶结构中边与面的直接粘合。该结构的边同样被判定为边界边,被锁定,没有造成裂缝,简化了蓝圈部分中的高层窗户装饰细节。
图5(c)测试强制简化三角形的情况。(c1)297个面191个顶点。(c2)74个面39个顶点。可以看出,强制简化到原面数的1/4时,简化过程中保留了这个建筑物的轮廓,但是纹理的效果不是很好,因为纹理坐标只是与顶点进行了简单的对应。
图6与[9]提出的QEM算法进行了对比,图6(a1)为原模型846面简化至78面对效果对比。因为采用了新的代价公式,图6(a3)保持了屋顶原有轮廓,相对有利于纹理顶点对应保持;此外,图6(a2)屋顶的部分三角形和左下方的门槛三角形不连续。图6(b1)为原模型866面简化至78面对效果对比。图6(b)为原模型1671面简化至297面对效果对比。图6显示2种算法简化顺序的不同。图6(b2)中优先简化了带有弧度的墙面,而图6(b3)优先简化了墙面上的窗体和装饰。
可以看出,本文的方法在建筑物特征保持和裂缝避免方面有更好的效果。
(a1) (a2) (a3) (b1) (b2) (b3)
图6:本文方法与QEM方法的对比。(1)为原模型,(2)为QEM简化结果,(3)为本文简化结果
Fig 6: comparison of our approach and QEM. (1) original mesh, (2)QEM results, (3)our apporach
8. 总结与展望
本文提出了一个非流形建筑物网格模型简化算法. 针对非流形特点设计1/x边结构进行表示,采用“锁定”边界边的方法以保持建筑物特征,建筑物的封闭性也可以保持;对于拓扑错误,能够保证这样的拓扑错误不扩散;简化结果很好地保持了建筑物的轮廓。对纹理的对应关系也作了细致处理.
进一步的工作可考虑下面几个问题。首先是提高算法效率,对拓扑关系进行修正,比对网格进行重构,或在简化过程中一边折叠一边修改拓扑关系以三角形边的长度或投影长度作为判别筑物特征的标准有时不太合理,特别是简化之后,。目前直接对应纹理坐标的做法在大量使用重复纹理或多张纹理的时候造成失真。可考虑在代价函数中考虑融入纹理因素。
References:
[1] MASUDA H. Topological operators and Boolean operations for complex-based non-manifold geometric models. Computer Aided Design, 1993,25(2):119~129
[2] ARBAB F. Set models and Boolean operations for solids and assemblies. IEEE Computer Graphics and Applications, 1990,10(6):76-86
[3] MANTYLA M. An Introduction to Solid Modeling. Computer Science Press, 1988
[4] ROSSIGNAC J, O'CONNOR M. SGC: A Dimension - Independent Model for Point sets with Internal Structures nd Incomplete Boundaries. Geometric modeling for product engineering. North-Holland, 1989
[5] ROSSIGNAC J, REQUICHA A A G. Constructive non-regularized geometry, Compute Aided Design, 1991, 23(1):21-32
[6] HOPPE H. Progressive Meshes. SIGGRAPH ’96 Conference Proceedings, 1996.
[7] ROSSIGNAC J,BORREL P. Multi-resolution 3D approximations for rendering complex scenes. In B. Falcidieno and T. Kunii, editors, Modeling in Computer Graphics: Methods and Applications, 1993, 455~465
[8] FLORIANI D L, HUI A, Representing Non-Manifold Shapes in Arbitrary Dimensions, Israel-Korean Bi-national Conference on New Technologies and Visualization Methods for Product Development on Design and Reverse Engineering, 2005
[9] GARLAND M, and HECKBERT P. Surface Simplification Using Quadric Error Metrics. SIGGRAPH ’97 Conference Proceedings, 1997
[10] HOPPE H, DEROSE T, DUCHAMP T, MCDONALD J, and STUETZLE W. Mesh Optimization. SIGGRAPH ’93 Conference Proceedings, 1993.
[11] MELAX S. A Simple, Fast, and Effective Polygon Reduction Algorithm. Game Developer, 1998
* Supported by Natural Science Foundation of China Under Grant No.60673005, 60573019(国家自然基金), Natural Science Foundation of Guangdong under Grant No.05006540 (广东省自然基金)
作者简介: 梁成(1985-),女,广西桂林人,研究生,主要研究领域为数字几何处理;张嘉华(1984-),男,广东广州人,研究生,主要研究领域为GPU计算与真实感图形;李桂清(1966-),男,广西桂林人,副教授,主要研究领域为数字几何处理;李琳(1984-),女,湖南邵阳人,研究生,主要研究领域为数字几何处理与三维动画