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