鄭顧平, 邢 玥, 張榮華
(華北電力大學(xué)控制與計算機工程學(xué)院,河北 保定 071003)
一種基于GPU的彈坑實時繪制方法
鄭顧平, 邢 玥, 張榮華
(華北電力大學(xué)控制與計算機工程學(xué)院,河北 保定 071003)
為解決動態(tài)地形繪制過程中高逼真性與實時性這一矛盾,提出一種基于GPU的動態(tài)地形實時繪制方法。首先基于Geometry Clipmaps算法構(gòu)建地形層次結(jié)構(gòu),然后在更新過程中引入真實物理模型與過程紋理映射相結(jié)合方法,以使最終繪制的地形達到更為逼真的效果。為驗證該方法的有效性,模擬了炮彈在草地上爆炸形成的彈坑效果,并與基于ROAM算法繪制的彈坑效果在繪制三角形數(shù)量、平均幀速率及CPU占用率3個方面做了對比。實驗結(jié)果表明,所提方法能夠有效減少繪制的三角形數(shù)量,并能獲得較高的幀速率及逼真度,滿足動態(tài)地形繪制對于高逼真性和實時性的要求。
動態(tài)地形;Geometry Clipmaps;物理模型;過程紋理映射;可編程GPU
高逼真度虛擬環(huán)境的建立是虛擬現(xiàn)實技術(shù)的核心內(nèi)容,而地形是虛擬環(huán)境中不可或缺的重要組成部分。相對于靜態(tài)地形,動態(tài)地形更具有其特殊性,地形需要根據(jù)仿真實體(如車輛、炮彈、行人等)與地面的交互而發(fā)生物理上的實時更新,這種改變不僅發(fā)生在繪制階段,而且系統(tǒng)在底層所維護的數(shù)據(jù)
結(jié)構(gòu)也要基于特定的物理模型而實時改變[1]。因此,高逼真動態(tài)地形繪制對實時性提出了更高的要求。
目前對于動態(tài)地形實時繪制技術(shù)的研究主要集中在兩方面:一是如何有效管理地形的海量數(shù)據(jù);二是地形形變策略的選擇。對于第一點,目前主流的做法是采用細節(jié)層次模型(level of detail, LOD)。LOD算法能夠有效地減少繪制的三角形數(shù)量,但現(xiàn)有的LOD算法[2-5]都局限于靜態(tài)地形的領(lǐng)域。對于第二點的研究主要有基于物理和外觀兩種方法?;谖锢淼姆椒╗6]能夠精確地模擬地表真實的運動,但需要大量的精確計算,占用過多CPU資源。而基于外觀的方法則放棄了復(fù)雜的計算精度,以紋理貼圖的方式達到可以接受的視覺假象,但達不到動態(tài)地形繪制對高逼真度的要求。如何在地形逼真度和模型復(fù)雜度之間取得較為理想的平衡成為解決這一問題的關(guān)鍵。
基于上述分析,本文圍繞解決動態(tài)地形繪制的高逼真性與實時性這一矛盾,提出了一種基于GPU的動態(tài)地形實時繪制方法。首先基于Geometry Clipmaps算法構(gòu)建地形層次結(jié)構(gòu);隨后提出了一種基于GPU的地形形變策略,將物理模型與過程紋理映射相結(jié)合對地形產(chǎn)生的形變位置進行實時更新;最后在繪制階段通過頂點紋理獲取技術(shù)生成實時更新的彈坑效果。實驗結(jié)果表明,本文提出的方法與ROAM算法相比,能夠有效減少繪制的三角形數(shù)量,并獲得較高的幀速率及逼真度,將大量計算轉(zhuǎn)移到GPU中,滿足動態(tài)地形對于高逼真性和實時性的要求。
基于 GPU的實時繪制已成為大規(guī)模地形繪制算法的一個趨勢,近年來也出現(xiàn)了一些GPU友好的地形繪制算法,如 Geometrical M ipmapping[7],GPU-Based Geometry Clipmaps[8],小波變換[9]等算法。本文使用2004年Losasso和Hoppe[8]提出的基于GPU的Geometry Clipmaps地形繪制算法。傳統(tǒng)的ROAM算法[10]采用層次結(jié)構(gòu)來存儲地形的幾何數(shù)據(jù),地形高程值和層次結(jié)構(gòu)的更新完全由 CPU來動態(tài)維護,不適用于大規(guī)模的動態(tài)地形實時繪制。而Geometry Clipmaps算法是一種新的符合地形幾何特性的層次數(shù)據(jù)結(jié)構(gòu),可以將地形結(jié)構(gòu)以2D紋理形式存儲在 GPU中??蓪⒌匦尉彺娴揭唤M嵌套的規(guī)則網(wǎng)格中,其中心為視點所在位置,并隨視點的移動而移動。由于可將地形分級合成到不同等級的幾何剪切圖上,因此可以借助頂點紋理獲取技術(shù)(vertex texture fetch, VTF)在GPU中快速地更新和繪制。相對于ROAM算法,Geometry Clipmaps算法結(jié)構(gòu)更加簡單,退化更加快速合理,繪制地形所需要的運算均可在GPU內(nèi)部完成,CPU只處理簡單的運算,實現(xiàn)了將大量的計算從 CPU轉(zhuǎn)移到GPU中,可滿足大規(guī)模地形繪制對實時性的要求。
基于GPU的Geometry Clipmaps所使用的數(shù)據(jù)結(jié)構(gòu)可以存儲在頂點紋理中,這樣二維的地形網(wǎng)格和頂點紋理之間可進行方便的映射。剪切圖分為L層,每層包含N×N個幾何數(shù)據(jù)采樣點,每個采樣點包含3個數(shù)據(jù)(x, y, z),x,y坐標由頂點緩沖存儲。這個頂點緩沖可以在初始化時一次性發(fā)送到GPU中,并由其實現(xiàn),所以后期不需要CPU進行干預(yù)更新。z坐標存儲在一張單通道高程紋理中。N的大小選擇2的冪減1,這種處理方式具有一定的優(yōu)勢。首先硬件只能處理 2的冪次方的紋理,使用2k-1可以最大程度利用2k×2k的頂點紋理。在繪制時留最右一列和最下一行不用。其次,因每層剪切圖的邊界需落在下一個比較粗糙的層的網(wǎng)格上,若選擇兩個層的中心不對齊,就可使精細層在粗糙層的中心位置進行一定的偏移。這樣可以不用更新全部的粗糙層數(shù)據(jù),這對于提高更新效率很重要。例如,選擇N為255,此時僅需要4層就可以覆蓋1024×1024范圍的高程圖。圖1為系統(tǒng)實現(xiàn)所用到的地形剪切圖,依次為從第 0層至第3層,最后一張為地形的真實高程圖。
圖1 地形生成的Clipmaps剪切圖
2.1 彈坑物理模型
動態(tài)地形與靜態(tài)地形的區(qū)別在于其交互性以及地形結(jié)構(gòu)的實時變化,而地形結(jié)構(gòu)的實時變化
是由于仿真實體與地形交互產(chǎn)生的。因此,為了逼真地模擬現(xiàn)實世界中的現(xiàn)象,首先要提出合理的物理模型。文獻[11]給出了一種彈坑基本物理模型,如圖2所示。
圖2 彈坑基本物理模型剖視圖
彈坑內(nèi)部高程值的偏移量計算公式如下
其中,C1為與地形表面特性相關(guān)的半徑系數(shù),C2為與地形表面特性相關(guān)的深度系數(shù),A為爆炸物質(zhì)的當量。在現(xiàn)實生活中,彈坑的幾何形狀以及彈坑的方向與爆炸沖擊力的方向有關(guān)。為了使仿真結(jié)果更加真實,本文使用改進的橢圓形彈坑物理模型,如圖3[11]所示。
圖3 改進的彈坑物理模型俯視圖[11]
2.2 過程紋理映射
當實時繪制動態(tài)地形時,僅改變地形的頂點數(shù)據(jù)不足以逼真地展現(xiàn)地形的細節(jié)形變,還需對形變位置的非幾何屬性(如地形紋理等)做出相應(yīng)的改變。文獻[1]提出了繪制地形變形映射圖的方法,該方法對整張高程圖進行更新,而在實際應(yīng)用中,為了滿足系統(tǒng)的實時效率,僅需要更新發(fā)生形變位置的地形紋理。因此,本文引入了基于片元著色器的動態(tài)地形過程紋理映射方法。
下面以炮彈在草地上留下的彈坑為例來說明本文的動態(tài)地形過程紋理映射方法。首先將更新后的紋理分成 3個區(qū)域,新紋理區(qū)域、過渡紋理區(qū)域和舊紋理區(qū)域,如圖4所示。
圖4 過程紋理示意圖
由于彈坑中心區(qū)域受到的爆炸沖擊最大,所以越靠近彈坑中心,地形形變越明顯,頂點顏色的取值主要依賴新紋理區(qū)域。相反,越靠近彈坑的邊緣區(qū)域,地形形變越微小,頂點顏色的取值主要依賴舊紋理區(qū)域。因此,本文用頂點到彈坑中心的距離d作為參數(shù),對兩種基本紋理圖的元素顏色值進行加權(quán)平均運算。設(shè)權(quán)值為Pd,計算過程如下:
經(jīng)上述方法得到的紋理混合效果如圖5所示。
圖5 紋理混合示意圖
3.1 動態(tài)彈坑繪制流程
為了驗證提出方法的有效性,本文模擬了炮彈在草地上形成的彈坑效果。動態(tài)彈坑繪制流程圖(圖6),主要分為3部分:地形初始化、地形更新以及彈坑渲染。
地形初始化主要是基于第 1節(jié)介紹的Geometry Clipmaps算法構(gòu)建地形的層次結(jié)構(gòu),以及設(shè)備的初始化和頂點、索引緩沖區(qū)的填充。下面詳細介紹地形更新及地形渲染。
3.1.1 地形更新
更新部分是動態(tài)彈坑繪制的關(guān)鍵部分,需要獲取各種輸入設(shè)備的交互信息并進行處理。由于2.2節(jié)介紹了過程紋理映射方法,下面重點介紹幾何剪切圖的更新。
隨著視點的移動,每個剪切圖窗口在其的視見體棱錐層內(nèi)進行平移,并保持以當前視點在地面投影位置為中心。由于精細層和粗糙層的中心不對齊,所以較精細層可以在粗糙層內(nèi)進行一定的偏移。視點的運動是連續(xù)的,每一幀只需要處理一個小的L層區(qū)域。視點的相對運動從第0層到第 L-1層呈指數(shù)級減少,大部分更新只對較精細層進行。
更新中要進行剪切圖的平移。為了避免數(shù)據(jù)的平移,本文在 Hoppe環(huán)形訪問方式的基礎(chǔ)上,分3部分更新剪切圖,如圖7所示。A、C兩部分是由于視點在Z軸方向上運動產(chǎn)生的,B部分是視點在 X軸方向上運動產(chǎn)生的。更新時,先渲染 B區(qū)域,然后對于在 Z軸方向運動產(chǎn)生的區(qū)塊,不重復(fù)渲染B部分,只渲染A、C兩部分。使用這種方式,可有效避免重復(fù)更新剪切圖數(shù)據(jù)。
圖6 動態(tài)彈坑繪制流程
圖7 更新區(qū)域示意圖
3.1.2 彈坑渲染
利用可編程GPU繪制成流水線完成彈坑的渲染,使用著色器程序在頂點著色器和片元著色器中進行處理。頂點著色器的主要作用是獲取剪切圖層作為輸入,通過讀取每個點所記錄的整數(shù)部分和小數(shù)部分,然后通過計算混合參數(shù)來混合兩個高程得到最終的高度。片元著色器通過法線圖的紋理對地形進行光照的計算,再根據(jù)頂點著色器傳入的紋理混合參數(shù)成為像素點混合紋理。
在高程數(shù)據(jù)渲染中,不同層次的連接處容易
產(chǎn)生T型裂縫,Geometry Clipmaps算法采用過渡帶來消除T型裂縫。即在每層Clipmaps外圍引入一個過渡區(qū)域,再對其進行精細層和相鄰粗糙層的高程混合。設(shè)取樣的位置為(x,y),視點位置為(vx,vy),混合參數(shù)的計算如下
ay的計算也如此,ω是過渡寬度,取N/10。然后在當前精細層的高程zf和粗糙層的高程zc之間進行線性插值
粗糙層的點的獲取,需通過計算邊緣上兩個端點樣本的平均值獲得
為了簡化,可直接讀取當前紋理層的 2個位于粗糙層上的點并取平均值。這些點和粗糙層相對應(yīng)的點的高程是相同的,可以免去直接采樣粗糙層樣本。方法如圖8所示,對于取樣的點(圖中紅色空心圓)(x, y),先對其坐標對 2取模。得到(modx,mody),然后取樣點的坐標為
圖8 粗糙層采樣說明
3.2 彈坑繪制環(huán)境
本實驗使用一張1024×1024的dds格式高程圖,地形的大小為4 MB。將L設(shè)為4,N設(shè)為255,這樣第 4層 L3就能覆蓋整個地形。實驗在 Intel Core2 Duo T6600 2.20 GHz,2 G內(nèi)存,NVIDIA GeForce G 105 M顯卡配置的計算機上測試。在地形靜止時可達到平均81幀/秒的繪制速率,當繪制彈坑地形時其平均幀率為63 fps。
3.3 彈坑繪制結(jié)果及分析
為了驗證本文提出的基于GPU的動態(tài)地形繪制方法的有效性,在同一平臺上將文獻[10]基于ROAM算法與本文繪制結(jié)果作對比,如圖9~11所示。由圖9可以看出,文獻[10]由于未引入真實物理模型計算彈坑形變量,繪制出的彈坑邊緣不符合現(xiàn)實的物理法則,且彈坑內(nèi)部的紋理并沒有根據(jù)土壤的性質(zhì)發(fā)生改變。由圖10、11可以得出,本文使用的基于物理模型的方法可以適用于不同情況下的動態(tài)彈坑繪制,且繪制出的彈坑形狀更加符合自然規(guī)律。而過程紋理的引入使彈坑效果更加真實、多樣,符合動態(tài)地形繪制對高逼真度的要求。
圖9 文獻[10]方法繪制的彈坑效果圖
圖10 本文方法繪制的彈坑效果圖
圖11 本文方法繪制的有方向彈坑效果圖
此外,為了驗證本文方法能夠滿足動態(tài)地形繪制對實時性的要求,對兩種方法在繪制三角形數(shù)量、形變時的平均幀速率以及CPU占用率3個方面進行了對比,結(jié)果如圖12~14所示。由圖12可以看出,在同一視點位置下,由于ROAM算法繪制的三角形數(shù)量與視點位置有關(guān),而Geometry Clipmaps算法將地形嵌套成一組規(guī)則的網(wǎng)格,每次只需更新剪切層窗口大小的區(qū)域,因此,使用Geometry Clipmaps算法構(gòu)建的地形結(jié)構(gòu)能夠有效地減少繪制的三角形數(shù)量。此外,在地形發(fā)生形變時,由于本文方法將大量計算由CPU轉(zhuǎn)移到GPU中完成,繪制出的彈坑效果能夠獲得更高的幀速率,且占用較少的CUP資源,滿足動態(tài)地形繪制對實時性的要求。
圖12 繪制三角形個數(shù)對比圖
圖13 平均幀速率對比圖
圖14 CPU占用率對比圖
為有效解決高逼真動態(tài)地形的實時繪制問題,本文在Geometry Clipmaps算法構(gòu)建地形結(jié)構(gòu)的基礎(chǔ)上,提出了真實物理模型與過程紋理相結(jié)合的方法,將大量的計算過程移植到GPU中,充分發(fā)揮了現(xiàn)代GPU的強大圖形渲染功能。實驗結(jié)果表明,本文提出的方法能夠有效減少繪制的三角形數(shù)量,在保證地形繪制實時性的前提下,能夠得到較為逼真的仿真結(jié)果,滿足動態(tài)地形繪制對高逼真度和實時性的要求。下一步的研究重點在于將有限元方法應(yīng)用到動態(tài)地形實時繪制中,不僅在地形更新過程中應(yīng)用有限元方法,在物理模型仿真過程中也應(yīng)用有限元的相關(guān)方法,以得到更為高效的繪制效果。
[1] 張榮華. 基于GPU的動態(tài)地形實時繪制技術(shù)的研究與實現(xiàn)[J]. 計算機工程與設(shè)計, 2010, 31(20): 4434-4437.
[2] 孟 放, 查紅彬. 基于LOD控制與內(nèi)外存調(diào)度的大型三維點云數(shù)據(jù)繪制[J]. 計算機輔助設(shè)計與圖形學(xué)學(xué)報, 2006, 18(1): 1-8.
[3] 劉曉平, 凌 實, 余 燁, 等. 面向大規(guī)模地形 LOD模型的并行簡化算法[J]. 工程圖學(xué)學(xué)報, 2010, 21(5): 16-21.
[4] Kang L, Wu L D, Yang B, et al. Large-scale terrain simplification and visualization based on TIN [J]. Computer Aided Drafting, Design and Manufacturing, 2008, 18(2): 1-8.
[5] 鄭 新, 劉 瑋, 呂辰雷, 等. 海量地形實時動態(tài)存儲與繪制的 GPU實現(xiàn)算法[J]. 計算機輔助設(shè)計與圖形學(xué)學(xué)報, 2013, 25(8): 1146-1152.
[6] Chen X, Zhu Y. Real-time simulation of vehicle tracks on soft terrain [C]//Advances in Visual Computing. Berlin: Springer Heidelberg, 2013: 437-447.
[7] de Boer W. Fast terrain rendering using geometrical mipmapping [EB/OL]. [2009-10-15]. http://www. flipcode.com/articles/article_geom ipmaps.shtm l.
[8] Losasso F, Hoppe H. Geometry clipmaps: terrain rendering using nested regular grids [C]//Proceedings of ACM Transactions on Graphics. New York: ACM Press, 2004: 769-776.
[9] 陳國軍, 徐曉莉, 張 晶, 等. 基于B樣條小波的動態(tài)地形實時繪制[J]. 工程圖學(xué)學(xué)報, 2009, 30(1): 59-65.
[10] 張榮華. 基于 ROAM 算法的彈坑實時可視化系統(tǒng)設(shè)計[J]. 系統(tǒng)仿真學(xué)報, 2006, 18(2): 511-516.
[11] 王 達. 虛擬戰(zhàn)場中一種基于 GPU的大規(guī)模動態(tài)地形仿真研究[D]. 武漢: 華中科技大學(xué), 2012.
A Real-Time Crater Rendering Method Based on GPU
Zheng Guping, Xing Yue, Zhang Ronghua
(School of Control and Computer Engineering, North China Electric Power University, Baoding Hebei 071003, China)
In order to solve the problem on high fidelity and real-time during the dynamic terrain rendering process, a real-time rendering method of dynam ic terrain is proposed based on programmable GPU. First, the terrain hierarchy is constructed based on Geometry Clipmaps algorithm. Second, a dynamic terrain rendering method is introduced to achieve a more realistic effect on the final terrain based on real physical model and processing texture mapping during updating process. Finally, the crater effect formed on the lawn is simulated to verify the effectiveness of the method. And the proposed method is compared w ith the method based on ROAM on amount of draw ing triangles, the average frame rate and CPU usage. The experiments results show that the proposed method can reduce the amount of draw ing triangles effectively, and achieve higher frame rates and fidelity. The requirements of high fidelity and real-time in dynam ic terrain rendering can be meted.
dynam ic terrain; Geometry Clipmaps; physical model; processing texture mapping; programmable GPU
TP 391.9
10.11996/JG.j.2095-302X.2016040451
A
2095-302X(2016)04-0451-06
2015-09-03;定稿日期:2016-01-26
國家自然科學(xué)基金項目(51407076);河北省自然科學(xué)基金項目(F2014502050)
鄭顧平(1960?),男,河北石家莊人,教授,博士。主要研究方向為計算機仿真、分布式系統(tǒng)和人工智能。E-mail:zhengguping@126.com
邢 玥(1990?),女,吉林白城人,碩士研究生。主要研究方向為計算機圖形學(xué)、虛擬現(xiàn)實。E-mail:machange2013@sina.cn