劉 磊,馬勁松,劉 凱,沈 潔
(1.南京大學 地理與海洋科學學院,江蘇 南京 210046;2.南京師范大學 地理科學學院,江蘇 南京210046)
CityEngine三維建筑模型的簡化算法研究
劉 磊1,馬勁松1,劉 凱1,沈 潔2
(1.南京大學 地理與海洋科學學院,江蘇 南京 210046;2.南京師范大學 地理科學學院,江蘇 南京210046)

分析CityEngine的使用規則,為批量構建三維城市建筑模型,從模型的墻體、屋頂和紋理3個方面進行分類。探討了實現多分辨率三維數字城市的技術方法,通過使用最小特征面平移算法實現對CityEngine三維模型的簡化。
CityEngine;三維模型;簡化;綜合
近年來,三維數字城市的建設發展迅速,已能將三維城市景觀很好地展示在屏幕上,但三維場景的大數據量給可視化造成很大的負擔[1]。因此,國內外學者對三維數字城市建筑模型的綜合作過很多研究。三維建筑模型綜合是二維建筑物的綜合方法和技術在三維空間中的擴展,內容廣泛[2]。武芳等分析了三維建筑模型的分類和識別,探討了取舍、化簡、概括和位移等二維綜合的基本方法[3]。在三維建筑物綜合中,建筑物的簡化是一個重要問題。葛磊等提出了基于最小特征的面平移算法[4];Andrea Forberg提出三維建筑矢量數據的綜合方法,集合數學形態學和曲率空間的優點,使綜合過程變得更快、更簡便[5]。 Ribelles等提出將多余要素與建筑主體分離并刪除,然后填洞的三維建筑簡化算法[6]。ESRI的CityEngine三維城市建模系統發展迅速,它可以利用二維數據快速創建大量的三維場景,并能高效地進行規劃設計,應用廣泛。嘗試將CityEngine建立的城市建筑模型進行綜合,以實現不同空間細節層次的三維城市模型。
1.1 基于CityEngine的城市三維建筑建模
1)CityEngine的功能。CityEngine能將測繪所得建筑平面數據快速建成三維建筑模型。它支持多種GIS數據格式,如ESRI Shapefile、KML等;可支持多種3D格式的數據輸出,如Collada、DXF以及3DS等。
2)CityEngine三維建模特點。CityEngine建模的最大特點是基于規則的建模,通過總結建筑物的共性和特性來編寫CGA(computer generated architecture)規則文件。共性是指一般建筑物的大體結構,如墻體、屋頂等的分區;特性是指各個建筑物所具有的不同屬性,如樓房高度、屋頂樣式等。
1.2 三維模型的簡化
城市建筑模型的形態類型。將測繪所得的房屋地籍數據作為三維建模的二維基礎數據(圖1a),經過CityEngine三維建模的結果如圖1b。本文從2個方面來探討我國常規城市建筑的形態分類。

圖1 CityEngine建模效果
首先是根據墻體分類。可將平面圖形成的墻體大致分為以下3類:墻體無凸凹(圖2a),墻體一面有凸凹(圖2b),2面都凸凹(圖2c),三維效果如圖3。

圖2 墻體分類的二維效果
其次是根據屋頂分類。我國現有城市建筑的屋頂樣式可歸類為以下3種: 尖頂(圖4a),斜坡頂(圖4b),平頂(圖4c)。

圖4 建筑屋頂分類
1.3 模型簡化方法
通過CityEngine建立的三維數字城市模型包括三角面構成的平面和紋理貼圖,所以本文的簡化內容包括平面細節簡化、紋理刪除等。模型平面的簡化包括墻面簡化、屋頂簡化以及外部附屬物簡化。本文主要討論墻面和屋頂的簡化。
墻面凹凸結構的簡化是兩兩比較墻面所在平面,通過2平面與模型中心點的比較判定2平面的相對位置來識別凹凸結構,并通過2平面面積大小來判斷平面平移方向,從而達到簡化墻面的作用。此過程主要使用了最小特征面平移算法。
屋頂的簡化首先通過先驗知識(墻體垂直地面)識別墻面,通過與墻體所在平面的夾角來識別屋頂面,從而區分出墻面點和屋頂點。最后平移屋頂點至屋頂面與地面平行,達到屋頂面的簡化效果。此過程使用了點平移算法。
2.1 模型文件的結構、輸入輸出
CityEngine通過輸入二維GIS數據,采用編寫的CGA規則文件進行三維建模。本文選用3DS作為數據輸出格式,存儲模型的幾何信息和材質信息。幾何信息主要包括頂點的數目、每個頂點的坐標、三角面數目、每個三角面上3個頂點的索引。三維建筑簡化的操作對象主要是模型的幾何信息。
2.2 模型的簡化算法實現
根據CityEngine所建立的3D模型進行墻面和屋頂的簡化,如圖5。

圖5 三維模型簡化流程圖
2.3 構造平面算法
建筑物模型的表面由平面構成,所有的簡化處理操作都是以平面為單位,但3DS模型都是由三角面構成的(如圖6),所以首先需要將三角面組成平面[7],根據法向量共向和面面共點這2個必要條件,組合在同一個平面上的三角面形成一個完整的平面。法向量可由式(1)獲取,法向量共向可用它們之間的夾角的余弦值為0來判定,如式(2)。通過式(3)和式(4)獲取三角面和平面的面積特征值。

圖6 三角面構成三維模型

式中,P1、P2、P3表示平面上任意3點,通過式(1)計算得到平面的法向量Normal1。

式中,Normal1、Normal2表示2平面的法向量,表示2平面之間的夾角。

式中,A、B、C為三角面的三邊邊長;P=(A+B+C)/ 2;S表示三角面面積。

式中,SΔi表示構成平面的第i個三角面的面積;S平面表示平面面積。
2.4 墻面凹凸判斷方法
建筑物墻面凹凸主要依據建筑物中心到平面的距離大小來判定。具體判斷算法如下:
2)將平面兩兩比較,如果2平面法向量方向相同,則進行步驟3),否則比較另外2組平面。
3)判斷2個平面是否在中心點的同一側,如果在,則進行步驟4),否則比較另外2組平面。
4)計算2個平面的平面方程。任取平面內4個點,根據ax+by+cz+d=0建立方程組計算出a、b、c、d的值,從而計算出平面方程。
5)通過式(5)分別計算中心到2平面的距離,具有相對較小距離的平面為凹面,相對較大距離的面為凸面,如圖7。

式中,a、b、c、d為平面方程的參數;x,y,z為中心點的三維坐標值。

圖7 墻面凹凸
2.5 面平移算法
面平移算法的原理是通過平移平面的點來消除建筑物模型細節信息,包括墻面凹凸、外部附屬物、屋頂等。首先對墻面和外部附屬物進行簡化的算法如下:
1) 兩兩比較平面,若2個平面的法向量同向,則進行步驟2),否則比較下一組平面。
2)分別計算中心點到2平面的投影,通過中心點與投影點的方向判定2個平面是否在中心點的同一側。如果在同一側,則進行步驟3),否則比較另外2組平面[8]。
3)獲取并比較2平面的面積S,用式(6)計算2平面的距離,如圖8a紅色部分。如果V于等于整個模型的體積V總的1/3,則進行步驟4),否則比較下一組平面。

4) 將小面積平面的所有點朝著大面積平面的方向平移距離D,從而使得2平面共面,如圖8b。

圖8 墻面簡化
屋頂的識別與處理步驟如下:
1)首先遍歷所有平面,通過判斷平面是否垂直地面判斷出模型的墻面(圖9的灰色部分)。
2)遍歷兩兩平面之間的夾角,當夾角不等于90°且不為墻面(圖9深色部分)時,判定平面為屋頂面(圖9淺色部分)。
3)遍歷屋頂面所有點,若點是屋頂面和墻面公共點,則判定為墻面點,否則為屋頂點。
4)向地面方向平移屋頂點,直至各屋頂面共面,完成屋頂簡化。

圖9 屋頂簡化
3.1 三維模型的讀取和顯示
本文使用CityEngine建立的三維數字城市模型導出為3DS數據結構,在VisualStudio 2012平臺上使用C++語言對三維模型讀取點、面、紋理信息后,使用OpenGL對模型進行三維顯示。
3.2 三維模型簡化效果
三維模型的簡化效果主要有2方面的內容:模型細節簡化,如圖10;數據量減少,如表1。

圖10 簡化效果

表1 三維模型簡化數據量減少情況
使用CityEngine建立三維城市模型,分析模型結構特點和三維模型存儲結構,探討三維數字城市模型綜合基本方法,并在此基礎上討論此方法對CityEngine建立的三維數字城市模型進行綜合的可行性。本文選擇其中的簡化方法進行實驗,使用面平移算法實現了對三維數字城市模型的簡化。從三維模型形狀上分析,模型的凹凸結構、紋理、屋頂樣式等都得到了有效簡化,從數據量上實現了三維模型的點面數據量減少。同時,此簡化算法仍存在一定的局限性,如在進行屋頂簡化時,由于使用了點向下平移方法,導致整個建筑物的高度降低,這與實際不符。但從整體簡化結果來看,面平移算法和點平移算法能很好地實現CityEngine 3D模型的簡化。參考文獻
[1] 周艷,朱慶,黃鐸,等.三維城市模型中建筑物LOD模型研究[J].測繪科學,2006,31(5):74-77
[2] 王慶國,朱慶,艾廷華,等.建筑物三維表面模型簡化算法探討[J].測繪科學,2007,32(2):84-86
[3] 葛磊,武芳,朱強,等.三維建筑綜合基本方法的探討[J].測繪信息與工程,2009,34(2):15-17
[4] 葛磊,武芳,王鵬波,等.3維建筑綜合中基于最小特征的面平移算法[J].測繪科學技術學報,2009,26(2):103-105
[5] Forberg A,Mayer H.Scalecale-Space Events for the Generalization of 3D-Building Data[C].Amsterdam,2000
[6] Ribelles J,Heckbertps.Finding and Removing Features from Polyhedra[C].Detc’01 Asme Design Engineering Technical Conferences,2001
[7] 楊姣,李光,羅守華,等.基于近平面合并的三角網格簡化算法[J].軟件,2011,32(5):14-17
[8] 曹菡,陳軍.方向關系與距離關系的定性描述與推理[J].西安石油學院學報:自然科學版,2001,16(1):68-72
P208
B
1672-4623(2016)04-0010-03
10.3969/j.issn.1672-4623.2016.04.004
劉磊,碩士,主要研究方向是GIS應用與二次開發。
2015-03-06。
項目來源:國家自然科學基金資助項目(41371433,41071288)。