姚春雨,彭桂輝,段夢琦
(中煤航測遙感集團有限公司技術發展研究院,西安 710199)
城市地下管網是城市基礎設施的重要組成部分,是確保城市經濟、社會健康發展的重要物質基礎[1]。隨著經濟的發展,城市規模越來越大,城市地下管網的規劃和建設越來越受到社會各方面的重視。地下管網建設的高速發展,導致各類管線如蛛網般的分布于地下空間,構成了縱橫交錯的地下管網空間體系。獲取和管理地下管網的數據信息,能為城市基礎建設提供必要的地下數據信息資料,可以避免地下管線事故,保證城市建設和城市發展的正常進行[2]。
隨著管網種類的日益增多,管網數據量的快速增長,傳統的地下管網信息系統越來越不能滿足地下管線數據信息處理。且傳統地下管網信息系統多是二維的,在可視化、交互性、及空間查詢分析等方面和三維的系統相比存在很大的劣勢。因此地下管網的三維建模和調度渲染就顯得尤其重要,也成為“智慧城市”建設一個不可或缺的方向[3-4]。
國內外針對城市地下管網三維建模及調度渲染的研究比較多,由于城市地下管網結構復雜、種類繁多、數據量龐大,給管網的三維建模及調度渲染帶來了一些難題[5-7]。目前主流的解決方案是管網建模和渲染調度分別處理的策略。即對二維矢量管網數據進行三維建模,輸出建模后的三維模型數據,然后對三維模型數據進行組織渲染調度。這種策略存在以下缺點:①二維數據生成三維模型數據是一步必需的步驟,使二維數據的三維渲染增加了一步處理流程。②二維數據生成三維模型之后導致數據量成幾何級的急劇增加,增加數據占用空間。③數據量的增加勢必增加輸入輸出流(I/O)的壓力,導致數據加載時數據量的傳輸增大,影響渲染幀率。本文針對以上缺點,提出了一種地下管網三維模型實時生成及調度渲染方法。該方法不預先生成地下管網三維模型,將二維管線數據直接實時生成三維管線模型進行渲染,減少了管線可視化的處理流程;規避了二維數據生成三維模型導致的數據量增加的問題;提高了渲染效率。
地下管網種類多,數據量大,范圍廣,將地下管網數據一次性調入內存全部渲染顯示是不現實的,尤其是在三維場景中渲染三維管線模型需要占用計算機資源更多。本文提出了一種地下管線特征四叉樹索引構建和根據視點實時調度地下管線數據的方法。
四叉樹是屬于基于空間劃分組織索引結構的一類索引機制,其數據存儲結構為層次樹狀結構,由于其查詢效率較高,目前在三維數字城市方面應用較為廣泛[8-9]。其基本思想為:將三維數字城市所處范圍四等分,得到4個相連接的空間范圍,然后分別再對這4個空間范圍繼續四等分,每個空間又分別到4個相連接的空間范圍。以此類推直至達到四叉樹要求最大層數或者子節點的外接包圍盒小于要求的最小外接包圍盒,結束四等分。然后將空間模型對象根據外接包圍盒信息插入到四叉樹中。
傳統的四叉樹構建方法可以解決模型查詢效率的問題,可以根據模型的地理位置快速檢索到模型,但沒有考慮到地下管網模型的復雜性。尤其在三維數字城市渲染層面,系統除了渲染地下管線之外,還要渲染地上三維建筑模型、地形地貌數據模型、其他二維矢量數據等,三維系統的渲染壓力較大。為了降低三維系統的渲染壓力,本文提出了一種基于權重的四叉樹索引構建方法。
地下管線數據分為管線數據和管點數據,數據格式為access數據庫表mdb格式,包括管線數據表和管點數據表,在地下管網數據四叉樹索引構建的時候同樣分為管點數據和管線數據分別考慮。本文中管點數據和管線數據結構如表1、表2所示。管點

表1 管點數據結構

表2 管線數據結構
數據為管線數據的連接點,若管點沒有附屬設施一般為拐點、三通四通等結構,所占的空間范圍比較小,因此可以在距視點較近的距離再加載,若管點存在附屬設施如檢修井、閥門井、供電箱、控制柜等,所占空間范圍較大,需要在距視點較遠的距離加載。管線數據為線狀數據,是管點與管點之間的連接線。因為其往往占據的地理距離較長,因此也需要較早地加載。
為了讓重要的地下管網模型被更早加載,以及擁有更遠的可視距離,我們將不同的地下管網模型設置不同權重。權重設置可以根據管網的附屬設施類型、地理位置、外接包圍盒、頂點數量、紋理數量及大小等方面依據不同權重配比按照一定的規則打出該模型的權重,然后將模型渲染重要性等級劃分為低級、中級、高級、頂級等4個等級。除了自動計算模型權重以外,如果有需要也可以人工制定某些模型的權重。模型的渲染等級劃分并不是一成不變的,可以根據場景的具體情況具體制定。但本文所制定的低級渲染等級,一般是體積較小、頂點數量小、紋理簡單的城市部件,該等級模型一般為在距離視點一定距離最先被卸載的一類模型,同時也是最晚被加載的一類模型。頂級渲染模型一般是極其重要的管網模型,需要在整個場景大部分時間都是加載狀態的模型。
基于權重的管網模型四叉樹構建步驟如圖1所示:①計算出能夠包含所有管網的外接包圍盒,或者人工指定所需的外接包圍盒,將其作為四叉樹根節點的外接包圍盒。②遍歷所有地下管點數據,將根節點作為當前所需插入的節點,檢測管點和當前節點的子節點的外接包圍盒的拓撲關系,若管點在某個子節點內,則將該子節點設為當前節點,重復檢測管點和當前節點的子節點的外接包圍盒的拓撲關系,直到子節點外接包圍盒小于規定值或者層數大于規定值。③遍歷所有地下管網模型模型,計算模型外接包圍盒和渲染等級。將根節點作為當前所需插入的節點,模型的渲染等級為頂級直接將模型加入根節點,否則檢測模型外接包圍盒和當前節點的子節點外接包圍盒的拓撲關系。若模型外接包圍盒與子節點外接包圍盒相交并且模型的渲染等級為低級及中級,將模型加入當前節點,若模型外接包圍盒與子節點外接包圍盒相交并且模型的渲染等級為高級且當前節點存在父節點,將模型加入當前節點的父節點,否則加入當然節點。如果模型在某個子節點內,則將該子節點設為當前節點。

圖1 基于權重的地下管網四叉樹構建流程
本文提出的基于權重的地下管網四叉樹索引構建方法,能在三維數字城市渲染時對管網數據快速檢索,減輕內存和顯卡的負擔,同時又考慮了地下管網數據和普通城市三維模型的不同點,為三維數字城市渲染調度提供了底層支持。

圖2 基于權重的管網模型調度流程
空間數據調度就是確定在什么時間采用什么方式調入還是調出空間數據的一個過程。在開源的OpenSceneGraph(osg)中,基于動態調度技術對一些類進行了設計與封裝,在一定程度上滿足了三維海量數據模型動態調度的需要。但是對于海量的城市地下管網數據,單純地利用OSG分頁數據庫技術,會導致場景節點樹的過度龐大,導致場景更新時遍歷場景樹效率較低,甚至發生系統崩潰的問題。本文采用第1節中建成的地下管網四叉樹索引,提出了一種考慮地下管網特征的地下管網動態調度算法。整個過程如下:①整個場景需要更新時,根據第1節建立的基于模型權重的空間四叉樹結構和當前視點位置做模型揀選,取小于當前視點距離一定值的所有最底層四叉樹節點及其所對應的所有上層節點,取得所有四叉樹節點包含的模型數據做為當前可見的模型子集M。②將子集M里每個模型實體作為一個分頁細節層次節點(PagedLOD)加入到系統場景樹中。若模型渲染權重為中等設置精細模型中模粗模的可見距離分別為L、L1、L2;若模型渲染權重為低級設置精細模型中模粗模的可見距離分別為L/2、L1/2、L2/2;若模型渲染權重為高級設置精細模型中模粗模的可見距離分別為2L、2L1、2L2;若模型渲染權重為頂級設置精細模型中模粗模的可見距離分別為4L、4L1、4L2。③遍歷模型子集M模型判斷模型權重和當前視點距離。若該模型滿足加載精模或中模條件并沒有加載頂點數據則加載精模頂點和紋理數據,若已存在頂點數據則只加載紋理數據,同時將該模型頂點數據標記為已加載,若滿足加載粗模條件則加載粗模數據。
三維管網的自動生成分為管線自動生成和管點自動生成。
本文采用多邊形折線逼近法構建三維管線,即用足夠多的直線段表示模型的棱邊,用平面表示模型表面的方法。在管網二維數據中,管線一般以實際管線中心線來表示,一段管線為一條直線,管段之間以管點連接;而在三維場景中,管線用圓柱面表示,中心線即為圓柱面的軸心,截面半徑為圓柱面半徑[10-12]。
一段管線中心線由起始點和終止點2個管點數據組成,這2個點與管線半徑可以確定一條三維管線。現假設有2個管點Pt1和Pt2,管線半徑為R,可按照如下步驟生成一段三維管線模型:①計算出以Pt1,Pt2為法線,經過Pt1的平面M1,經過Pt2的平面M2;②分別在M1、M2內以Pt1、Pt2為圓心,管線半徑為半徑做圓C1和C2。③在C1中每隔一定角度(本文為1°)計算出一個特征點,并依次存儲在數據Array1中。同理C2中計算出特征點存儲在Array2中。④分別依次從數組Array1和數組Array2中取2個點,4個點可以構成一個矩形。遍歷整個數據,就可獲得所有矩形模擬管線。
管點三維模型是多種類型不同規格的管點的三維模型的集合,是管網三維建模的關鍵。本文總結不同規格管點的特征,為了管點的三維自動建模,本文將管點分為兩類:一類是不含附屬結構的普通連接點,如拐點、三通、四通等;另一類是含有附屬結構的管點,如消防栓、人孔井、排污閥、路燈、操作柜等。
不含附屬結構的管點為管線段之間的連接點,因此管點可以看做是和其連接的各個管線方向上一定長度的圓柱求交所產生的幾何體,為了防止裂縫的出現在各個管線放線的終點添加球體求交之后的最終結果。具體步驟如下:①獲取該管點連接的所有管線,并計算出各個管線的向量。②從該管點開始沿各個管線方向一定長度(本文為2倍管徑)計算出創建三維管點所需要延伸長度之后的點坐標。③利用管線自動生成算法生成相應的管線。④在自動生成管線的兩端分別生成半徑等于管徑的球體,將所有幾何體求交得出管點三維模型。
含附屬結構的管點本文采用預設管點模型庫方式進行建模,圖3分別展示了管線自動建模效果、管點(三通)自動建模效果、管點管線自動渲染效果。

圖3 管網模型效果圖
基于本文的研究,開發了一套管網二三維管理系統,該系統在二維管網信息系統的基礎上利用三維可視化技術,融合高清航攝影像DOM、數字地面高程DEM、精細三維模型Model,旨在以直觀地、投入式地、可互動地、全方位地展示管網建設現狀,利用科學手段將地下管網實景通過軟件的方式真實地呈現出來,為管網規劃以及市政管理提供輔助決策功能,減少因信息交互不及時造成的損失。
為了驗證本文算法的可行性,本文選取西京醫院做測試。西京醫院數據包含了地上建筑和地形數據DEM、DOM及地下管線數據。其中醫院管線長度105.428 km,管線點個數12 053個。采集紋理數據量30 GB,5 669幅真實照片,建立各類地上精細模型562個。圖4為西京醫院管網渲染圖。

圖4 地面透明后地下管網渲染圖
本文測試用機為普通PC用機,其配置參數為:CPU為Intel(R)Core(TM)i5-3470,4核3.20 GHz;內存為8 GB;顯卡為NVIDIA GeForce GTX 960;顯存為2 GB;操作系統為WIN7 64位操作系統。
三維應用程序的效率可以用幀率來衡量,幀率表示系統在處理場景時每秒鐘可繪制的次數。幀率越高說明繪制效果更流暢。一般來說三維應用幀率在25左右是可以接受的。由于本文的算法設計在場景移動時會實時生成新的管線和管點模型,故場景移動和靜止時的幀率略有不同,本文將同時測試場景移動和靜止時的幀率。三維數字城市中有的地方建筑物密集,有的地方建筑物稀少,在相同的條件下2個區域的渲染壓力也是截然不同的。本文在進行實驗的時候將分為3種區域進行測試:模型密集區域、模型中等區域、模型稀疏區域。其中每幀渲染面片數超過400萬的劃為密集區域,200萬到300萬的劃為中等區域。低于200萬的劃為稀疏區域。最終測試結果如表3所示,表3中所列幀率為每種區域及狀態下取樣20次求取的平均幀率。

表3 西京醫院數據幀率統計
從表3中可以看出,系統的幀率在較為稀疏的地方渲染沒有任何壓力,任何情況下都可以保持在50以上幀率。在中等密集的地方幀率降到30以上,渲染也沒有壓力。當在城市三維模型較為密集的地方,系統在場景靜止和移動的時候幀率的差距開始拉大,當場景在移動的時候幀率平均比靜止的降低了4,但是幀率仍能保持在25幀以上。通過上述測試可以看出本文提出的算法可以很好地實時生成和渲染地下管網,使系統維持在25幀率以上。
本文考慮了地下管網的特點,提出了一套更加適應地下管網的數據索引方法和渲染調度算法,可以更高效地對地下管網數據實現可視化,并且不用提前生成地下管網三維模型。通過實驗證明本文提出的算法是可行高效的調度渲染方法。
但是由于本文實時生成算法需要大量的計算,尤其是在場景移動時,巨大的計算量導致場景幀率下降。下一步的研究方向應該是如何優化自動化生成算法,降低計算量。或原本通過CPU實現的算法,改為通過GPU編程重新實現,達到更好的可視化效果。