袁占全,李明益
(1.中交第二航務工程勘察設計院有限公司,湖北 武漢430071;2.中交(蘇州)城市開發建設有限公司,江蘇 蘇州215000)
近年隨著計算機三維渲染技術的發展,對三維場景實時渲染和可視化漫游技術的應用需求日益增加,特別是在工程建筑行業,因為BIM技術發展,BIM成果展現要求三維渲染的效果更加逼真、精美。目前市場主流解決方案是采用三維GIS平臺與Unity 3D兩種方式搭建三維漫游系統,但存在多源數據、大數據量與場景渲染效果不能兼得問題[1]。三維GIS平臺可以承載大數據量BIM+GIS模型,但其渲染效果不夠逼真精美;游戲引擎Unity 3D雖然三維渲染效果炫酷,但無法承載多源GIS數據、大面積地形和影像、精細BIM模型數據。而航道工程分布廣,對大體量數據加載、三維水面渲染與漫游效果都有非常高的要求。為此,筆者提出基于BIM+GIS的航道三維漫游系統,重點解決航道工程大體量多源三維數據、三維場景渲染與漫游效果不能兼得的問題,助力BIM+GIS三維技術在航道工程行業的應用。
依托長江干線武漢—安慶段航道6 m水深航道整治工程項目,根據航道工程空間分布特征和航道BIM模型特點,基于Unity 3D開發BIM+GIS的航道三維漫游系統,解決航道工程大體量三維數據、三維場景渲染與漫游效果不能兼得問題。技術路線見圖1,研究內容主要包括:

圖1 技術路線
1)解決Unity加載GIS數據技術問題,同時采用自動化插件對BIM模型進行輕量化處理,減少人工減面的工作量;
2)根據航道工程空間分布特征提出“分區動態數據組織管理”+LOD三維動態渲染相結合技術;
3)基于Unity 3D游戲引擎設計實現手動漫游控制和自動飛行漫游功能。
用BIM模型詳盡描述一棟建筑物或者構筑物的外在和內在構造將涉及大量的建筑細節,所以一般情況下BIM模型的體量較大[2-3]。模型輕量化的核心思想在于盡量保持模型原狀態下減少構成物體的三角形的數量。
輕量化傳統技術路線是在3DMAX軟件中進行人工減面處理,其工作量非常大,消耗大量人力物力。Unity 3D 的MeshSimplify插件中包含多種輕量化的算法,其核心算法也是平面擬合原理,最大特點是可以遍歷父物體下的所有子物體,然后分析每個子物體的構成,繼而針對性地進行輕量化處理。MeshSimplify 插件是一款開源的插件,如果某些算法不適用于當前的模型,可以繼承源碼的類之后進行修改。一般情況下直接使用該插件即可,在需要輕量化模型導入插件,設置簡化百分比即可,效果如圖2所示。

圖2 模型自動化處理對比
圖2a)展示未進行輕量化的三角形構成及分布情況,圖2b)展示對其進行0.8倍輕量化后三角形的構成,圖2c)展示對其進行0.5倍量化后三角形的構成。通過這3組不同程度輕量化的模型對比可知,在模型容量變小的同時,航道BIM模型基本保持原模型的形態特征,滿足實際航道工程應用的需要。
2.2.1加載柵格數據
1)地形數據在GlobalMapper等GIS軟件進行處理,并導出DEM文件;
2)DEM導入3DMAX生成實體模型,加載影像進行貼圖,同時優化數據紋理色彩等;
3)將處理好的模型導出實體模型.FBX,在Unity 3D中利用MeshSimplify插件對數據進行輕量化處理,然后加載到三維場景中。
加載柵格數據流程見圖3。

圖3 Unity 3D加載柵格數據(DEM、DOM)
2.2.2加載矢量數據
1)將關鍵數據(SHP)利用GIS軟件轉化為帶有地理信息Geojson的數據格式;
2)在Unity 3D中讀取Geojson格式數據,并進行數據渲染。
長江干線武漢—安慶段上起天興洲長江大橋、下迄安慶皖河口,全長約386.5 km,工程主要針對湖廣—羅湖洲、沙洲、戴家洲、鯉魚山、張家洲、馬當東流等7個礙航段進行系統整治,其中建設護灘帶28道、壩體5道、高灘守護15.4 km、護岸加固13.3 km、基建疏浚477萬m3及生態建設工程(圖4)。該工程的BIM模型、高程、影像、矢量數據等GIS數據體量非常大,對三維數據在Unity引擎中加載與渲染提出巨大挑戰。

圖4 長江武安段航道整治工程分布
航道工程是開拓航道和改善航道航行條件的工程。項目實地調研結果表明,航道工程空間分布特征主要為跨度大、點狀分布、多點線性,總體沿長江沿岸進行相關工程建設(圖5)。

圖5 長江武漢段某區域整治工程平面位置分布
對于航道工程大場景數據而言,任何計算機一次性加載和渲染數據性能都會出現卡頓,因此要盡可能采用分區域數據組織調度技術。將一個區域分解成多個區域,一般是根據實際場景大小靈活分區,圖6為某航道工程分區。

圖6 航道工程平面分區
將整個航道區域數據按照有、無航道工程區域以及單個區域大小分割成若干小區域,依據“動態導入、動態調用、動態卸載”原則將進入視野區域的數據導入,視野外區域數據則不導入,當已經導入區域數據在視野之外時,則對數據進行卸載,保證計算機實時加載數據量上限,達到節省資源的目的。
對于復雜數據場景來說,多的不僅是地形數據和BIM模型數據,場景中的文字、樹、船等小品分布也較多,因此僅采用區域分塊調度技術還無法達到最好的實時狀態。因此對已加載模型數據通過LOD(細節層次,levels of detail)技術進行渲染。其根據模型數據離視點距離來動態判定模型渲染的精細度,對于近處物體展示細節,對于遠處物體只展示其外輪廓,從而節省計算機資源,效果如圖7所示。

圖7 某航道區域三維場景
手動控制漫游是使用者通過手動操作鍵盤和鼠標來瀏覽三維場景,實現對三維場景的縮放、旋轉、平移等功能,靈活控制場景的視角[4]。手動控制漫游一旦接受到相應的控制命令就立即響應,相機空間位置改變,瀏覽到相應場景,整個過程中場景不發生交互,只移動相機方位。
手動控制漫游實現步驟如下:
1)開啟手動漫游腳本后,首先設置好控制方式:鍵盤控制,鼠標控制,同時控制,是否開啟旋轉控制、移動控制等;
2)接收用戶輸入的控制信息,傳遞到函數Get Input Translation Direction中(圖8),返回對應的移動方向;

圖8 自動漫游控制函數
3)得到移動方向后,計算出移動距離,移動相機到相應位置。
場景的自動漫游不需要用戶進行控制。其設計思想:首先確定漫游視點,每個漫游視點對應一個漫游時間,表示相機漫游到該視點所需要的時間,第1個視點對應的漫游時間為0,最后1個視點對應的漫游時間為整段漫游總時間。將視點依次連接形成一條完整的路徑,并根據采集視點進行內插,得到一條完整平滑連續的路徑就是相機的漫游路徑,當開啟自動漫游功能后,相機沿著該路徑在規定時間完成自動漫游[5]。
4.2.1設置漫游路徑
在自動漫游過程中路徑的設置主要包括關鍵漫游點的設置和根據關鍵節點內插成漫游路徑(圖9)。用戶在三維場景內選取關鍵漫游點,并在該漫游點設置文本、圖片、視頻等內容狀態,通過內插方式獲得整條路徑的三維點集,為自動漫游提供數據。

圖9 路徑設置步驟
飛行路徑的插值計算步驟如下:
1)獲取路徑相鄰兩個關鍵點平面坐標;
2)根據相鄰兩點的距離和平滑指數,內插出兩點間其他二維平面坐標;
3)從起始點至終點循環該過程,得到整條路徑所有二維平面點集;
4)根據已有相鄰點高程,采用距離比例法計算高度值H。
一般插值方法有折線法和樣條曲線法。由于折線法容易出現場景跳動,漫游效果較差,所以本文采用樣條曲線插值法,用樣條函數計算插值點。
4.2.2自動漫游飛行
自動飛行主要通過定時器來實現。漫游開始后定時器根據已經設定好的路徑點集在設置時間執行相應指令,并繪制渲染當前相機位置的姿態。當讀取到的漫游點數據包含數據內容時,定時器會自動獲取所設置的內容,并根據內容狀態設置顯示和隱藏,從而達到動態內容效果,保證整個漫游過程不間斷、不跳幀、不跳躍連續的自動飛行漫游效果(圖10)。

圖10 自動漫游效果
1)根據航道工程跨度大、點狀分布、多點線性空間分布特性,提出分區數據組織調度技術,將廣域航道工程分成若干區域,區域之間依據“動態加載、動態渲染、動態卸載”原則進行動態調度,降低計算機實時處理數據量,解決航道工程大體量數據加載問題。
2)對單一區域模型數據通過MeshSimplify插件對模型進行輕量化處理,減少數據的體量,對比傳統人工手動減面大大較少工作量、節省工作時間;在Unity 3D實時渲染過程中采用LOD技術動態渲染數據,利用Geojson格式數據對SHP數據進行加載與解析,解決Unity 3D加載大體量BIM+GIS數據渲染不流暢、卡頓問題。
3)基于Unity 3D二次開發手動控制漫游功能,同時利用3次樣條函數設置飛行路徑,開發自動飛行漫游功能,最終實現航道工程BIM+GIS三維數據加載渲染和高質量、高逼真漫游效果兼得。
4)開發的漫游系統在長江武漢—安慶段6 m水深航道整治工程中得到應用,在信息溝通交流和對外宣傳展示均起到較好的作用,對BIM+GIS技術在航道工程中的推廣應用具有重要意義。