王俊勇,詹勇
(重慶市勘測院,重慶 400020)
一種基于GPU的三維數字地形實時編輯方法
王俊勇?,詹勇
(重慶市勘測院,重慶 400020)
虛擬地理環境下的規劃設計需要較高的數字地形編輯支持,通過GPU編程方法,不僅適用于規則格網和三角網數字地形的編輯,還支持傾斜攝影模型、城市精細模型的編輯。本方法支持地形實時編輯、編輯結果分屏對比、疊加矢量數據等,顯著提高了大規模實時地形編輯效率。研究成果已成功應用于道路設計、方案規劃等實際項目,取得良好效果。
GPU;地形編輯;投影紋理映射;夾持投影;數字地形
數字地形編輯是指對地形數據的獲取、增加、修改和刪除操作,在3DGIS環境下的實際運用中,數字地形編輯功能通常是指挖洞、塌陷和貼紋理。挖洞是對地形表面進行刪除操作,在地形中挖出一塊或多塊不規則區域,使其該區域不遮擋地形表面下面的物體,該功能在地下管線、道路設計、方案規劃等實踐中被大量運用;塌陷是對地形高程數據的修改,給定一塊或多塊區域中,對此區域內的地形高程數據按指定的規則進行修改,一般有拉高高程、拉低高程、全部整平、部分整平等;貼紋理是對地形表面影像進行疊加處理,在指定區域內繪制地表紋理,常見的如各種矢量數據疊加等。
傳統地形編輯是直接對地形數據進行操作,修改地形格網和影像達到地形編輯的目的,效果較好,處理后可以直接獲取修改后的地形數據,但也存在著以下一些問題:
(1)大量復雜的地形編輯造成計算時間和模型處理時間長,特別是具有多層次細節的地形,計算數據量更大。
(2)對地形編輯區域編輯或恢復的實時性不能有較好的保障,重新刷新地形編輯區域部分的地形瓦片,需要重新計算或恢復數據,不能即時呈現地形編輯效果,存在延遲和卡頓現象,嚴重影響了程序性能。
(3)貼紋理要對地形影像進行融合處理,增加了系統開銷。
為解決上述問題,本文采用基于GPU的地形編輯處理方法,將地形編輯區域模型渲染成紋理,把紋理投影到地形上,按事先制定好的紋理通道規則,在頂點著色程序中對地形挖洞、塌陷和貼紋理處理。
本文方法可實時編輯和恢復地形,不存在延遲和卡頓現象,并減少了算法復雜性。本方法不適合地形編輯后對地形數據的持久化,但可通過保存挖洞、塌陷和貼紋理對象的狀態,來達到地形編輯后的持久化效果。本方法提升了程序性能和靈活性,同時也提高了用戶體驗。
GPU是顯卡的核心,具有高并行結構,采用流式并行計算模式,可對每個數據進行獨立的并行計算,所以GPU在處理圖形數據和復雜算法方面擁有比CPU更高的效率。
GPU Shader Language為高級語言,使用Shader Language編寫的程序稱之為著色程序(Shader Program)。圖1為GPU可編程流水線。
頂點處理器是專門處理多邊形頂點的。頂點著色程序從GPU前端模塊(寄存器)中提取圖元信息,并完成頂點坐標空間轉換、法向量空間轉換、光照計算等操作,最后將計算好的數據傳送到指定寄存器中。
幾何處理器是專門用來處理場景中的幾何圖形。它可以根據頂點的信息來批量處理幾何圖形,對Vertex附近的數據進行函數處理,快速創造出新的多邊形。
片元處理器是讀取單一pixel屬性,輸出包含顏色和Z信息的片元。片元著色程序進行每個片元的顏色計算,將處理后的數據送光柵操作模塊,最后輸出顏色值的就是該片元最終顯示的顏色。
本文將地形編輯區域處理成三維模型,通過RTT相機(Render to texture)渲染到紋理,在GPU階段根據投影紋理映射進行相應的編碼,實現挖洞、塌陷和貼紋理效果。使用頂點處理器更改頂點高程實現塌陷效果,使用片元處理器實現挖洞以及貼紋理效果。
3.1創建地形編輯模型和RTT相機
根據功能關系,將地形編輯區域生成三維模型并分類為:挖洞模型、塌陷模型和貼紋理模型,這些模型盡可能的共享渲染屬性和減少渲染列表,以提高渲染效率,由于要將這三種模型最終渲染到紋理,因此要用顏色值區別這三種模型,并且要注意這三種模型的疊加層次關系。本文通過顏色R分量(小于1/255)來區分它們:

地形編輯類型表 表1
上表中模型疊加層次也可以不通過高度分層,通過更改渲染次序和渲染列表達到相同的效果。
創建一個俯視正交投影RTT相機,并創建一個紋理綁定到RTT相機,紋理大小可根據顯卡性能適當設置,最好為2的n次方,筆者在本文中設置的是8 192 ×8 192。
3.2夾持投影
所謂夾持投影是指將RTT相機夾持到適當的位置并設置適當的投影范圍,其目的是讓渲染出的紋理垂直映射到主相機視線范圍地形或模型上。RTT相機位置不正確會導致紋理投影產生偏離,投影范圍過小導致主相機中的地形某部分沒有被投影,投影范圍過大導致邊緣鋸齒現象。RTT相機有三個主要參數:投影方式、視圖矩陣和投影矩陣,在本文中采用的是正交垂直投影方式,視圖矩陣和投影矩陣通過夾持投影矩陣計算。
在圖2中,用當前主相機視錐體a與投影模型包圍盒b求交,得到一個被裁割的錐體c,根據錐體c構建一個長方體d,此長方體d即為RTT相機的俯視正交視景體,通過長方體d求得RTT相機視圖矩陣和投影矩陣。長方體d的頂面越大,RTT相機渲染到紋理后的圖像分辨率越低越模糊,反之分辨率越高越清晰。投影圖像分辨率公式如下:

圖2 夾持投影

其中:δ表示分辨率;T表示綁定到RTT相機的紋理大小;S表示RTT相機投影范圍大小
由于RTT紋理大小在最初就是固定了的,投影范圍決定了分辨率大小。分辨率越大挖洞邊緣越光滑、塌陷邊緣越精確;分辨率越小挖洞邊緣越粗糙、塌陷邊緣鋸齒越大,因此在保證長方體d覆蓋主相機視景體情況下要盡可能地減少長方體d的頂面大小,可采取如下措施:
(1)主相機遠剪切面不能過大,可以進行自動計算相機遠近剪切面,使相機能恰到好處的包括視錐體里的物體。
(2)設置一個水平距離,用來處理主相機實現水平或接近水平時的最遠處,在求交體中剪切掉這個水平面,該值通過地球幾何關系可求得,公式如下:

其中:L表示水平距離;r表示WGS-84橢球參數短半徑6 356 752.314 2;h表示當前相機海拔高度;f表示可變常數,可以根據地形的起伏度而設置。
3.3渲染到紋理
渲染到紋理,顧名思義就是把渲染目標從幀緩存變成一個紋理。這樣就可以把一個場景渲染后再進行后處理,做出各種特效。在利用GPU做通用計算的時候程序也是通過RTT和GPU交換數據的。一般渲染到紋理有三步:創建要渲染的紋理對象;將紋理渲染到對象上;使用生成的紋理,該步驟由系統自動完成。
3.4投影紋理映射
投影紋理映射(Projective Texture Mapping)用于映射一個紋理到物體上,不需要在應用程序中指定頂點紋理坐標。實際上,投影紋理映射中使用的紋理坐標是在頂點著色程序中通過視點矩陣和投影矩陣計算得到的,通常也被稱作投影紋理坐標(Coordinates in projective space)。投影紋理映射有兩大優點:其一,將紋理與空間頂點進行實時對應,不需要預先在建模軟件中生成紋理坐標;其二,可以有效避免因插值出來的內部紋理坐標分布不均衡導致的紋理扭曲現象。
投影紋理映射最重要的一點就是確定紋理坐標,投影紋理坐標的求得,與紋理本身沒有關系,而是由投影機的位置、角度以及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把點轉化到投影空間,規格化的投影空間是[-1, 1],而紋理坐標是[0,1],因此需要一個矩陣將投影頂點坐標歸一化到[0,1]空間,該矩陣就是偏移矩陣。
在應用程序中計算出紋理投影矩陣信息后,再傳遞到著色程序中使用,在著色器程序中,使用該矩陣將頂點坐標轉換為紋理投影坐標,公式為:

其中:TVPC表示紋理投影坐標;TVP表示紋理投影矩陣;v表示頂點坐標;
將紋理投影坐標傳遞給紋理映射函數(GLSL使用texture2DProj,Cg使用tex2DProj),從而將紋理實時和空間頂點對應起來,得到一個采樣點,在著色器中對采樣點P處理得到地形編輯效果,如表2所示,效果如圖3所示。

GPU著色器階段地形編輯 表2
3.5高程獲取
在本文所采取的地形編輯方法中,并未更改地形瓦片模型和原始DEM數據,當用戶在地形編輯范圍內獲取高程時,則還是獲取的原始數據,并未受地形挖洞和塌陷的影響。這種情況下,要進行兩步分析:
第一步,從DEM或地形瓦片獲取高程,這一步可設置獲取的分辨率,采取緩存措施提高查詢速度;
第二步,判斷是否在地形編輯范圍內以及所對應的地形編輯類型,當在地形范圍內并且為挖洞模型,此時未獲取高程;當在地形范圍內并且為塌陷模型,此時高程為塌陷方式指定的高程。在實際運用中,可能存在大量的地形編輯模型,這一步可通過垂直射線與地形編輯模型求交,通過建立各種空間索引加快求交方法。
3.6貼紋理
當地形塌陷模型和地形貼紋理模型有重合時,由于塌陷模型壓蓋在貼紋理模型之上,導致渲染到紋理時,重合部分丟失了貼紋理模型部分,使地形塌陷的重合部分沒有貼紋理模型的紋理,這是本方法的最大缺陷。可以通過兩種方法來解決:
(1)構建兩個RTT相機,一個相機用來渲染挖洞模型和塌陷模型,另一個相機用來渲染貼紋理模型,兩個相機設置相同的視圖矩陣和投影矩陣等信息。在著色器程序中分別對兩個相機渲染出的紋理進行分析,在頂點著色器中,使用前一個相機渲染出的紋理進行判斷是否塌陷,在片元著色器中,先使用前一個相機渲染出的紋理進行判斷是否挖洞,再用后一個相機渲染出的紋理與地形紋理進行融合。
(2)將塌陷模型更改為挖洞模型,避免塌陷區域和貼紋理區域重合,在3DGIS應用中,大多數情況下可將塌陷部分轉為挖洞實現。
本文方法成功應用到筆者團隊開發的集景山地城市仿真平臺上,進行了道路設計、方案設計等各種地理設計和城市設計中。
(1)重慶釣魚嘴片區道路整合及優化設計:
重慶釣魚嘴片區項目共完成三維地形模型建設12 km2,完成三維規劃道路長度50.2 km,三維設計道路長度19.4 km,立交模型4個,三維輕軌模型長度7.7 km,三維鐵路模型長度12 km,挖洞對象31 653個。在該項目實現了規劃路網三維模型實時模擬和交互式調整;交叉口動態調高,實時調整交叉口相關道路豎向動態優化;進行二維管線規劃成果快速三維模擬以及土石方實時計算與動態平衡等功能,這都涉及對地形的開挖編輯和高程獲取的基本要求,程序反應快速,達到了預期目的,如圖4所示。

圖4 重慶釣魚嘴片區路網二維規劃與三維即時模擬
(2)基于地理設計的三維建筑規劃方案設計
地理設計強調整個設計過程都在人的交互式參與下進行,通過整合多源設計數據和周邊環境情況為設計提供全面支撐。實時調整、動態構建是地理設計與傳統設計手段最大的區別,也是最重要的優勢。通常要求地形編輯能即時響應,而且要對現狀建筑進行即時塌陷或挖掉,并且要對設計成果進行分屏對比。基于GPU編程模擬的地形編輯效果,在現狀與方案分屏對比時,只需將地形編輯模型置于方案分屏相機下即可。該應用結合Esri CityEngine工具軟件和集景三維數字城市引擎進行了方法實現與系統開發,將設計師的思想形成多個備選方案的選擇,通過規則引擎快速形成方案三維形態,在大范圍三維地理空間環境下展開交互式的設計,如圖5所示。

圖5 三維建筑規劃方案設計
本文在重慶市勘測院的集景平臺上實現,并展示了基于GPU數字地形編輯在道路設計中的應用結果。在規劃道路優化設計中,對大量的挖洞模型進行開啟或關閉,程序可實時響應,不存在明顯的停頓和滯后感;在基于地理設計的三維建筑規劃方案設計中,對現實與方案、方案與方案之間的分屏對比,程序能實時響應,不需要對數據進行額外的處理。
實踐表明,本文方法在進行大規模地形編輯模型下,充分發揮了GPU的性能優勢,實時地形編輯模式提高了程序響應速度同時也提高了用戶體驗性。并不受限于規則格網的數字地形,可在不規則地形、傾斜攝影、城市精細模型上達到同樣的效果。基于GPU的即時地形編輯方法具有高性能、速度快、用戶體驗好等特點。
[1] Edward Angle.交互式計算機圖形學[M].北京:電子工業出版社,2009.
[2] Tomas Akenine-Moller,EricHaines.實時計算機圖形學[M].北京:北京大學出版社,2004.
[3] 李界光,唐麗玉,陳崇成.面向景觀規劃設計的數字地形交互式編輯技術[J].地理信息科學學報,2012(4).
[4] 吳恩華,柳有權.基于圖形處理器(GPU)的通用計算[J].計算機輔助設計與圖形學學報,2004(5).
[5] 石松,陳崇成,王欽敏等.地物仿真及交互可視化編輯工具的設計與實現[J].系統仿真學報,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—),男,助理工程師,主要從事三維地理信息系統開發及應用研究。
重慶市社會民生科技創新專項課題(cstc2015shmszx40007)