姚春雨,彭桂輝,段夢琦
(中煤航測遙感集團有限公司技術(shù)發(fā)展研究院,西安 710199)
城市地下管網(wǎng)是城市基礎(chǔ)設(shè)施的重要組成部分,是確保城市經(jīng)濟、社會健康發(fā)展的重要物質(zhì)基礎(chǔ)[1]。隨著經(jīng)濟的發(fā)展,城市規(guī)模越來越大,城市地下管網(wǎng)的規(guī)劃和建設(shè)越來越受到社會各方面的重視。地下管網(wǎng)建設(shè)的高速發(fā)展,導(dǎo)致各類管線如蛛網(wǎng)般的分布于地下空間,構(gòu)成了縱橫交錯的地下管網(wǎng)空間體系。獲取和管理地下管網(wǎng)的數(shù)據(jù)信息,能為城市基礎(chǔ)建設(shè)提供必要的地下數(shù)據(jù)信息資料,可以避免地下管線事故,保證城市建設(shè)和城市發(fā)展的正常進行[2]。
隨著管網(wǎng)種類的日益增多,管網(wǎng)數(shù)據(jù)量的快速增長,傳統(tǒng)的地下管網(wǎng)信息系統(tǒng)越來越不能滿足地下管線數(shù)據(jù)信息處理。且傳統(tǒng)地下管網(wǎng)信息系統(tǒng)多是二維的,在可視化、交互性、及空間查詢分析等方面和三維的系統(tǒng)相比存在很大的劣勢。因此地下管網(wǎng)的三維建模和調(diào)度渲染就顯得尤其重要,也成為“智慧城市”建設(shè)一個不可或缺的方向[3-4]。
國內(nèi)外針對城市地下管網(wǎng)三維建模及調(diào)度渲染的研究比較多,由于城市地下管網(wǎng)結(jié)構(gòu)復(fù)雜、種類繁多、數(shù)據(jù)量龐大,給管網(wǎng)的三維建模及調(diào)度渲染帶來了一些難題[5-7]。目前主流的解決方案是管網(wǎng)建模和渲染調(diào)度分別處理的策略。即對二維矢量管網(wǎng)數(shù)據(jù)進行三維建模,輸出建模后的三維模型數(shù)據(jù),然后對三維模型數(shù)據(jù)進行組織渲染調(diào)度。這種策略存在以下缺點:①二維數(shù)據(jù)生成三維模型數(shù)據(jù)是一步必需的步驟,使二維數(shù)據(jù)的三維渲染增加了一步處理流程。②二維數(shù)據(jù)生成三維模型之后導(dǎo)致數(shù)據(jù)量成幾何級的急劇增加,增加數(shù)據(jù)占用空間。③數(shù)據(jù)量的增加勢必增加輸入輸出流(I/O)的壓力,導(dǎo)致數(shù)據(jù)加載時數(shù)據(jù)量的傳輸增大,影響渲染幀率。本文針對以上缺點,提出了一種地下管網(wǎng)三維模型實時生成及調(diào)度渲染方法。該方法不預(yù)先生成地下管網(wǎng)三維模型,將二維管線數(shù)據(jù)直接實時生成三維管線模型進行渲染,減少了管線可視化的處理流程;規(guī)避了二維數(shù)據(jù)生成三維模型導(dǎo)致的數(shù)據(jù)量增加的問題;提高了渲染效率。
地下管網(wǎng)種類多,數(shù)據(jù)量大,范圍廣,將地下管網(wǎng)數(shù)據(jù)一次性調(diào)入內(nèi)存全部渲染顯示是不現(xiàn)實的,尤其是在三維場景中渲染三維管線模型需要占用計算機資源更多。本文提出了一種地下管線特征四叉樹索引構(gòu)建和根據(jù)視點實時調(diào)度地下管線數(shù)據(jù)的方法。
四叉樹是屬于基于空間劃分組織索引結(jié)構(gòu)的一類索引機制,其數(shù)據(jù)存儲結(jié)構(gòu)為層次樹狀結(jié)構(gòu),由于其查詢效率較高,目前在三維數(shù)字城市方面應(yīng)用較為廣泛[8-9]。其基本思想為:將三維數(shù)字城市所處范圍四等分,得到4個相連接的空間范圍,然后分別再對這4個空間范圍繼續(xù)四等分,每個空間又分別到4個相連接的空間范圍。以此類推直至達到四叉樹要求最大層數(shù)或者子節(jié)點的外接包圍盒小于要求的最小外接包圍盒,結(jié)束四等分。然后將空間模型對象根據(jù)外接包圍盒信息插入到四叉樹中。
傳統(tǒng)的四叉樹構(gòu)建方法可以解決模型查詢效率的問題,可以根據(jù)模型的地理位置快速檢索到模型,但沒有考慮到地下管網(wǎng)模型的復(fù)雜性。尤其在三維數(shù)字城市渲染層面,系統(tǒng)除了渲染地下管線之外,還要渲染地上三維建筑模型、地形地貌數(shù)據(jù)模型、其他二維矢量數(shù)據(jù)等,三維系統(tǒng)的渲染壓力較大。為了降低三維系統(tǒng)的渲染壓力,本文提出了一種基于權(quán)重的四叉樹索引構(gòu)建方法。
地下管線數(shù)據(jù)分為管線數(shù)據(jù)和管點數(shù)據(jù),數(shù)據(jù)格式為access數(shù)據(jù)庫表mdb格式,包括管線數(shù)據(jù)表和管點數(shù)據(jù)表,在地下管網(wǎng)數(shù)據(jù)四叉樹索引構(gòu)建的時候同樣分為管點數(shù)據(jù)和管線數(shù)據(jù)分別考慮。本文中管點數(shù)據(jù)和管線數(shù)據(jù)結(jié)構(gòu)如表1、表2所示。管點
表1 管點數(shù)據(jù)結(jié)構(gòu)
表2 管線數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)為管線數(shù)據(jù)的連接點,若管點沒有附屬設(shè)施一般為拐點、三通四通等結(jié)構(gòu),所占的空間范圍比較小,因此可以在距視點較近的距離再加載,若管點存在附屬設(shè)施如檢修井、閥門井、供電箱、控制柜等,所占空間范圍較大,需要在距視點較遠的距離加載。管線數(shù)據(jù)為線狀數(shù)據(jù),是管點與管點之間的連接線。因為其往往占據(jù)的地理距離較長,因此也需要較早地加載。
為了讓重要的地下管網(wǎng)模型被更早加載,以及擁有更遠的可視距離,我們將不同的地下管網(wǎng)模型設(shè)置不同權(quán)重。權(quán)重設(shè)置可以根據(jù)管網(wǎng)的附屬設(shè)施類型、地理位置、外接包圍盒、頂點數(shù)量、紋理數(shù)量及大小等方面依據(jù)不同權(quán)重配比按照一定的規(guī)則打出該模型的權(quán)重,然后將模型渲染重要性等級劃分為低級、中級、高級、頂級等4個等級。除了自動計算模型權(quán)重以外,如果有需要也可以人工制定某些模型的權(quán)重。模型的渲染等級劃分并不是一成不變的,可以根據(jù)場景的具體情況具體制定。但本文所制定的低級渲染等級,一般是體積較小、頂點數(shù)量小、紋理簡單的城市部件,該等級模型一般為在距離視點一定距離最先被卸載的一類模型,同時也是最晚被加載的一類模型。頂級渲染模型一般是極其重要的管網(wǎng)模型,需要在整個場景大部分時間都是加載狀態(tài)的模型。
基于權(quán)重的管網(wǎng)模型四叉樹構(gòu)建步驟如圖1所示:①計算出能夠包含所有管網(wǎng)的外接包圍盒,或者人工指定所需的外接包圍盒,將其作為四叉樹根節(jié)點的外接包圍盒。②遍歷所有地下管點數(shù)據(jù),將根節(jié)點作為當(dāng)前所需插入的節(jié)點,檢測管點和當(dāng)前節(jié)點的子節(jié)點的外接包圍盒的拓撲關(guān)系,若管點在某個子節(jié)點內(nèi),則將該子節(jié)點設(shè)為當(dāng)前節(jié)點,重復(fù)檢測管點和當(dāng)前節(jié)點的子節(jié)點的外接包圍盒的拓撲關(guān)系,直到子節(jié)點外接包圍盒小于規(guī)定值或者層數(shù)大于規(guī)定值。③遍歷所有地下管網(wǎng)模型模型,計算模型外接包圍盒和渲染等級。將根節(jié)點作為當(dāng)前所需插入的節(jié)點,模型的渲染等級為頂級直接將模型加入根節(jié)點,否則檢測模型外接包圍盒和當(dāng)前節(jié)點的子節(jié)點外接包圍盒的拓撲關(guān)系。若模型外接包圍盒與子節(jié)點外接包圍盒相交并且模型的渲染等級為低級及中級,將模型加入當(dāng)前節(jié)點,若模型外接包圍盒與子節(jié)點外接包圍盒相交并且模型的渲染等級為高級且當(dāng)前節(jié)點存在父節(jié)點,將模型加入當(dāng)前節(jié)點的父節(jié)點,否則加入當(dāng)然節(jié)點。如果模型在某個子節(jié)點內(nèi),則將該子節(jié)點設(shè)為當(dāng)前節(jié)點。
圖1 基于權(quán)重的地下管網(wǎng)四叉樹構(gòu)建流程
本文提出的基于權(quán)重的地下管網(wǎng)四叉樹索引構(gòu)建方法,能在三維數(shù)字城市渲染時對管網(wǎng)數(shù)據(jù)快速檢索,減輕內(nèi)存和顯卡的負擔(dān),同時又考慮了地下管網(wǎng)數(shù)據(jù)和普通城市三維模型的不同點,為三維數(shù)字城市渲染調(diào)度提供了底層支持。
圖2 基于權(quán)重的管網(wǎng)模型調(diào)度流程
空間數(shù)據(jù)調(diào)度就是確定在什么時間采用什么方式調(diào)入還是調(diào)出空間數(shù)據(jù)的一個過程。在開源的OpenSceneGraph(osg)中,基于動態(tài)調(diào)度技術(shù)對一些類進行了設(shè)計與封裝,在一定程度上滿足了三維海量數(shù)據(jù)模型動態(tài)調(diào)度的需要。但是對于海量的城市地下管網(wǎng)數(shù)據(jù),單純地利用OSG分頁數(shù)據(jù)庫技術(shù),會導(dǎo)致場景節(jié)點樹的過度龐大,導(dǎo)致場景更新時遍歷場景樹效率較低,甚至發(fā)生系統(tǒng)崩潰的問題。本文采用第1節(jié)中建成的地下管網(wǎng)四叉樹索引,提出了一種考慮地下管網(wǎng)特征的地下管網(wǎng)動態(tài)調(diào)度算法。整個過程如下:①整個場景需要更新時,根據(jù)第1節(jié)建立的基于模型權(quán)重的空間四叉樹結(jié)構(gòu)和當(dāng)前視點位置做模型揀選,取小于當(dāng)前視點距離一定值的所有最底層四叉樹節(jié)點及其所對應(yīng)的所有上層節(jié)點,取得所有四叉樹節(jié)點包含的模型數(shù)據(jù)做為當(dāng)前可見的模型子集M。②將子集M里每個模型實體作為一個分頁細節(jié)層次節(jié)點(PagedLOD)加入到系統(tǒng)場景樹中。若模型渲染權(quán)重為中等設(shè)置精細模型中模粗模的可見距離分別為L、L1、L2;若模型渲染權(quán)重為低級設(shè)置精細模型中模粗模的可見距離分別為L/2、L1/2、L2/2;若模型渲染權(quán)重為高級設(shè)置精細模型中模粗模的可見距離分別為2L、2L1、2L2;若模型渲染權(quán)重為頂級設(shè)置精細模型中模粗模的可見距離分別為4L、4L1、4L2。③遍歷模型子集M模型判斷模型權(quán)重和當(dāng)前視點距離。若該模型滿足加載精?;蛑心l件并沒有加載頂點數(shù)據(jù)則加載精模頂點和紋理數(shù)據(jù),若已存在頂點數(shù)據(jù)則只加載紋理數(shù)據(jù),同時將該模型頂點數(shù)據(jù)標(biāo)記為已加載,若滿足加載粗模條件則加載粗模數(shù)據(jù)。
三維管網(wǎng)的自動生成分為管線自動生成和管點自動生成。
本文采用多邊形折線逼近法構(gòu)建三維管線,即用足夠多的直線段表示模型的棱邊,用平面表示模型表面的方法。在管網(wǎng)二維數(shù)據(jù)中,管線一般以實際管線中心線來表示,一段管線為一條直線,管段之間以管點連接;而在三維場景中,管線用圓柱面表示,中心線即為圓柱面的軸心,截面半徑為圓柱面半徑[10-12]。
一段管線中心線由起始點和終止點2個管點數(shù)據(jù)組成,這2個點與管線半徑可以確定一條三維管線?,F(xiàn)假設(shè)有2個管點Pt1和Pt2,管線半徑為R,可按照如下步驟生成一段三維管線模型:①計算出以Pt1,Pt2為法線,經(jīng)過Pt1的平面M1,經(jīng)過Pt2的平面M2;②分別在M1、M2內(nèi)以Pt1、Pt2為圓心,管線半徑為半徑做圓C1和C2。③在C1中每隔一定角度(本文為1°)計算出一個特征點,并依次存儲在數(shù)據(jù)Array1中。同理C2中計算出特征點存儲在Array2中。④分別依次從數(shù)組Array1和數(shù)組Array2中取2個點,4個點可以構(gòu)成一個矩形。遍歷整個數(shù)據(jù),就可獲得所有矩形模擬管線。
管點三維模型是多種類型不同規(guī)格的管點的三維模型的集合,是管網(wǎng)三維建模的關(guān)鍵。本文總結(jié)不同規(guī)格管點的特征,為了管點的三維自動建模,本文將管點分為兩類:一類是不含附屬結(jié)構(gòu)的普通連接點,如拐點、三通、四通等;另一類是含有附屬結(jié)構(gòu)的管點,如消防栓、人孔井、排污閥、路燈、操作柜等。
不含附屬結(jié)構(gòu)的管點為管線段之間的連接點,因此管點可以看做是和其連接的各個管線方向上一定長度的圓柱求交所產(chǎn)生的幾何體,為了防止裂縫的出現(xiàn)在各個管線放線的終點添加球體求交之后的最終結(jié)果。具體步驟如下:①獲取該管點連接的所有管線,并計算出各個管線的向量。②從該管點開始沿各個管線方向一定長度(本文為2倍管徑)計算出創(chuàng)建三維管點所需要延伸長度之后的點坐標(biāo)。③利用管線自動生成算法生成相應(yīng)的管線。④在自動生成管線的兩端分別生成半徑等于管徑的球體,將所有幾何體求交得出管點三維模型。
含附屬結(jié)構(gòu)的管點本文采用預(yù)設(shè)管點模型庫方式進行建模,圖3分別展示了管線自動建模效果、管點(三通)自動建模效果、管點管線自動渲染效果。
圖3 管網(wǎng)模型效果圖
基于本文的研究,開發(fā)了一套管網(wǎng)二三維管理系統(tǒng),該系統(tǒng)在二維管網(wǎng)信息系統(tǒng)的基礎(chǔ)上利用三維可視化技術(shù),融合高清航攝影像DOM、數(shù)字地面高程DEM、精細三維模型Model,旨在以直觀地、投入式地、可互動地、全方位地展示管網(wǎng)建設(shè)現(xiàn)狀,利用科學(xué)手段將地下管網(wǎng)實景通過軟件的方式真實地呈現(xiàn)出來,為管網(wǎng)規(guī)劃以及市政管理提供輔助決策功能,減少因信息交互不及時造成的損失。
為了驗證本文算法的可行性,本文選取西京醫(yī)院做測試。西京醫(yī)院數(shù)據(jù)包含了地上建筑和地形數(shù)據(jù)DEM、DOM及地下管線數(shù)據(jù)。其中醫(yī)院管線長度105.428 km,管線點個數(shù)12 053個。采集紋理數(shù)據(jù)量30 GB,5 669幅真實照片,建立各類地上精細模型562個。圖4為西京醫(yī)院管網(wǎng)渲染圖。
圖4 地面透明后地下管網(wǎng)渲染圖
本文測試用機為普通PC用機,其配置參數(shù)為:CPU為Intel(R)Core(TM)i5-3470,4核3.20 GHz;內(nèi)存為8 GB;顯卡為NVIDIA GeForce GTX 960;顯存為2 GB;操作系統(tǒng)為WIN7 64位操作系統(tǒng)。
三維應(yīng)用程序的效率可以用幀率來衡量,幀率表示系統(tǒng)在處理場景時每秒鐘可繪制的次數(shù)。幀率越高說明繪制效果更流暢。一般來說三維應(yīng)用幀率在25左右是可以接受的。由于本文的算法設(shè)計在場景移動時會實時生成新的管線和管點模型,故場景移動和靜止時的幀率略有不同,本文將同時測試場景移動和靜止時的幀率。三維數(shù)字城市中有的地方建筑物密集,有的地方建筑物稀少,在相同的條件下2個區(qū)域的渲染壓力也是截然不同的。本文在進行實驗的時候?qū)⒎譃?種區(qū)域進行測試:模型密集區(qū)域、模型中等區(qū)域、模型稀疏區(qū)域。其中每幀渲染面片數(shù)超過400萬的劃為密集區(qū)域,200萬到300萬的劃為中等區(qū)域。低于200萬的劃為稀疏區(qū)域。最終測試結(jié)果如表3所示,表3中所列幀率為每種區(qū)域及狀態(tài)下取樣20次求取的平均幀率。
表3 西京醫(yī)院數(shù)據(jù)幀率統(tǒng)計
從表3中可以看出,系統(tǒng)的幀率在較為稀疏的地方渲染沒有任何壓力,任何情況下都可以保持在50以上幀率。在中等密集的地方幀率降到30以上,渲染也沒有壓力。當(dāng)在城市三維模型較為密集的地方,系統(tǒng)在場景靜止和移動的時候幀率的差距開始拉大,當(dāng)場景在移動的時候幀率平均比靜止的降低了4,但是幀率仍能保持在25幀以上。通過上述測試可以看出本文提出的算法可以很好地實時生成和渲染地下管網(wǎng),使系統(tǒng)維持在25幀率以上。
本文考慮了地下管網(wǎng)的特點,提出了一套更加適應(yīng)地下管網(wǎng)的數(shù)據(jù)索引方法和渲染調(diào)度算法,可以更高效地對地下管網(wǎng)數(shù)據(jù)實現(xiàn)可視化,并且不用提前生成地下管網(wǎng)三維模型。通過實驗證明本文提出的算法是可行高效的調(diào)度渲染方法。
但是由于本文實時生成算法需要大量的計算,尤其是在場景移動時,巨大的計算量導(dǎo)致場景幀率下降。下一步的研究方向應(yīng)該是如何優(yōu)化自動化生成算法,降低計算量?;蛟就ㄟ^CPU實現(xiàn)的算法,改為通過GPU編程重新實現(xiàn),達到更好的可視化效果。