陳國軍,滕一諾,宋華婷,姜 朕,隋曉燕
( 中國石油大學(xué)(華東) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山東 青島 266580)
傳統(tǒng)上基于客戶端的可視化應(yīng)用存在著諸多限制,越來越難以滿足用戶的需求,各行各業(yè)開始著力研究Web3D的可視化應(yīng)用[1],隧道工程涉及專業(yè)多,對其施工管理的Web可視化提出了新的挑戰(zhàn)和思路。文獻(xiàn)[2-3]將隧道BIM模型通過簡化及復(fù)用等輕量化技術(shù)進(jìn)行處理,結(jié)合WebGL渲染引擎開發(fā)隧道運(yùn)營管理系統(tǒng),實(shí)現(xiàn)模型快速加載及流暢漫游等功能。文獻(xiàn)[4-5]研究了隧道參數(shù)化快速建模的方法,采用Revit進(jìn)行IFC標(biāo)準(zhǔn)的隧道族構(gòu)件庫的建立,實(shí)現(xiàn)了隧道BIM模型在Web端顯示與部分信息集成。文獻(xiàn)[6-7]在實(shí)現(xiàn)隧道模型在Web端可視化的基礎(chǔ)之上,通過獲取隧道內(nèi)全景貼圖,將隧道病害展示圖轉(zhuǎn)換為三維空間紋理,建立了基于Web的隧道養(yǎng)護(hù)管理階段的可視化應(yīng)用。由于隧道模型復(fù)雜,數(shù)據(jù)量大,以上研究對隧道Web端可視化應(yīng)用主要停留在模型3D展示的階段。
為實(shí)現(xiàn)隧道施工過程4D可視化,從兩個方面進(jìn)行研究:(1)通過對隧道場景參數(shù)化建模研究,建立隧道BIM基礎(chǔ)數(shù)據(jù)模型,并基于Shader的布爾運(yùn)算完成隧道合成場景的碰撞處理,結(jié)合施工數(shù)據(jù)實(shí)現(xiàn)隧道施工過程可視化;(2)通過對本地緩存機(jī)制的研究,實(shí)現(xiàn)本地緩存數(shù)據(jù)庫和服務(wù)器端數(shù)據(jù)庫的協(xié)同存儲以及場景動態(tài)調(diào)度策略,提高繪制效率,達(dá)到實(shí)時繪制的效果。
隧道參數(shù)化模型的建立是實(shí)現(xiàn)隧道可視化的基礎(chǔ)和關(guān)鍵[8]。基于BIM建模及應(yīng)用的要求,根據(jù)隧道洞身結(jié)構(gòu)特點(diǎn)提出基于橫斷面序列的參數(shù)化建模的方法,將施工數(shù)據(jù)集成到參數(shù)模型上可生成隧道施工進(jìn)度模型,在可視化階段模擬隧道施工過程。
根據(jù)隧道三心圓斷面結(jié)構(gòu)進(jìn)行初始橫斷面參數(shù)化定義,如圖1所示。令隧道中心線O點(diǎn)為三維坐標(biāo)原點(diǎn),橫斷面圖形在xoy平面上,根據(jù)斷面設(shè)計(jì)參數(shù),輪廓線上每一點(diǎn)位置都可用坐標(biāo)來表示。以拱頂段為例,已知此段圓弧的圓心坐標(biāo)為(0,d,0),半徑為R1,弧上坐標(biāo)計(jì)算公式如式(1)。其中α根據(jù)圓弧離散化程度和對應(yīng)圓心角確定。
(1)
圖1 隧道內(nèi)輪廓設(shè)計(jì)圖
沿隧道中心線的方向,將初始斷面移動到每個隧道中心樁號對應(yīng)的位置,每移動一次得到下一個斷面,最終形成斷面序列。初始斷面移動的過程就是將斷面進(jìn)行相應(yīng)的平移、旋轉(zhuǎn)等幾何變換。隧道的斷面垂直于相鄰中心樁號坐標(biāo)之間的連線,變換過程可分解為先繞y軸旋轉(zhuǎn)再平移到對應(yīng)中心樁號位置處。
假設(shè)橫斷面上某一點(diǎn)坐標(biāo)為s(sx,sy,sz),變換后坐標(biāo)為t(tx,ty,tz),旋轉(zhuǎn)矩陣為Ry,平移矩陣為T,中心樁坐標(biāo)為v(vx,vy,vz),將初始面坐標(biāo)s轉(zhuǎn)變成齊次坐標(biāo)s1,變換后坐標(biāo)t轉(zhuǎn)變成齊次坐標(biāo)t1,可根據(jù)公式(2)計(jì)算變換后坐標(biāo)。
t1=T×Ry×S1
(2)
由于初始橫斷面在xoy平面上定義,因此中心樁坐標(biāo)即為對應(yīng)偏移量,其中平移矩陣T定義為公式(3)。設(shè)繞y軸旋轉(zhuǎn)角度為θ,可得旋轉(zhuǎn)矩陣如式(4),其中θ值由式(5)計(jì)算得到。
(3)
(4)
(5)
在橫斷面序列實(shí)例化之后,連接相鄰橫斷面上坐標(biāo)生成隧道竣工模型。相鄰兩個斷面之間按端點(diǎn)的順序依次連接,統(tǒng)一成三角形表示,如圖2所示。
圖2 隧道三角網(wǎng)線框圖
在隧道的竣工模型基礎(chǔ)上構(gòu)造隧道施工模型。根據(jù)隧道施工工序,將施工進(jìn)度分為掘進(jìn)、初襯、二襯支護(hù)、二襯完成等施工階段[9]。根據(jù)施工數(shù)據(jù)將隧道按施工進(jìn)度分段,對于每段隧道確定起止樁號位置,如果起止點(diǎn)位于兩橫斷面之間則需要進(jìn)行插值獲得該橫斷面位置,再將起止位置之間的橫斷面數(shù)據(jù)順序連接得到洞身進(jìn)度模型。施工進(jìn)程通過隧道內(nèi)壁紋理變化來展現(xiàn),繪制時根據(jù)進(jìn)度情況綁定相關(guān)參數(shù)啟用對應(yīng)紋理貼圖,展示符合隧道真實(shí)施工場景的隧道模型。
隧道地形場景多為山地,采用不規(guī)則三角形格網(wǎng)(triangulated irregular net,TIN)進(jìn)行地形建模。TIN用互不重疊的三角形上的各頂點(diǎn)作為數(shù)據(jù)點(diǎn),用大量三角形表示地形表面[10]。根據(jù)公路設(shè)計(jì)樁號對地形進(jìn)行分段處理,場景碰撞處理時可以快速定位到對應(yīng)的地形三角面片,繪制時也可以實(shí)現(xiàn)基于視點(diǎn)的動態(tài)調(diào)度。
在隧道場景中,地形和隧道模型分離建模,然后將建立好的隧道模型集成到地形場景中,在合成過程中會遇到模型之間交叉碰撞的問題。隧道屬于隱蔽的地下工程,在地形表面之下繪制,因此處理隧道場景碰撞問題的關(guān)鍵是隧道洞口處與地形坡面的融合[11]。以往的地形地物融合算法在前期需要復(fù)雜的幾何布爾運(yùn)算過程[12-13],因計(jì)算存在誤差,影響算法穩(wěn)定性。文中采用基于Shader的布爾運(yùn)算解決隧道與地形間的碰撞問題,降低了計(jì)算復(fù)雜度,并且應(yīng)用GPU并行運(yùn)算[14],在時間上具有更好的性能。該方法有兩個步驟:
(1)地形裁剪。將洞口模型空間輪廓投影到地形平面后得到洞口邊界多邊形,其與地形網(wǎng)格的關(guān)系如圖3所示,陰影部分即為待裁剪多邊形。采用Shader進(jìn)行多邊形裁剪,需要在地形繪制時利用Fragment Shader判斷像素點(diǎn)與邊界多邊形位置關(guān)系。
圖3 地形裁剪示意圖
根據(jù)點(diǎn)與多邊形位置判斷的方法,假設(shè)判定點(diǎn)為V,多邊形四個頂點(diǎn)順時針為A、B、D、C,得到有向向量AV、BV、DV、CV、AB、BD、DC、CA,根據(jù)公式(6)計(jì)算向量積。若a、b、d、c同號,判定該點(diǎn)在多邊形內(nèi)部,繪制時舍棄;反之不作處理,將該點(diǎn)輸出。
(6)
(2)裂縫修補(bǔ)。裁剪掉隧道上方的地形會造成地形和出入口模型之間有一個高度差,因此還需對裁剪形成的模型與地形之間的裂縫進(jìn)行修補(bǔ),如圖4所示。
圖4 洞口裂縫示意圖
具體實(shí)現(xiàn)過程如下:
首先確定邊界多邊形頂點(diǎn)對應(yīng)地面坐標(biāo)。洞口邊界多邊形的某個頂點(diǎn)在xoy平面上坐標(biāo)為pi(xi,yi),假設(shè)三角形頂點(diǎn)是P1、P2、P3,任意三角形內(nèi)部的點(diǎn)P可以用公式(7)表示。
(7)
其中,c1和c2滿足:0≤c1≤1,0≤c2≤1,0≤(c1+c2)≤1。
將頂點(diǎn)pi代入公式(7)得到c1和c2,遍歷此段地形三角網(wǎng),若符合所屬范圍,則頂點(diǎn)位于該地形三角形投影內(nèi)部。將該點(diǎn)映射回地形三角形計(jì)算真實(shí)高程,得到對應(yīng)三維坐標(biāo)。然后通過地形三角形和洞口邊界多邊形坐標(biāo)數(shù)據(jù),計(jì)算兩者在二維平面上的交點(diǎn)。多邊形某邊的兩端點(diǎn)與地形三角形某邊的兩端點(diǎn)分別用參數(shù)方程表示,聯(lián)立求得多邊形與地形三角形的交點(diǎn)。將交點(diǎn)還原到洞口邊界和地形三角形邊界上插值求得對應(yīng)的三維坐標(biāo)。
最后對地形修正,將同一投影點(diǎn)對應(yīng)邊界多邊形與地形三角形三維坐標(biāo)按參數(shù)大小順序生成三角形作為修補(bǔ)地形三角形,繪制時與地形結(jié)合實(shí)現(xiàn)裂縫修補(bǔ)。隧道洞口碰撞處理前后效果如圖5所示。圖5(a)表示融合前洞口與地形存在重疊遮擋,圖5(b)表示地形裁剪后與洞口之間存在裂縫,修補(bǔ)后洞口與地形無融合,如圖5(c)所示。
圖5 隧道洞口融合效果圖
隧道場景繪制所需數(shù)據(jù)量大,每次都從服務(wù)器端讀取數(shù)據(jù)必然造成時間和資源浪費(fèi),影響繪制速度。通過本地緩存數(shù)據(jù)庫與服務(wù)器數(shù)據(jù)庫的協(xié)同存儲并結(jié)合基于視點(diǎn)的動態(tài)調(diào)度策略,實(shí)現(xiàn)快速、高質(zhì)量的交互。本地存儲的空間大,會被瀏覽器原生支持,不用依賴任何第三方插件,其中Indexed DB索引數(shù)據(jù)庫技術(shù)既可以用于持久化的本地緩存又能夠?qū)崿F(xiàn)大量的結(jié)構(gòu)化數(shù)據(jù)存儲,并且使用索引高效率搜索數(shù)據(jù)[15]。
本地緩存的工作流程如圖6所示,初始化繪制頁面后,獲取當(dāng)前視點(diǎn)位置,并計(jì)算視點(diǎn)對應(yīng)樁號,確定視點(diǎn)參數(shù)。向數(shù)據(jù)庫發(fā)行打開請求。如果數(shù)據(jù)庫存在,打開該數(shù)據(jù)庫,直接執(zhí)行數(shù)據(jù)訪問,取數(shù)據(jù)并進(jìn)行繪制。如果數(shù)據(jù)庫不存在,自動新建數(shù)據(jù)庫進(jìn)行更新操作,此時需要訪問服務(wù)器取出設(shè)計(jì)參數(shù)和施工數(shù)據(jù),根據(jù)參數(shù)化建模方法計(jì)算出隧道和地形模型數(shù)據(jù),與施工數(shù)據(jù)一并存入IndexedDB數(shù)據(jù)庫中,繪制時從緩存中加載,并根據(jù)視點(diǎn)坐標(biāo)將當(dāng)前視點(diǎn)覆蓋范圍內(nèi)場景模型進(jìn)行繪制。通過本地?cái)?shù)據(jù)庫與服務(wù)器數(shù)據(jù)庫的協(xié)同工作,減少頁面加載時間,提高訪問效率和繪制速度,實(shí)現(xiàn)場景模型的實(shí)時繪制。
圖6 本地緩存工作流程
首次繪制時新建四個對象倉庫,分別存儲隧道數(shù)據(jù)、地形坐標(biāo)數(shù)據(jù)及施工數(shù)據(jù)。
隧道數(shù)據(jù)由屬性和模型數(shù)據(jù)組成。隧道集合由若干個隧道實(shí)體組成,每一個隧道離散化為連續(xù)的橫斷面序列,斷面上坐標(biāo)按逆時針順序排列。按此層次結(jié)構(gòu)得出模型數(shù)據(jù)的設(shè)計(jì)如表1所示。Tunnelid是區(qū)分隧道實(shí)體的標(biāo)志。每個隧道由左右線兩個模型組成,其中0代表右線,1代表左線。Section為自定義對象,存儲橫斷面位置及坐標(biāo)數(shù)據(jù)。屬性數(shù)據(jù)設(shè)計(jì)如表2,由隧道名、id、起止樁號組成。
表1 隧道模型數(shù)據(jù)設(shè)計(jì)
表2 隧道屬性數(shù)據(jù)設(shè)計(jì)
地形數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表3所示,通過分段的方式組織數(shù)據(jù),包括段號、地形三角形個數(shù)、起止樁號以及地形坐標(biāo)。施工數(shù)據(jù)設(shè)計(jì)如表4,包含日期、隧道id、施工進(jìn)度、施工長度。
表3 地形模型數(shù)據(jù)設(shè)計(jì)
表4 施工數(shù)據(jù)設(shè)計(jì)
隨著隧道場景規(guī)模的不斷擴(kuò)大,逐漸形成大規(guī)模數(shù)據(jù)時,計(jì)算和繪制的負(fù)荷也越來越大,必然影響到場景的繪制速度,無法滿足實(shí)時要求。通過減少系統(tǒng)一次性處理的數(shù)據(jù)量,最大可能地利用系統(tǒng)資源,提高繪制效率[16]。采取基于視點(diǎn)的場景動態(tài)調(diào)度策略,流程見圖7。
圖7 動態(tài)調(diào)度流程
數(shù)據(jù)動態(tài)調(diào)度的效率和數(shù)據(jù)可視化的繪制效果都與數(shù)據(jù)組織有著密切的關(guān)系。預(yù)處理階段主要對數(shù)據(jù)組織進(jìn)行處理,在參數(shù)化建模和緩存數(shù)據(jù)庫設(shè)計(jì)時依據(jù)分塊思想對數(shù)據(jù)進(jìn)行組織和存儲,沿地形延伸方向按樁號將其分割為一系列間隔為200米的連續(xù)地形段。在視點(diǎn)移動時,視點(diǎn)位置以及視線方向決定了場景顯示區(qū)域,場景跟隨運(yùn)動視點(diǎn)發(fā)生改變。在實(shí)時繪制過程中,根據(jù)場景中視點(diǎn)投影位置坐標(biāo)計(jì)算對應(yīng)樁號,并確定地形及隧道的視點(diǎn)調(diào)度參數(shù),將緩存數(shù)據(jù)庫中數(shù)據(jù)加載到網(wǎng)頁,并遍歷每段地形及隧道起止樁號確定繪制場景模型范圍,返回隧道ID和地形索引。根據(jù)頁面返回的施工日期到本地?cái)?shù)據(jù)庫中查詢當(dāng)前隧道施工數(shù)據(jù)讀取到頁面。將施工數(shù)據(jù)與隧道模型數(shù)據(jù)相結(jié)合計(jì)算出當(dāng)前視點(diǎn)范圍隧道的進(jìn)度模型數(shù)據(jù),包括坐標(biāo)數(shù)據(jù)、法向量及紋理坐標(biāo),同時將相應(yīng)地形塊的坐標(biāo)數(shù)據(jù)一起存儲到緩沖區(qū),實(shí)現(xiàn)隧道場景基于視點(diǎn)的實(shí)時繪制。
采用客戶端設(shè)備的實(shí)驗(yàn)平臺為Intel(R) Xeon(R) CPU E5-162,主頻3.70 GHz,系統(tǒng)內(nèi)存16 GB,顯卡為NVIDIA Quadro K2000,顯卡內(nèi)存為2 GB,操作系統(tǒng)為Windows 10,系統(tǒng)開發(fā)平臺采用的開發(fā)工具為HBuilderX,瀏覽器版本為Chrome 49.0 x64。本地局域網(wǎng)測試服務(wù)器為一臺PC設(shè)備,同時在阿里云服務(wù)器上搭建了服務(wù),用來測試遠(yuǎn)程服務(wù)器的加載速度。
系統(tǒng)使用Three.js渲染引擎進(jìn)行開發(fā)。Three.js是利用JavaScript編寫的WebGL框架,用簡單直觀的方式封裝了WebGL常用方法,可以很好實(shí)現(xiàn)Web3D的繪制、渲染及動畫[17]。
實(shí)驗(yàn)數(shù)據(jù)來源于山西省祁縣到離石高速公路第四合同段施工數(shù)據(jù),起止樁號為K24320-K28608,全長4.28公里。包含北峪口隧道、西域口1號隧道和西域口2號隧道,長度分別為0.3公里,0.48公里,1.34公里,地形數(shù)據(jù)量為2.55 M,約8萬個三角形坐標(biāo)數(shù)據(jù),分段間隔為200米。無人機(jī)航拍圖像27.6 M,用作地表紋理。
在系統(tǒng)性能方面,針對實(shí)時渲染的幀率,借助stat.js監(jiān)控施工模擬過程的FPS信息,除剛開始時的系統(tǒng)讀取服務(wù)器上文件數(shù)據(jù)并進(jìn)行計(jì)算的初始化時間外,整個仿真過程中,畫面每秒傳輸幀數(shù)均大于30,保證了仿真系統(tǒng)的穩(wěn)定性和流暢性。
針對系統(tǒng)響應(yīng)時間,使用Chrome瀏覽器開發(fā)者工具Network分別對在遠(yuǎn)程服務(wù)器、本地服務(wù)器端數(shù)據(jù)庫以及本地緩存IndexedDB數(shù)據(jù)庫的情況下的系統(tǒng)響應(yīng)時間進(jìn)行測試,結(jié)果如表5所示。從IndexedDB數(shù)據(jù)庫讀取數(shù)據(jù)進(jìn)行繪制大大減少了等待服務(wù)器響應(yīng)和資源下載的時間,從而提高了繪制響應(yīng)效率,達(dá)到了實(shí)時繪制效果。
表5 響應(yīng)時間測試對比
系統(tǒng)根據(jù)施工數(shù)據(jù)模擬當(dāng)前隧道的施工進(jìn)程,最終施工階段可視化渲染效果如圖8所示。其中圖8(a)表示隧道初襯階段施工完畢,圖8(b)表示隧道二襯鋪設(shè)防水板,圖8(c)表示隧道二襯架立鋼筋網(wǎng),圖8(d)表示隧道二襯復(fù)噴混凝土。
圖8 隧道施工過程效果圖
通過對實(shí)現(xiàn)基于Web的施工可視化關(guān)鍵技術(shù)進(jìn)行研究,建立了基于橫斷面序列的隧道參數(shù)化模型,該模型可進(jìn)一步結(jié)合施工數(shù)據(jù),生成隧道進(jìn)度模型。提出了基于Shader的三角網(wǎng)布爾運(yùn)算實(shí)現(xiàn)隧道場景的碰撞處理,算法利用GPU多核進(jìn)行并行處理,提高了計(jì)算效率。采用客戶端緩存機(jī)制實(shí)現(xiàn)本地?cái)?shù)據(jù)緩存和基于視點(diǎn)的動態(tài)調(diào)度,有效提高了系統(tǒng)的響應(yīng)效率,實(shí)現(xiàn)實(shí)時繪制。系統(tǒng)運(yùn)行流暢,效果良好,支持用戶的便捷訪問,對于隧道施工三維場景在瀏覽器端的模擬實(shí)現(xiàn),具有一定的實(shí)際應(yīng)用價值。