王俊勇,詹勇
(重慶市勘測院,重慶 400020)
一種基于GPU的三維數(shù)字地形實時編輯方法
王俊勇?,詹勇
(重慶市勘測院,重慶 400020)
虛擬地理環(huán)境下的規(guī)劃設(shè)計需要較高的數(shù)字地形編輯支持,通過GPU編程方法,不僅適用于規(guī)則格網(wǎng)和三角網(wǎng)數(shù)字地形的編輯,還支持傾斜攝影模型、城市精細模型的編輯。本方法支持地形實時編輯、編輯結(jié)果分屏對比、疊加矢量數(shù)據(jù)等,顯著提高了大規(guī)模實時地形編輯效率。研究成果已成功應(yīng)用于道路設(shè)計、方案規(guī)劃等實際項目,取得良好效果。
GPU;地形編輯;投影紋理映射;夾持投影;數(shù)字地形
數(shù)字地形編輯是指對地形數(shù)據(jù)的獲取、增加、修改和刪除操作,在3DGIS環(huán)境下的實際運用中,數(shù)字地形編輯功能通常是指挖洞、塌陷和貼紋理。挖洞是對地形表面進行刪除操作,在地形中挖出一塊或多塊不規(guī)則區(qū)域,使其該區(qū)域不遮擋地形表面下面的物體,該功能在地下管線、道路設(shè)計、方案規(guī)劃等實踐中被大量運用;塌陷是對地形高程數(shù)據(jù)的修改,給定一塊或多塊區(qū)域中,對此區(qū)域內(nèi)的地形高程數(shù)據(jù)按指定的規(guī)則進行修改,一般有拉高高程、拉低高程、全部整平、部分整平等;貼紋理是對地形表面影像進行疊加處理,在指定區(qū)域內(nèi)繪制地表紋理,常見的如各種矢量數(shù)據(jù)疊加等。
傳統(tǒng)地形編輯是直接對地形數(shù)據(jù)進行操作,修改地形格網(wǎng)和影像達到地形編輯的目的,效果較好,處理后可以直接獲取修改后的地形數(shù)據(jù),但也存在著以下一些問題:
(1)大量復(fù)雜的地形編輯造成計算時間和模型處理時間長,特別是具有多層次細節(jié)的地形,計算數(shù)據(jù)量更大。
(2)對地形編輯區(qū)域編輯或恢復(fù)的實時性不能有較好的保障,重新刷新地形編輯區(qū)域部分的地形瓦片,需要重新計算或恢復(fù)數(shù)據(jù),不能即時呈現(xiàn)地形編輯效果,存在延遲和卡頓現(xiàn)象,嚴重影響了程序性能。
(3)貼紋理要對地形影像進行融合處理,增加了系統(tǒng)開銷。
為解決上述問題,本文采用基于GPU的地形編輯處理方法,將地形編輯區(qū)域模型渲染成紋理,把紋理投影到地形上,按事先制定好的紋理通道規(guī)則,在頂點著色程序中對地形挖洞、塌陷和貼紋理處理。
本文方法可實時編輯和恢復(fù)地形,不存在延遲和卡頓現(xiàn)象,并減少了算法復(fù)雜性。本方法不適合地形編輯后對地形數(shù)據(jù)的持久化,但可通過保存挖洞、塌陷和貼紋理對象的狀態(tài),來達到地形編輯后的持久化效果。本方法提升了程序性能和靈活性,同時也提高了用戶體驗。
GPU是顯卡的核心,具有高并行結(jié)構(gòu),采用流式并行計算模式,可對每個數(shù)據(jù)進行獨立的并行計算,所以GPU在處理圖形數(shù)據(jù)和復(fù)雜算法方面擁有比CPU更高的效率。
GPU Shader Language為高級語言,使用Shader Language編寫的程序稱之為著色程序(Shader Program)。圖1為GPU可編程流水線。
頂點處理器是專門處理多邊形頂點的。頂點著色程序從GPU前端模塊(寄存器)中提取圖元信息,并完成頂點坐標空間轉(zhuǎn)換、法向量空間轉(zhuǎn)換、光照計算等操作,最后將計算好的數(shù)據(jù)傳送到指定寄存器中。
幾何處理器是專門用來處理場景中的幾何圖形。它可以根據(jù)頂點的信息來批量處理幾何圖形,對Vertex附近的數(shù)據(jù)進行函數(shù)處理,快速創(chuàng)造出新的多邊形。
片元處理器是讀取單一pixel屬性,輸出包含顏色和Z信息的片元。片元著色程序進行每個片元的顏色計算,將處理后的數(shù)據(jù)送光柵操作模塊,最后輸出顏色值的就是該片元最終顯示的顏色。
本文將地形編輯區(qū)域處理成三維模型,通過RTT相機(Render to texture)渲染到紋理,在GPU階段根據(jù)投影紋理映射進行相應(yīng)的編碼,實現(xiàn)挖洞、塌陷和貼紋理效果。使用頂點處理器更改頂點高程實現(xiàn)塌陷效果,使用片元處理器實現(xiàn)挖洞以及貼紋理效果。
3.1創(chuàng)建地形編輯模型和RTT相機
根據(jù)功能關(guān)系,將地形編輯區(qū)域生成三維模型并分類為:挖洞模型、塌陷模型和貼紋理模型,這些模型盡可能的共享渲染屬性和減少渲染列表,以提高渲染效率,由于要將這三種模型最終渲染到紋理,因此要用顏色值區(qū)別這三種模型,并且要注意這三種模型的疊加層次關(guān)系。本文通過顏色R分量(小于1/255)來區(qū)分它們:
地形編輯類型表 表1
上表中模型疊加層次也可以不通過高度分層,通過更改渲染次序和渲染列表達到相同的效果。
創(chuàng)建一個俯視正交投影RTT相機,并創(chuàng)建一個紋理綁定到RTT相機,紋理大小可根據(jù)顯卡性能適當設(shè)置,最好為2的n次方,筆者在本文中設(shè)置的是8 192 ×8 192。
3.2夾持投影
所謂夾持投影是指將RTT相機夾持到適當?shù)奈恢貌⒃O(shè)置適當?shù)耐队胺秶?其目的是讓渲染出的紋理垂直映射到主相機視線范圍地形或模型上。RTT相機位置不正確會導(dǎo)致紋理投影產(chǎn)生偏離,投影范圍過小導(dǎo)致主相機中的地形某部分沒有被投影,投影范圍過大導(dǎo)致邊緣鋸齒現(xiàn)象。RTT相機有三個主要參數(shù):投影方式、視圖矩陣和投影矩陣,在本文中采用的是正交垂直投影方式,視圖矩陣和投影矩陣通過夾持投影矩陣計算。
在圖2中,用當前主相機視錐體a與投影模型包圍盒b求交,得到一個被裁割的錐體c,根據(jù)錐體c構(gòu)建一個長方體d,此長方體d即為RTT相機的俯視正交視景體,通過長方體d求得RTT相機視圖矩陣和投影矩陣。長方體d的頂面越大,RTT相機渲染到紋理后的圖像分辨率越低越模糊,反之分辨率越高越清晰。投影圖像分辨率公式如下:
圖2 夾持投影
其中:δ表示分辨率;T表示綁定到RTT相機的紋理大小;S表示RTT相機投影范圍大小
由于RTT紋理大小在最初就是固定了的,投影范圍決定了分辨率大小。分辨率越大挖洞邊緣越光滑、塌陷邊緣越精確;分辨率越小挖洞邊緣越粗糙、塌陷邊緣鋸齒越大,因此在保證長方體d覆蓋主相機視景體情況下要盡可能地減少長方體d的頂面大小,可采取如下措施:
(1)主相機遠剪切面不能過大,可以進行自動計算相機遠近剪切面,使相機能恰到好處的包括視錐體里的物體。
(2)設(shè)置一個水平距離,用來處理主相機實現(xiàn)水平或接近水平時的最遠處,在求交體中剪切掉這個水平面,該值通過地球幾何關(guān)系可求得,公式如下:
其中:L表示水平距離;r表示W(wǎng)GS-84橢球參數(shù)短半徑6 356 752.314 2;h表示當前相機海拔高度;f表示可變常數(shù),可以根據(jù)地形的起伏度而設(shè)置。
3.3渲染到紋理
渲染到紋理,顧名思義就是把渲染目標從幀緩存變成一個紋理。這樣就可以把一個場景渲染后再進行后處理,做出各種特效。在利用GPU做通用計算的時候程序也是通過RTT和GPU交換數(shù)據(jù)的。一般渲染到紋理有三步:創(chuàng)建要渲染的紋理對象;將紋理渲染到對象上;使用生成的紋理,該步驟由系統(tǒng)自動完成。
3.4投影紋理映射
投影紋理映射(Projective Texture Mapping)用于映射一個紋理到物體上,不需要在應(yīng)用程序中指定頂點紋理坐標。實際上,投影紋理映射中使用的紋理坐標是在頂點著色程序中通過視點矩陣和投影矩陣計算得到的,通常也被稱作投影紋理坐標(Coordinates in projective space)。投影紋理映射有兩大優(yōu)點:其一,將紋理與空間頂點進行實時對應(yīng),不需要預(yù)先在建模軟件中生成紋理坐標;其二,可以有效避免因插值出來的內(nèi)部紋理坐標分布不均衡導(dǎo)致的紋理扭曲現(xiàn)象。
投影紋理映射最重要的一點就是確定紋理坐標,投影紋理坐標的求得,與紋理本身沒有關(guān)系,而是由投影機的位置、角度以及3D模型的頂點坐標所決定。
紋理投影矩陣公式如下:
TVP=B×P×V×W(3)
其中:TVP表示紋理投影矩陣;B表示偏移矩陣;P表示RTT投影矩陣;V表示RTT視圖矩陣;W表示模型矩陣。
在式中P和V都在RTT的投影矩陣和視圖矩陣都在夾持投影階段計算得到;模型矩陣W在常用的圖形API中都可獲得;偏移矩陣是為了投影頂點坐標歸一化到[0,1]空間,先縮小1/2,然后再平移1/2。由于P×V把點轉(zhuǎn)化到投影空間,規(guī)格化的投影空間是[-1, 1],而紋理坐標是[0,1],因此需要一個矩陣將投影頂點坐標歸一化到[0,1]空間,該矩陣就是偏移矩陣。
在應(yīng)用程序中計算出紋理投影矩陣信息后,再傳遞到著色程序中使用,在著色器程序中,使用該矩陣將頂點坐標轉(zhuǎn)換為紋理投影坐標,公式為:
其中:TVPC表示紋理投影坐標;TVP表示紋理投影矩陣;v表示頂點坐標;
將紋理投影坐標傳遞給紋理映射函數(shù)(GLSL使用texture2DProj,Cg使用tex2DProj),從而將紋理實時和空間頂點對應(yīng)起來,得到一個采樣點,在著色器中對采樣點P處理得到地形編輯效果,如表2所示,效果如圖3所示。
GPU著色器階段地形編輯 表2
3.5高程獲取
在本文所采取的地形編輯方法中,并未更改地形瓦片模型和原始DEM數(shù)據(jù),當用戶在地形編輯范圍內(nèi)獲取高程時,則還是獲取的原始數(shù)據(jù),并未受地形挖洞和塌陷的影響。這種情況下,要進行兩步分析:
第一步,從DEM或地形瓦片獲取高程,這一步可設(shè)置獲取的分辨率,采取緩存措施提高查詢速度;
第二步,判斷是否在地形編輯范圍內(nèi)以及所對應(yīng)的地形編輯類型,當在地形范圍內(nèi)并且為挖洞模型,此時未獲取高程;當在地形范圍內(nèi)并且為塌陷模型,此時高程為塌陷方式指定的高程。在實際運用中,可能存在大量的地形編輯模型,這一步可通過垂直射線與地形編輯模型求交,通過建立各種空間索引加快求交方法。
3.6貼紋理
當?shù)匦嗡菽P秃偷匦钨N紋理模型有重合時,由于塌陷模型壓蓋在貼紋理模型之上,導(dǎo)致渲染到紋理時,重合部分丟失了貼紋理模型部分,使地形塌陷的重合部分沒有貼紋理模型的紋理,這是本方法的最大缺陷??梢酝ㄟ^兩種方法來解決:
(1)構(gòu)建兩個RTT相機,一個相機用來渲染挖洞模型和塌陷模型,另一個相機用來渲染貼紋理模型,兩個相機設(shè)置相同的視圖矩陣和投影矩陣等信息。在著色器程序中分別對兩個相機渲染出的紋理進行分析,在頂點著色器中,使用前一個相機渲染出的紋理進行判斷是否塌陷,在片元著色器中,先使用前一個相機渲染出的紋理進行判斷是否挖洞,再用后一個相機渲染出的紋理與地形紋理進行融合。
(2)將塌陷模型更改為挖洞模型,避免塌陷區(qū)域和貼紋理區(qū)域重合,在3DGIS應(yīng)用中,大多數(shù)情況下可將塌陷部分轉(zhuǎn)為挖洞實現(xiàn)。
本文方法成功應(yīng)用到筆者團隊開發(fā)的集景山地城市仿真平臺上,進行了道路設(shè)計、方案設(shè)計等各種地理設(shè)計和城市設(shè)計中。
(1)重慶釣魚嘴片區(qū)道路整合及優(yōu)化設(shè)計:
重慶釣魚嘴片區(qū)項目共完成三維地形模型建設(shè)12 km2,完成三維規(guī)劃道路長度50.2 km,三維設(shè)計道路長度19.4 km,立交模型4個,三維輕軌模型長度7.7 km,三維鐵路模型長度12 km,挖洞對象31 653個。在該項目實現(xiàn)了規(guī)劃路網(wǎng)三維模型實時模擬和交互式調(diào)整;交叉口動態(tài)調(diào)高,實時調(diào)整交叉口相關(guān)道路豎向動態(tài)優(yōu)化;進行二維管線規(guī)劃成果快速三維模擬以及土石方實時計算與動態(tài)平衡等功能,這都涉及對地形的開挖編輯和高程獲取的基本要求,程序反應(yīng)快速,達到了預(yù)期目的,如圖4所示。
圖4 重慶釣魚嘴片區(qū)路網(wǎng)二維規(guī)劃與三維即時模擬
(2)基于地理設(shè)計的三維建筑規(guī)劃方案設(shè)計
地理設(shè)計強調(diào)整個設(shè)計過程都在人的交互式參與下進行,通過整合多源設(shè)計數(shù)據(jù)和周邊環(huán)境情況為設(shè)計提供全面支撐。實時調(diào)整、動態(tài)構(gòu)建是地理設(shè)計與傳統(tǒng)設(shè)計手段最大的區(qū)別,也是最重要的優(yōu)勢。通常要求地形編輯能即時響應(yīng),而且要對現(xiàn)狀建筑進行即時塌陷或挖掉,并且要對設(shè)計成果進行分屏對比?;贕PU編程模擬的地形編輯效果,在現(xiàn)狀與方案分屏對比時,只需將地形編輯模型置于方案分屏相機下即可。該應(yīng)用結(jié)合Esri CityEngine工具軟件和集景三維數(shù)字城市引擎進行了方法實現(xiàn)與系統(tǒng)開發(fā),將設(shè)計師的思想形成多個備選方案的選擇,通過規(guī)則引擎快速形成方案三維形態(tài),在大范圍三維地理空間環(huán)境下展開交互式的設(shè)計,如圖5所示。
圖5 三維建筑規(guī)劃方案設(shè)計
本文在重慶市勘測院的集景平臺上實現(xiàn),并展示了基于GPU數(shù)字地形編輯在道路設(shè)計中的應(yīng)用結(jié)果。在規(guī)劃道路優(yōu)化設(shè)計中,對大量的挖洞模型進行開啟或關(guān)閉,程序可實時響應(yīng),不存在明顯的停頓和滯后感;在基于地理設(shè)計的三維建筑規(guī)劃方案設(shè)計中,對現(xiàn)實與方案、方案與方案之間的分屏對比,程序能實時響應(yīng),不需要對數(shù)據(jù)進行額外的處理。
實踐表明,本文方法在進行大規(guī)模地形編輯模型下,充分發(fā)揮了GPU的性能優(yōu)勢,實時地形編輯模式提高了程序響應(yīng)速度同時也提高了用戶體驗性。并不受限于規(guī)則格網(wǎng)的數(shù)字地形,可在不規(guī)則地形、傾斜攝影、城市精細模型上達到同樣的效果。基于GPU的即時地形編輯方法具有高性能、速度快、用戶體驗好等特點。
[1] Edward Angle.交互式計算機圖形學(xué)[M].北京:電子工業(yè)出版社,2009.
[2] Tomas Akenine-Moller,EricHaines.實時計算機圖形學(xué)[M].北京:北京大學(xué)出版社,2004.
[3] 李界光,唐麗玉,陳崇成.面向景觀規(guī)劃設(shè)計的數(shù)字地形交互式編輯技術(shù)[J].地理信息科學(xué)學(xué)報,2012(4).
[4] 吳恩華,柳有權(quán).基于圖形處理器(GPU)的通用計算[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2004(5).
[5] 石松,陳崇成,王欽敏等.地物仿真及交互可視化編輯工具的設(shè)計與實現(xiàn)[J].系統(tǒng)仿真學(xué)報,2006,18(3).
A Method of 3D Digital Terrain Real-Time Editing Based on GPU
Wang Junyong,Zhan Yong
(Chongqing Survey Institute,Chongqing 400020,China)
The planning and design in the virtual geographic environment requires better support of the digital terrain editing.Based on GPU programming,this article introduces a method that not only be suitable for regular grid and triangulation digital terrain editing,but also supports tilt photography model and fine city model editing.The method supports real-time terrain editing,split-screen comparison of terrain editing results,vector data overlaying,and significantly improves the efficiency of large-scale real-time terrain editing.The research results have been successfully applied in real projects of road design and program planning,and obtain good results.
GPU;terrain editing;projective texture mapping;clamping projection;digital terrain
1672-8262(2016)01-93-05
P208.1
A
?2016—01—15
王俊勇(1978—),男,助理工程師,主要從事三維地理信息系統(tǒng)開發(fā)及應(yīng)用研究。
重慶市社會民生科技創(chuàng)新專項課題(cstc2015shmszx40007)