曹樹明
(中交天津航道局有限公司,天津300000)
隨著我國水利工程建設(shè)的發(fā)展, 越來越多的水利工程進入運行管理階段, 運行階段的大壩管理及監(jiān)測資料分析對大壩安全評價至關(guān)重要。 傳統(tǒng)的監(jiān)測多是基于監(jiān)測儀器采集數(shù)據(jù), 只是在采集數(shù)據(jù)階段實現(xiàn)自動化, 但是在數(shù)據(jù)展示階段缺少網(wǎng)頁端高維度的信息可視化研究。隨著信息技術(shù)的發(fā)展,支持瀏覽器顯示三維模型的WebGL (Web Graphic library)為人們所了解并為許多行業(yè)所應(yīng)用,王晶[1]利用WebGL技術(shù)實現(xiàn)橋梁監(jiān)測信息可視化并解決了不同人員信息協(xié)同的問題;李志鵬[2]通過WebGL實現(xiàn)橋梁模型與監(jiān)測數(shù)據(jù)的關(guān)聯(lián), 但模型文件解析和渲染過程較復(fù)雜;高喆[3]將WebGL技術(shù)結(jié)合BIM模型實現(xiàn)建筑模型展示。 因此本文同樣采用WebGL技術(shù)實現(xiàn)水利工程監(jiān)測信息三維數(shù)據(jù)模型展示。
Web端渲染模型一般是以WebGL技術(shù)作為繪圖協(xié)議, 因此本文將對WebGL模型渲染原理進行學(xué)習(xí)研究以便將三維模型更高質(zhì)量地在Web端繪制出來。首先WebGL是以單個坐標(biāo)點為基礎(chǔ)渲染單位的,因此需先從模型數(shù)據(jù)文件中獲得三維圖形頂點坐標(biāo),將其暫存到顯存中方便GPU快速讀??;讀取完所有的點坐標(biāo)之后, 需由頂點著色器進行圖元裝配即將點坐標(biāo)生成三角形,單個三角形被稱為圖元,數(shù)據(jù)點是圖元的基礎(chǔ),圖元是三維模型的基礎(chǔ),不論多么復(fù)雜的三維模型都是由一個個基本的三角形組成;接下來需要光柵化即進行模型顏色渲染, 圖元組裝完成后由片元著色器通過對點坐標(biāo)的顏色、 燈光等的計算,對整個三角形進行插值渲染,完成由點到面到體的模型顏色渲染。
一個三維模型可視化項目通常包含網(wǎng)頁文件(HTML)、 樣 式 文 件 (CSS)、JavaScript 腳 本 文 件、WebGL著色器(Shader)代碼和數(shù)據(jù)模型文件。 內(nèi)置了WebGL協(xié)議的瀏覽器, 通過JavaScript腳本調(diào)用WebGL代碼接口讀取模型文件并執(zhí)行Shader代碼實現(xiàn)三維模型繪制及逼真顯示,圖1為詳細的WebGL渲染模型流程圖。
圖1 WebGL技術(shù)流程
Twgl.js 是一個微型的WebGL 助手庫, 實現(xiàn)對WebGL API的封裝,不再需要關(guān)注WebGL底層實現(xiàn)的原理,專注于本專業(yè)內(nèi)的數(shù)據(jù)處理,使用起來更方便。Twgl.js提供了很多數(shù)據(jù)場顯示的實例,官方文檔十分詳盡,數(shù)據(jù)接口等相當(dāng)完備,對于初學(xué)者而言十分便捷。 因此本文基于此技術(shù)工具實現(xiàn)三維可視化。
本文基于某重力壩工程,本工程為一等大(1)型工程,主要建筑物為1級建筑物,次要建筑物為3級建筑物。 壩高103m,底部高程1211m,庫區(qū)內(nèi)總體庫容4.9億m3,上、下水庫擋水壩,下水庫泄水建筑物,以及電站廠房及其他附屬建筑物的設(shè)計洪水標(biāo)準(zhǔn)為200年一遇,校核洪水標(biāo)準(zhǔn)為1000年一遇。
電站總裝機容量1200MW,4臺機組, 單機容量300MW。 電站建成后在系統(tǒng)中將承擔(dān)調(diào)峰、填谷、調(diào)頻、 調(diào)相和事故備用任務(wù)。 樞紐建筑物主要由上水庫、輸水系統(tǒng)、地下廠房系統(tǒng)、下水庫、泄洪建筑物和地面開關(guān)站等組成。
本工程地震基本烈度為Ⅶ度,上、下水庫大壩抗震設(shè)防類別為甲類, 按基準(zhǔn)期100年超越概率2%進行設(shè)計,相應(yīng)的基巖峰值加速度為195.4gal;按基準(zhǔn)期100年超越概率1%進行校核, 相應(yīng)的基巖峰值加速度為386gal。
由于該實際工程為一等大(1)工程,運行過程中一旦發(fā)生事故后果不堪設(shè)想, 所以大壩的正常運行至關(guān)重要。監(jiān)測數(shù)據(jù)是對運行狀態(tài)的一種直觀反映,大壩的橫河向位移、順河向位移、縱向位移、滲流等監(jiān)測量是大壩運行狀態(tài)監(jiān)測的依據(jù), 但監(jiān)測儀器只能記錄下來某個高程的監(jiān)測數(shù)據(jù), 但要反應(yīng)到整個壩體模型上就要對監(jiān)測獲得的數(shù)據(jù)進行插值處理,得出整個壩體數(shù)據(jù), 這樣才能更直觀地反應(yīng)出監(jiān)測數(shù)據(jù)是否異常,大壩的運行狀態(tài)是否良好。
網(wǎng)格模型是監(jiān)測數(shù)據(jù)三維展示的基礎(chǔ), 因此需要預(yù)先創(chuàng)建好三維網(wǎng)格模型。 本文擬定采用單個典型壩段進行三維監(jiān)測數(shù)據(jù)可視化展示, 壩寬30m,上游折坡點高程1241.5m, 壩頂寬度10m, 壩底寬度50m。 采用前處理軟件Hypermesh進行三維網(wǎng)格模型的創(chuàng)建, 創(chuàng)建過程中需要注意地是要將網(wǎng)格模型的原點設(shè)置在實際工程中監(jiān)測儀器布置位置的基點,便于直接使用監(jiān)測儀器位置數(shù)據(jù)。 根據(jù)CAD圖紙中工程幾何外形輪廓,從模型的細部著手通過點、線、面等幾何信息創(chuàng)建三維壩體網(wǎng)格模型。 繪制模型的過程中需要對模型的細小結(jié)構(gòu)進行簡化, 如壩體的廊道等,圖為壩體三維網(wǎng)格模型創(chuàng)建示意圖。
圖2 壩體三維網(wǎng)格模型
監(jiān)測儀器只能記錄下來某個高程的監(jiān)測數(shù)據(jù),但要反應(yīng)到整個壩體模型上就要對監(jiān)測獲得的數(shù)據(jù)進行插值處理,得出整個壩體數(shù)據(jù),這樣才能更直觀地反應(yīng)出監(jiān)測數(shù)據(jù)是否異常, 大壩的運行狀態(tài)是否良好。
目前, 較常用的插值方法有線性插值、 兩點插值、三次樣條插值等。 本文利用Python編程語言基于支持向量機算法對三維模型進行數(shù)據(jù)插值,圖3為基于支持向量機算法的三維模型插值流程。
圖3 三維模型插值流程
讀取按監(jiān)測項目分類后的相同監(jiān)測項目的監(jiān)測儀器的三維坐標(biāo)及當(dāng)前監(jiān)測數(shù)據(jù), 并按照’x,y,z,value’(value,單個監(jiān)測數(shù)據(jù))格式輸入到支持向量機算法中,支持向量機算法依據(jù)有數(shù)據(jù)的有限元節(jié)點,在算法內(nèi)部生成最接近實際監(jiān)測數(shù)據(jù)的空間插值函數(shù)如式(1),函數(shù)生成之后算法遍歷沒有數(shù)據(jù)的有限元節(jié)點坐標(biāo)值, 近似插值生成節(jié)點數(shù)據(jù)值從而得出有限元模型所有節(jié)點上的監(jiān)測數(shù)據(jù)。
插值完成后的壩體模型數(shù)據(jù)為所有單元節(jié)點的數(shù)值, 但WebGL在渲染的時候是根據(jù)顏色RGB的數(shù)值進行渲染的, 直接生成的數(shù)據(jù)不能夠直接被網(wǎng)頁端渲染器所識別, 因此需要對數(shù)據(jù)進行預(yù)先處理。
3.3.1 數(shù)據(jù)場值轉(zhuǎn)化為RGB色彩值
RGB即紅(red),綠(green),藍(blue)的縮寫,3種顏色按照不同比例混合可產(chǎn)生所有顏色, 顯示器上的所有顏色都由此三者產(chǎn)生。
利用監(jiān)測數(shù)據(jù)通過SVM模型對三維壩體模型進行插值,得出結(jié)果是壩體空間上的環(huán)境量數(shù)據(jù)場,如位移數(shù)據(jù)場溫度數(shù)據(jù)場。 但若要將數(shù)據(jù)值以不同顏色區(qū)分顯示到網(wǎng)頁端需要利用Twgl.js技術(shù)進行渲染,而渲染器無法識別顏色數(shù)據(jù)以外的其他數(shù)據(jù)值,這就需要將插值后的數(shù)據(jù)轉(zhuǎn)化成RGB形式的顏色數(shù)據(jù)。圖為監(jiān)測數(shù)值轉(zhuǎn)化為顏色數(shù)值流程,首先定義云圖中顯示最亮和最暗的顏色; 然后讀取文本格式的數(shù)據(jù), 將獲取到的字符串按照格式分割成單個數(shù)據(jù)后計算得到所有數(shù)值中的最大值和最小值, 并將最亮顏色綁定到最大值,最暗顏色綁定到最小值;其次遍歷數(shù)據(jù)將所有數(shù)據(jù)在最大值與最小值間進行插值得出每個數(shù)據(jù)對應(yīng)的不同顏色值; 最后將轉(zhuǎn)換完成的顏色值以’R,G,B,R,G,B…’ 格式存儲到.color文本文件。
圖4 數(shù)值轉(zhuǎn)換為顏色流程
3.3.2 點坐標(biāo)與網(wǎng)格單元數(shù)據(jù)規(guī)范化
數(shù)據(jù)讀取渲染的過程中先是對單個頂點進行渲染著色, 然后根據(jù)單元構(gòu)成信息進行三角形單元內(nèi)部插值著色,而網(wǎng)格模型是體單元,因此需要將體單元轉(zhuǎn)化為三角形面單元。 利用python將體單元數(shù)據(jù)讀取后進行分割并按照特定格式存放到文件中。 此外WebGL是單面渲染即三角形點的標(biāo)記順序是順時針標(biāo)記和逆時針標(biāo)記,當(dāng)單元標(biāo)記只有一個方向的時候,WebGL默認渲染一個面, 這會導(dǎo)致模型從不同角度瀏覽會出現(xiàn)空白即未渲染現(xiàn)象,因此,需將單元順時針與逆時針雙向標(biāo)記即0,1,5,0,5,4…0,5,1,0,4,5…并將數(shù)據(jù)存儲到.indices文本文件。
圖5 六面體單元信息示意圖
大壩工程的安全監(jiān)測意義十分重要, 是我國水利水電事業(yè)高效、穩(wěn)定發(fā)展的重要前提。壩體的安全受多方面因素影響,隨著時間推移,壩體的安全性逐漸降低,這就要求實時地對壩體進行監(jiān)測。對壩體的實時監(jiān)測能夠第一時間了解壩體的運行狀況, 及時獲取壩體的健康狀態(tài), 對壩體的異常位移情況進行預(yù)警,保證壩體能夠健康高效的運行[5],因此需對大壩位移進行實時監(jiān)測。
通過前面章節(jié)的數(shù)據(jù)處理, 形成規(guī)范化的數(shù)據(jù)格式, 然后編寫核心代碼對數(shù)據(jù)進行讀取與渲染處理,生成實時位移云圖,圖為壩體上下游位移云圖,核心代碼如下。
圖6 壩段位移場云圖
本文介紹了三維數(shù)據(jù)可視化技術(shù), 通過對典型三維可視化工具的對比分析, 發(fā)現(xiàn)Twgl.js在數(shù)據(jù)模型展示方面兼容性好,開發(fā)便捷迅速;利用支持向量機回歸器實現(xiàn)了監(jiān)測數(shù)據(jù)三維空間插值, 利用Twgl.js實現(xiàn)了監(jiān)測數(shù)據(jù)模型網(wǎng)頁端顯示。雖然實現(xiàn)了監(jiān)測數(shù)據(jù)模型三維可視化展示, 但是監(jiān)測數(shù)據(jù)在三維模型空間上的插值精度還不是十分精確。因此,需要進一步優(yōu)化三維模型空間插值算法。