李懷良,庹先國,,劉瑤,蔣鑫
(1.西南科技大學核廢物與環境安全國防重點學科實驗室,四川綿陽621010;2.成都理工大學地質災害防治與地質環境保護國家重點實驗室,四川成都610059)
微震監測區域的實時仿真建模方法
李懷良1,庹先國1,2,劉瑤1,蔣鑫2
(1.西南科技大學核廢物與環境安全國防重點學科實驗室,四川綿陽621010;2.成都理工大學地質災害防治與地質環境保護國家重點實驗室,四川成都610059)
針對因建模的三維數據量巨大導致傳統OpenGL固定管線對三維地形渲染難以滿足實時性需求這一問題,提出利用GPU可編程圖形管線來進行渲染,實現區域的可視化實時顯示。建模過程中首先使用基于分形理論的隨機中點位移法產生地形高程數據,然后利用三角面元連接地形高程散點生成三維曲面,最后通過GLSL著色語言對GPU進行編程實現對地形的渲染。該方法建模過程與OpenGL固定管線渲染效率進行對比,結果表明:利用GPU可編程圖形管線對400萬的三維地形網格數據進行渲染僅用時82.92ms,效率遠高于OpenGL固定管線的渲染,能夠滿足實時渲染的需要。
GPU;GLSL;三維地形;微震;實時渲染
微地震監測是近幾十年發展起來的對煤層頂板巖石破裂情況進行監測的新技術。它可量測長壁開采過程中應力變化所導致的圍巖破裂的空間展布形態與動態變化特征。對監測區域建立高準確度的三維地質模型,并運用此模型進行微震監測,快速定位發生的微震事件,是評價監測區域穩定性的一個重要指標。如何快速地生成具有高度真實感的三維地形便成為一個富有挑戰性的研究課題[1],而三維地形的生成和渲染技術作為其核心技術更是研究中的重點。
目前,國內外對于三維地形生成算法的研究取得了不俗的成果,總結起來,大體有如下3種方法:1)基于真實地形數據(如數字地面模型DTM和數字高程模型DEM)來生成地形[2];2)基于曲面擬合來生成地形[3];3)基于分形理論使用中點位移等方法進行迭代插值來生成地形[4-5]。相對而言,對于三維地形渲染方面的研究則較少,大多是采用傳統的固定渲染管線對地形數據進行渲染,這種方法只能依賴于圖形函數庫所提供的特性,無法更改機器內部的操作順序,當顯示數據量過大時往往會在CPU與GPU間傳遞數據而耗費大量時間,導致遲滯、卡屏等現象。
由此,本文提出采用著色器語言GLSL對GPU進行編程,實現對地形的渲染,將大量的計算過程由CPU轉向GPU,能夠快速完成對微震監測區域三維地形的渲染,并取得較好的視覺效果。本文首先使用基于分形理論的隨機中點位移法來生成地形高程數據,然后采用著色器語言GLSL對GPU進行編程,最后以四川地區近水平薄煤層中具有代表性的某測試研究試點煤礦進行圍巖監測,并比較CPU和GPU兩者對三維地形的渲染效率。
1.1 地形生成算法
基于分形理論的三維地形生成算法可以很好的解決一般地形仿真中模型細節不充分,畫面真實感不夠等問題,時間復雜度低,代碼簡單,實現相對容易,本文采用隨機中點位移法中的菱形-方形法生成三維地形數據,下面闡述其算法過程[6]。
1)菱形階段。如圖1(a)所示,初始地形表面為一個正方形,然后連接正方形對角線,得到正方形中點,如圖1(b)所示。O點的高度值由4個頂點高度值的平均值再加上一個隨機變量得到,即:

其中,頂點hA、hB、hC、hD分別表示頂點A、B、C、D的高度值,ro為隨機變量,本文選取高斯分布隨機數,計算公式如下:

圖1 菱形-方形法示意圖

式中:scale——比例系數;
i——遞歸次數;
H——地形特征參數;
gauss——服從正態分布的隨機數。
2)方形階段。分別計算初始正方形4邊中點的高度值,每邊中點的高度值由此邊上兩頂點高度值的平均值加上一個隨機變量(與菱形階段的隨機變量滿足同分布)得到,即:

式中:W——AB中點;
X——BC中點;
Y——CD中點;
Z——AD中點;
rW、rX、rY、rZ——隨機變量。
至此,已經生成了9個點的高度值,如圖1(c)所示,初始正方形被細分成了4個小正方形。然后,再對每個小正方形執行上述步驟,則每個小正方形又可細分成4個更小的正方形,依次類推,便可得到迭代次數與生成的網格之間的數量關系式為

其中,n為生成的網格數,i為迭代次數,取值為大于1的正整數,迭代次數的確定取決于期望得到地形細節復雜程度,迭代次數越大,生成的地形細節越豐富,計算量也相應增加。
1.2 地形建模方法
按照上述算法生成的三維地形數據為包含x,y,z信息的一系列散點,OpenGL提供了一種高效的三角形組織形式可以將這些散點連接成為面元,最終生成的三維地形曲面即由這些面元構成。三角形面元的連接方法[7-8]描述如下:
設Vi(i=0,1,2,…,n)表示第i個頂點,n為頂點總數,第1個三角形面元由V0→V1→V23個頂點依次連接,當i≥3的頂點,每1個頂點數據則與其前兩個數據構成第i-1個三角形面元,當i為奇數時,構建三角形面元的連接順序為Vi-1→Vi-2→Vi;當i為偶數時,構建三角形面元的連接順序為Vi-2→Vi-1→Vi,通過如此連接,可以保證每個三角形面元的法線向量保持一致(向外或者向里),這樣,當進行某些操作(如剔除掉背面不繪制)時則十分容易,可極大地提高渲染效率。下面舉例說明三角形面元的連接方法,如圖2所示。

圖2 三角形面元連接示意圖
圖中共有6個頂點進行連接,第1步依次連接前3個頂點V0→V1→V2,構建第1個三角形面元,當連接V3頂點時,利用其之前的兩個頂點V1和V2構建第2個三角形面元,連接順序為V2→V1→V3,從圖中可以看出,構建的4個三角面元的法線方向都向外,繪制時可以據此剔除背面不進行繪制,節省繪制時間。
2.1 OpenGL固定渲染管線
可以把OpenGL操作看成是兩臺機器,其中一臺對頂點進行處理,另一臺對片斷進行處理。機器的前面具有拔號盤和開關,可以通過切換開關和拔號來控制機器的操作,但是機器的內部操作是“固定”的,也就是說,無法更改機器內部的操作順序,并且只能利用機器提供的特性,OpenGL的這種操作模式常常又稱為“固定功能的管線”[9],其操作順序如圖3所示。
幾何數據(頂點、線段和多邊形)沿著一條路徑,先進行求值即根據幾何形狀建模,建立起物體的數學描述,然后根據物體在三維空間中的放置位置以及觀察的位置和方向對每個頂點數據進行操作;同時,像素數據(像素、圖像、位圖)沿著另一條路徑進行處理,然后在光柵化階段,將物體的幾何描述和它們相關的信息(主要是顏色、紋理等)轉換為片斷,而每個片斷方塊對應于幀緩沖區中的一個像素,最后將幀緩沖區中的圖形顯示到屏幕上。

圖3 OpenGL固定渲染管線
2.2 GPU可編程圖形管線
GPU可編程圖形管線的出現和高級著色語言的不斷發展,使得人們可以通過著色器對GPU進行編程,著色器包含頂點著色器與像素著色器兩種,圖4和圖5分別展示了OpenGL固定管線中的頂點處理過程和像素處理過程,其中方框陰影部分的功能可以分別由頂點著色器和片斷著色器來代替,從而可使CPU從固定管線中的大量向量計算中解放出來,交由GPU完成,這不僅提高了渲染的速度,同時渲染圖像的質量也顯著提高。
2.3 GLSL著色器創建流程

圖4 頂點處理管線
目前,對GPU編程的著色器語言主要有3種:1)微軟公司的基于Direct3D的HLSL語言;2)NVIDIA公司推出的Cg(C for Graphic)著色器語言;3)基于OpenGL的GLSL。本文采用GLSL對GPU進行編程,圖6顯示了創建GLSL著色器對象并把它們鏈接起來創建可執行著色器程序所需要的步驟[10]。

圖5 片斷處理管線

圖6 著色器創建流程
在應用程序中使用頂點或片斷著色器,需要按照順序執行下面的步驟:
1)創建一個著色器對象;
2)把著色器源代參與編譯為目標代碼;
3)驗證這個著色器已成功通過編譯;
然后,為了把多個著色器對象鏈接到一個著色器程序中,需要執行下面的步驟:
4)創建一個著色器程序;
5)把適當的著色器對象鏈接到這個著色器程序中;
6)鏈接著色器程序;
7)驗證著色器鏈接階段已經成功完成;
8)使用著色器進行頂點或片斷處理。
為了測試采用GPU可編程圖形管線對微震監測區域的渲染效率,本文以四川地區近水平薄煤層中具有代表性的某測試研究試點煤礦進行圍巖監測。首先從谷歌地圖中導出監測區域的三維地形數據,包括坐標和20×20的高程數據,如圖7所示。

圖7 監測區域示意圖
3.1 仿真測試
使用隨機中點位移法對谷歌地圖的高程數據進行建模,生成大數據量的地形數據,監測區域高程地形的仿真結果如圖8所示。

圖8 區域等高線及微震事件監測圖
圖8中,不同顏色的球體代表微震事件的震級大小,范圍從里氏震級-3.0~1.5,四面體代表檢波器。微震事件的聚集區域發生了塌方事件,是由于巖體多次、長時間的破壞累積導致。通過GPU渲染的實際三維地形圖和網格圖如圖9所示。

圖9 監測區域地形仿真圖

圖10 監測區域地形網格圖
3.2 對比測試
本文在不同網格數情況下對監測區域圖像的渲染時間與OpenGL傳統渲染管線所耗時間進行了對比。進行實驗的硬件環境為:處理器為Intel(R)Core(TM)i5-3470 CPU@3.2GHz,內存為3.47GB,顯卡為NVIDIA GeForce GT 620;軟件環境為:QT/C++,GLSL,OpenGL。
表1為不同網格數量時兩者所費時間的統計表,從表中數據不難發現,在相同網格數量情況下,使用GPU可編程圖形管線(GLSL)渲染效率高于OpenGL傳統渲染管線,特別當所需渲染的網格數量超過百萬時,差異更加明顯。
根據表1中數據作出二者的渲染時間對比圖如圖11所示,可以發現傳統渲染管線的渲染時間隨著網格數量級的增加近似于幾何增長,而可編程圖形管線的渲染時間隨網格數量級增加則近似于線性增長,由此可見,后者耗時隨地形網格數量級的增長速度同樣小于前者耗時的增長速度,因此,GPU可編程圖形管線的渲染效率較高。

圖11 幀渲染時間對比圖
本文首先使用Google Earth獲取監測區域的高程數據,再基于分形理論的隨機中點位移法擴展地形數據,利用連接三角形面元的方法進行建模生成三維地形曲面,最后提出采用著色器語言GLSL對GPU進行編程實現對三維地形的渲染。實踐表明,對于三維地形的渲染,相比于OpenGL固定渲染管線,GPU可編程圖形管線的渲染效率更高,能夠滿足實時渲染的需要,這對于微震數據或其他大量數據的可視化研究具有一定的參考意義。
[1]韓飛.面向虛擬環境的三維地形生成方法[J].計算機工程,2010,36(19):261-265.
[2]劉歡,朱紅秀,李宏遠,等.管道漏磁檢測數據三維顯示方法研究[J].中國測試,2015,41(2):84-87.
[3]劉海洋.三維地形生成的關鍵技術研究[D].哈爾濱:哈爾濱工程大學,2012.
[4]芮小平,張彥敏,楊崇俊.基于Perlin噪聲函數的三維地形可視化研究[J].測繪通報,2003(7):16-18.
[5]周煒,董福安,吉楠.基于分形和高度圖控制的三維地形生成技術研究[J].電光與控制,2007,14(4):66-69.
[6]劉操,汪俊,吳章文,等.基于圖形處理器的射線追蹤數字重建影像方法[J].中國測試,2012,38(2):81-84.
[7]孫鶴.基于分形理論的海底三維地形生成技術研究[D].哈爾濱:哈爾濱工程大學,2011.
[8]Chaturvedi A K,Piegl L A.Procedural method for terrain surface interpolation[J].Computers&Graphics,1996,20(4):541-566.
[9]李廣鑫,吳自力,丁振國,等.一種面向虛擬環境的真實感地形生成算法[J].西安電子科技大學學報,2004,31(5):728-731.
[10]Shreiner D.OpenGL programming guide seventh edition[M]. Boston:Addison-Wesley,1999:668-674.
A method for realtime simulation modeling in m icroseism ic monitoring area
LI Huailiang1,TUO Xianguo1,2,LIU Yao1,JIANG Xin2
(1.Key Subject Lab of National Defense for Nuclear Waste and Environmental Safety,Southwest University of Science and Technology,Mianyang 621010,China;2.State Key Laboratory of Geohazard Prevention and Geoenvironment Protection,Chengdu University of Technology,Chengdu 610059,China)
Simulation modeling in micro-seismic monitoring areas is crucial for evaluating microseismic events.Because of the huge amount of 3D data for modeling,the traditional OpenGL fixed pipeline can not be applied to render 3D terrains in real time.A GPU programmable graphics pipeline capable of displaying visual areas in real time was proposed in this paper accordingly. First,the random midpoint displacement method was applied on the basis of fractal theory to produce terrain elevation data.Second,a 3D surface was formed by connecting triangle face-units with the scattered terrain elevation points.Next,the terrain was rendered by the GPU with a GLSL shading language.Compared with the rendering efficiency of the traditional OpenGL fixed pipeline,the new method is more efficient,for it takes only 82.92 ms to render 4-million terrain meshes.
GPU;GLSL;3D Terrain;microseismic;real-time rendering
A文章編號:1674-5124(2015)08-0083-05
10.11857/j.issn.1674-5124.2015.08.020
2015-03-02;
2015-04-27
國家重大科研儀器設備研制專項(41227802);四川省科技支撐計劃項目(2014GZ0184);西南科技大學科研基金項目(13zx7135,15yyhk14)
李懷良(1985-),男,講師,主要從事信號檢測與數字信號處理方面的研究。