本發明專利技術公開了一種基于圖形處理器實現的算法,不僅能夠有效消除地形LOD渲染過程中出現的T型裂縫問題,由于基于圖形處理器進行計算,節省了CPU的運算資源,提升了CPU的處理性能。本發明專利技術能夠在僅支持Direct3D9的計算機上高質量高性能的渲染大規模地形,可以廣泛應用于3D游戲和虛擬現實應用程序中。本發明專利技術包括以下步驟:將原始地形圖像劃分為多個面積相等的地形塊;使用LOD地形繪制算法,創建不同LOD級別的頂點緩沖和索引緩沖;用四叉樹組織整個原始地形,每個葉子節點對應一個地形塊;渲染地形;利用GPU進行VertexShader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值;修改頂點的高度值。
【技術實現步驟摘要】
本專利技術涉及圖形學領域,特別是涉及一種基于圖形處理器進行三維地形渲染處理的方法。
技術介紹
大規模地形渲染是虛擬自然場景中的重要組成部分,目前國內外游戲地形渲染中通常使用了基于中央處理器(CPU)的運算方法計算細節層次,雖然能夠大幅降低三角形渲染數量,但缺陷是每一幀都需要更新從CPU到GPU傳送的三角形數據,占用寶貴的CPU資源和總線帶寬。·隨著近年來圖形算法的改進和計算機顯卡性能的提高,充分利用圖形處理器(GPU)性能來生成實時地形已成為可能。在圖形渲染過程中不同層次過渡處會出現T型裂縫,目前現有技術中消除T型裂縫的做法主要分為跳點法和加點法,都比較繁瑣復雜,并且額外增加了不少性能開銷。跳點法就是在較高分辨率的分塊的邊界上跳過一些點不繪制,這樣可以保持相鄰分塊的連續性。加點法就是在較低分辨率的分塊邊界上新增一些頂點以達到兩個分塊頂點保持連續的目的。無論是新增點還是去除點都需要對整個地形進行遍歷并且對相關分塊重新進行三角形剖分,而且喪失了分塊的獨立性,給我們利用分塊的Cache帶來了難度,增加了問題的復雜性,進而影響到效率。還有另外一種效率更高的消除裂縫的辦法。對每個分塊的四條邊,在現有的頂點的基礎上再延伸出一圈,他們和單個分塊的邊界共享頂點,只是高度值不同,這種延伸出來的一圈叫做“裙子”(Skirts )。投影之后只要保證頂點的高度值足夠大,兩個分塊的裙子可以把裂縫遮擋住。當然,這種消除裂縫的方式會增加繪制的三角形繪制數量,也會帶來性能的的下降。
技術實現思路
為解決上述問題,本專利技術公開了一種使用圖形處理器(GPU)實現的幾何體層次細分(LOD)算法,能夠有效消除T型裂縫。為了達到上述目的,本專利技術提供如下技術方案 一種,包括以下步驟 (1)將整個原始地形劃分為2Nx2N個面積相等的地形塊(Block);每個地形塊的的長和寬均相等,地形塊被分為2M x2M個面積相等的單元格;其中,M彡0,N彡0,且M和N均為整數; (2)使用LOD地形繪制算法,創建不同LOD級別的頂點緩沖和索引緩沖;LOD級別分為0級,I級……M級,共有M+1級,在不同LOD級別下創建相應的頂點緩沖和索引緩沖,所有地形塊共享一組頂點緩沖和索弓I緩沖; (3)用四叉樹組織整個原始地形,每個葉子節點對應一個地形塊; (4)渲染地形; (5)利用GPU進行VertexShader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值; (6 )根據步驟(5 )中獲得的高度值修改頂點緩沖中各頂點的高度值,當相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣頂點坐標進行位移。。所述步驟(2)中創建頂點緩沖的過程包括將不同LOD級下每個頂點的位置寫入頂點緩沖中,改寫地形塊邊緣編號為奇數的頂點的Z值,所述編號自邊緣末端由0開始。 所述改寫地形塊邊緣Z值的過程具體包括將地形塊左邊緣編號為奇數的頂點Z值改寫為I,地形塊上邊緣編號為奇數的頂點Z值改寫為2,地形塊右邊緣編號為奇數的頂點Z值改寫為3,地形塊下邊緣編號為奇數的頂點Z值改寫為4。所述步驟(6)中的具體操作步驟如下 當頂點的Z值在步驟(2)中未被改寫時,將Z值修改為通過頂點紋理采樣功能獲得的高度值; 當頂點的Z值在步驟(2)中已被改寫且該地形塊與相鄰地形塊之間的LOD級別一樣時,將Z值修改為通過頂點紋理采樣功能獲得的高度值; 當頂點的Z值在步驟(2)中已被改寫且相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣編號為奇數的頂點坐標進行位移。所述對LOD級別較低的地形塊邊緣編號為奇數的頂點坐標進行位移的過程包括將地形塊左邊緣編號為奇數的頂點坐標值修改為該頂點上方的頂點坐標值;將地形塊上邊緣編號為奇數的頂點坐標值修改為該頂點左方頂點的坐標值;將地形塊右邊緣編號為奇數的頂點坐標值修改為該頂點下方的頂點坐標值;將地形塊下邊緣編號為奇數的頂點坐標值修改為該頂點右方的頂點坐標值。所述步驟(4)中渲染地形的過程包括使用視錐體與四叉樹遞歸計算后快速剔除不可見節點,從而獲取一組可視地形塊,根據視點到地形塊中心的水平距離計算出各地形塊的LOD級數;針對每個可視地形塊計算出的LOD級數所對應的頂點和索引緩沖,再進行三角形列表圖元的渲染。與現有技術相比,本專利技術提供的地形渲染方法具有以下優點和有益效果 I.算法簡單高效,節約資源,有效消除了地形LOD渲染過程中出現的T型裂縫問題。2.基于圖形處理器(GPU)進行計算,節省了 CPU的運算資源,提升了 CPU的處理性倉泛。本專利技術能夠在僅支持Direct3D 9的計算機上高質量高性能的渲染大規模地形,可以廣泛應用于3D游戲和虛擬現實應用程序中。附圖說明圖I為原始地形圖和地形塊的劃分 其中圖a為原始地形圖像劃分圖,圖b為a圖中圓圈圈出的地形塊的放大 圖2為由精細到粗糙依次列出的6種LOD級別;其中圖a為33x33個頂點的LOD級,圖b為17x17個頂點的LOD級,圖c為9x9個頂點的LOD級,圖d為5x5個頂點的LOD級,圖e為3x3個頂點的LOD級,圖f為2x2個頂點的LOD級。圖3為實施方式中采用的世界坐標系。圖4為LOD級為3的地形塊,并列出了邊緣上頂點的(X,Y)坐標值。圖5為LOD級為3的地形塊中Z值改寫圖。 圖6為用四叉樹組織的整個原始地形圖。圖7為地形塊在Vertex Shader里進行頂點紋理采樣的過程。圖8為不同LOD級別的地形塊相鄰處產生T型裂縫的示意圖。 圖9為LOD級數為3的地形塊四條邊緣上的頂點位移圖。圖10為經過位移后消除了 T型裂縫的不同LOD級別之間地形塊相鄰示意圖。具體實施例方式以下將結合具體實施例對本專利技術提供的技術方案進行詳細說明,應理解下述具體實施方式僅用于說明本專利技術而不用于限制本專利技術的范圍。本地形渲染方法包括以下步驟 (I)首先,獲取原始地形圖像,原始地形的長和寬相等,將原始地形的長和寬均勻地分為2N個等分,即長和寬上均存在2n +1個頂點,這樣能夠將整個地形劃分為2nx 2n個面積相等的地形塊(Block)。本例中如圖I中的左側圖所示,N取16,即整個地形被劃分為16x16=256個面積相等的地形塊(Block)。其中,每個地形塊的的長和寬均相等,地形塊的長和寬也可被分為2Mf等分,即長和寬上均存在2M +1個頂點;上述M彡0,N彡0,且M和N均為整數。通常情況下M取5,如圖I中右側圖所示,該地形塊可被分為32x 32個單元格,地形塊上存在33x 33個頂點。劃分之后,整個原始地形上存在(2N X 2m+1)x (2n X 2m+1)個頂點,在本例中為513x 513個頂點。(2)使用LOD地形繪制算法,創建不同LOD級別的頂點緩沖和索引緩沖。。每個地形塊共享一組以不同LOD級創建的頂點和索引緩沖。進行常規地形渲染時,地形塊尺寸通常為64mx64m,地形塊由精細到粗燥依次可分為如圖2所示的33x33,17x17,9x9,5x5,3x3,2x2共計6個LOD級。由精細到粗糙,將LOD級別依次設為0 5級,即33x33個頂點的LOD級為0級,17x17個頂點的LOD級為I級,9x9個頂點的LOD級為2級,5x5個頂點的LOD級為3級,3x3個頂點的LOD級為4級,2x2個頂本文檔來自技高網...
【技術保護點】
一種基于圖形處理器加速的地形渲染方法,其特征在于包括以下步驟:(1)將整個原始地形劃分為2Nx?2N個面積相等的地形塊(Block);每個地形塊的的長和寬均相等,地形塊被分為2M?x2M個面積相等的單元格;其中,M≥0,N≥0,且M和N均為整數;(2)使用LOD地形繪制算法,創建不同LOD級別的頂點緩沖和索引緩沖;LOD級別分為0級,1級……M級,共有M+1級,在不同LOD級別下創建相應的頂點緩沖和索引緩沖,所有地形塊共享一組頂點緩沖和索引緩沖;(3)用四叉樹組織整個原始地形,每個葉子節點對應一個地形塊;(4)??渲染地形;(5)利用GPU進行Vertex?Shader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值;(6)根據步驟(5)中獲得的高度值修改頂點緩沖中各頂點的高度值,當相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣頂點坐標進行位移。
【技術特征摘要】
【專利技術屬性】
技術研發人員:張子龍,
申請(專利權)人:南京安訊網絡服務有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。