王 宇,陳先橋,高 嵩
(1.武漢理工大學(xué)計算機科學(xué)與技術(shù)學(xué)院,湖北 武漢 430063;2.武漢理工大學(xué)智能交通系統(tǒng)研究中心,湖北 武漢 430063)
高速公路視景仿真軟件可以幫助設(shè)計人員進行線形指標衡量,景觀設(shè)置調(diào)配,環(huán)保經(jīng)濟評價等,同時還可以作為項目招標過程中的效果演示及工程完工后的展示[1]。但由于高速公路線長、面積廣,使得高速公路地形具有大規(guī)模性的特點。如何根據(jù)真實的地形數(shù)據(jù)快速有效地生成大規(guī)模地形并進行實時渲染成為高速公路視景仿真的關(guān)鍵。
目前在高速公路地形三維仿真方面,長安大學(xué)進行了西漢高速公路秦嶺北麓路段人—車—路(環(huán)境)聯(lián)合虛擬仿真系統(tǒng)的研究,該研究完成了基于GIS數(shù)據(jù)的真實地形生成,但其只選取了西漢高速公路的一段25 km長的路段,不能體現(xiàn)高速公路地形的大規(guī)模性[2];黃江波等做了孝襄高速公路部分路段的視景仿真,但該研究并未對孝襄高速全景地形三維仿真提出合理的解決方案[3]。在地形三維渲染方面,目前國內(nèi)外主要采用連續(xù) LOD(levels of detail)技術(shù),主要包括DUCHAINEAUY提出的基于二叉樹結(jié)構(gòu)的ROAM算法[4],LINDSTROM 提出的基于規(guī)則格網(wǎng)的連續(xù)細節(jié)層次實時高度場繪制算法[5],ROTTGER等提出的基于規(guī)則格網(wǎng)的幾何形狀過渡算法[6]。這些算法都是從視點角度采用連續(xù)LOD技術(shù)實現(xiàn)對地形三維渲染的優(yōu)化。
針對高速公路一般具有線性、狹長的特性,在宏觀上提出了一種按道路線形進行地形劃分的方案,將地形的原始勘測數(shù)據(jù)轉(zhuǎn)換為多個小塊地形數(shù)據(jù),通過對小塊地形數(shù)據(jù)提取點插值生成格網(wǎng)來生成小塊地形。為解決多地形塊之間的拼接問題,筆者提出了一種多地形塊之間的邊緣融合算法。微觀上對小塊地形渲染采用OGRE引擎內(nèi)置的基于連續(xù)LOD的GeoMipMapping算法,宏觀上對多塊地形采用動態(tài)調(diào)度策略來實現(xiàn)高速公路大規(guī)模地形的交互式實時漫游。
通常大規(guī)模地形涉及到海量的數(shù)據(jù),一般不可能將所有的數(shù)據(jù)一次性全部載入內(nèi)存,必須根據(jù)地形繪制的要求,實時地進行地形數(shù)據(jù)的動態(tài)加載與卸載。同時由于高速公路視景仿真需要對真實地形的勘察數(shù)據(jù)進行仿真,構(gòu)建大規(guī)模的地形模型非常復(fù)雜,而構(gòu)建小塊的地形模型則比較簡單,因此必須對原始地形數(shù)據(jù)進行分塊劃分。
就高速公路視景仿真而言,從第一人稱視角來看,視點是在道路上,觀察者關(guān)心的是道路沿線的景觀,并不關(guān)心縱向上距離高速公路很遠的場景,因此只需要對高速公路沿線的場景進行仿真,如圖1所示?;谠撎匦?,筆者提出基于高速公路線形走勢進行地形劃分的思想。
圖1 地形分塊示意圖
為了使劃分簡單易操作且降低地形生成的復(fù)雜度,筆者在原始地形數(shù)據(jù)上按矩形區(qū)域?qū)Φ匦芜M行劃分。沿著道路線形對需要仿真的地形區(qū)域依次構(gòu)建鄰接矩形區(qū)域完成對地形的分塊劃分。同時在此過程中,為了使建模后的多塊地形之間能夠較好地銜接,在任意兩塊地形之間構(gòu)建一小塊重疊區(qū)域如圖1所示。這樣不僅有利于地形的生成,同時也有利于地形模型的渲染及動態(tài)調(diào)度。
目前,使用最多的地形模型主要有3種,分別是等高線模型、TIN不規(guī)則三角網(wǎng)模型和規(guī)則格網(wǎng)模型。其中,等高線模型通常需要一種插值方法來計算落在等高線外的其他點的高程,不利于地形的實時渲染;TIN不規(guī)則三角網(wǎng)模型雖然能夠減少格網(wǎng)模型帶來的數(shù)據(jù)冗余,但其模型結(jié)構(gòu)比較復(fù)雜,不利于構(gòu)建以及LOD的實現(xiàn)[7];格網(wǎng)模型所需存儲數(shù)據(jù)量大,不能精確地表示地形的結(jié)構(gòu)和細部,但格網(wǎng)模型結(jié)構(gòu)簡單且利于構(gòu)建以及 LOD 的實現(xiàn)[8]。
由于格網(wǎng)模型簡單且易于實現(xiàn)LOD,目前大多數(shù)地形仿真都是使用格網(wǎng)模型。高速公路仿真的重點在于如何高效地渲染地形,不需要非常精細的地形模型,且基于分塊劃分的矩形區(qū)域容易生成格網(wǎng)數(shù)據(jù),因此筆者采用格網(wǎng)模型來表示地形。
針對格網(wǎng)模型數(shù)據(jù)量大的問題,可以通過數(shù)據(jù)壓縮的方法來減少冗余。由于格網(wǎng)模型具有規(guī)則的網(wǎng)格,任意兩個網(wǎng)格之間大小固定,可以順序存儲每個點的高程值,只需要知道一個頂點的坐標,就可以根據(jù)格網(wǎng)的大小偏移計算出其他點的坐標。由于圖像具有順序的存儲結(jié)構(gòu),因而可以使用位圖格式來存儲格網(wǎng)數(shù)據(jù),位圖中的每個像素對應(yīng)格網(wǎng)中的每一點,像素中的值就存儲格網(wǎng)的高程值。目前各種位圖都有無損壓縮算法,因此基于位圖的方式來存儲格網(wǎng)數(shù)據(jù)可以降低格網(wǎng)數(shù)據(jù)所占存儲空間,減少數(shù)據(jù)冗余。
按照道路線形對整個地形進行劃分,如果矩形區(qū)域太大,則生成的格網(wǎng)數(shù)據(jù)會很多,從而造成一塊地形很大,不利于渲染和加載且數(shù)據(jù)冗余量大;如果矩形區(qū)域太小,格網(wǎng)數(shù)據(jù)會相對減少,冗余數(shù)據(jù)也會相對減少,但由于任何兩個矩形區(qū)域之間有一定的重疊區(qū)域,重疊區(qū)域塊的增加會導(dǎo)致冗余數(shù)據(jù)量增加,從而造成整體數(shù)據(jù)冗余量比矩形區(qū)域較大時還要多。因此確定一個合適的矩形區(qū)域劃分的大小至關(guān)重要。
對于采用格網(wǎng)模型的地形來說,山區(qū)高速公路視景仿真對地形的精度要求不高,目前很多學(xué)者在對山區(qū)高速公路進行視景仿真時對高速公路地形格網(wǎng)間距選取為10~30 m,筆者選取格網(wǎng)間距為10 m,能夠滿足高速公路視景仿真對地形精度的要求。
筆者采用OGRE中的地形場景管理模塊來渲染地形,該地形場景管理模塊對地形格網(wǎng)數(shù)據(jù)有特殊的要求,一塊地形的格網(wǎng)必須是正方形,且正方形邊長的數(shù)據(jù)量必須是2n+1。為了能夠更好地對多塊地形之間進行邊緣融合處理,筆者選取重疊區(qū)域的邊長為1 km左右,需要100個左右的格網(wǎng)數(shù)據(jù),如果將邊長的格網(wǎng)大小設(shè)置為513,則可用數(shù)據(jù)量只有400左右,分塊太小。因此筆者選取邊長為1025的格網(wǎng),有效格網(wǎng)點數(shù)為900個左右,則每塊能夠容納的高速公路有效數(shù)據(jù)為9 km左右,而地形方形區(qū)域邊長大小約為10 km。因此從原始的地形數(shù)據(jù)上對地形進行分塊劃分時每個地形方形區(qū)域邊長大小約為9~10 km,相鄰兩個地形塊之間設(shè)置長度約1 km的重疊區(qū)域。采用該方案能夠滿足對地形渲染的實時性要求,如果再大則地形的原始數(shù)據(jù)量過大,不利于地形格網(wǎng)數(shù)據(jù)的生成,同時在渲染時也會消耗大量內(nèi)存降低渲染效率。
在分塊處理的基礎(chǔ)上對分塊后的小塊地形數(shù)據(jù)進行處理生成地形規(guī)則格網(wǎng)數(shù)據(jù)。一般地形原始數(shù)據(jù)的格式主要包括GIS數(shù)據(jù),CAD數(shù)據(jù)等,筆者主要針對CAD數(shù)據(jù)來生成地形,由于CAD數(shù)據(jù)中DXF文件格式是公開的,因此選用DXF文件的CAD數(shù)據(jù)來生成地形規(guī)則格網(wǎng)數(shù)據(jù),其中格網(wǎng)地形生成流程圖如圖2所示。
圖2 格網(wǎng)地形生成流程圖
首先將獲得的地形原始數(shù)據(jù)分成小塊,然后利用CAD軟件將小塊地形轉(zhuǎn)換生成DXF格式的地形數(shù)據(jù)。通過對DXF文件格式分析可知,DXF文件主要包括各種圖元信息,文獻[9-10]對DXF文件進行了詳細的分析。因此只需要提取出DXF文件中含有高程值的離散點數(shù)據(jù),分析DXF中的各種圖元格式,依次提取出帶有高程值的點數(shù)據(jù)信息即可。
提取出離散點數(shù)據(jù)后,需要對離散點數(shù)據(jù)進行插值生成規(guī)則格網(wǎng)數(shù)據(jù),選用Surfit軟件將離散點數(shù)據(jù)插值生成地形規(guī)則格網(wǎng)數(shù)據(jù)。
原始地形數(shù)據(jù)經(jīng)過提取、插值、生成格網(wǎng)數(shù)據(jù)后所重疊的區(qū)域,如圖3所示。由于兩塊區(qū)域的格網(wǎng)數(shù)據(jù)分別通過插值生成,因此該重疊區(qū)域必然不會吻合,經(jīng)過渲染后會在兩塊地形的重疊區(qū)域產(chǎn)生交錯、閃爍和層疊,因此必須對該區(qū)域進行邊緣融合處理。在該格網(wǎng)數(shù)據(jù)中,由于其邊長必須是2n+1,而經(jīng)過插值生成的格網(wǎng)數(shù)據(jù)不一定滿足要求,故需要填充一些無效數(shù)據(jù)。在插值生成的格網(wǎng)數(shù)據(jù)中邊界數(shù)據(jù)相對不夠準確,因此在重疊區(qū)域中,格網(wǎng)數(shù)據(jù)p1中bcd區(qū)域的數(shù)據(jù)更加準確,而格網(wǎng)數(shù)據(jù)p2中abc區(qū)域的數(shù)據(jù)更加準確。為了能夠充分利用p2中abc區(qū)域的數(shù)據(jù)和p1中bcd區(qū)域的數(shù)據(jù),同時又能使處理后的重疊區(qū)域數(shù)據(jù)融入 p1,p2中,在 ab、ac、cd、bd 邊界上看不出凸起,筆者采用斜向變步長線性融合算法對p1與p2的重疊區(qū)域進行線性融合。
圖3 地形邊緣融合示意圖
圖4 斜向變步長線性融合示意圖
將圖3中abcd區(qū)域放大如圖4所示,假設(shè)格網(wǎng)數(shù)據(jù)p2在該區(qū)域的高程值為p2(),格網(wǎng)數(shù)據(jù)p1在該區(qū)域的高程值為p1()。在該區(qū)域中定義一組斜率為-1的直線ij,該直線與矩形區(qū)域abcd中的任意兩條邊相交于i、j兩點,如圖4中虛線所示。對于其中任意一條直線ij上面的任意一點k,k到i的步長為|yi–yk|,k到 j的步長為|yj– yk|,總步長為|yj–yi|。當k點離 ac或ab邊比較近時則k點在格網(wǎng)數(shù)據(jù)p2中占的權(quán)重大,在格網(wǎng)數(shù)據(jù)p1中占的權(quán)重小,采用k點到i,j的距離與ij總距離的比值定義k點在p1和p2中的權(quán)重。則k點在p1中的權(quán)重為:
k點在p2中的權(quán)重為:
根據(jù)以上權(quán)重定義該區(qū)域中任意點k的高程值為:
根據(jù)以上分析構(gòu)建多塊地形間的邊緣融合算法,偽代碼描述如下:
For重疊區(qū)域中每一條斜率為-1的直線ij;
For直線 ij上每一點 k(xk,yk);
計算k點在p1中的權(quán)重w1=
計算k點在p2中的權(quán)重w2=
由于在地形進行渲染時多塊地形是分別進行的,因此在任意兩塊地形之間會存在紋理拼接問題,需要對重疊區(qū)域的紋理坐標進行偏移來達到邊緣紋理拼接的目的。筆者采用平鋪的方式進行地形紋理處理。對于每塊地形的局部坐標取左上角為(0,0,z),右下角為(xmax,ymax,z),因此假設(shè)每塊地形任意點的局部坐標為(x,y,z),紋理貼圖大小為n×n,紋理平鋪調(diào)節(jié)因子為k。
采用紋理平鋪方式,格網(wǎng)地形p2上任意一點(x,y)對應(yīng)的紋理坐標為:
假設(shè)格網(wǎng)地形p2與p1重疊區(qū)域中左上角點a在p2中的局部坐標為(xa,ya),則格網(wǎng)地形p1上任意一點(x,y)對應(yīng)的紋理坐標為:
其中,k為紋理調(diào)節(jié)因子,當k增大時紋理平鋪次數(shù)增加;當k減小時紋理平鋪次數(shù)減小。采用CG著色語言在片段著色階段根據(jù)以上公式重新計算各點對應(yīng)的紋理坐標,并根據(jù)提供的紋理獲取各點對應(yīng)的紋理值,從而達到地形邊緣紋理上的拼接。
在地形渲染上,筆者從兩個方面來控制地形的繪制。在微觀上,采用OGRE引擎內(nèi)置的基于連續(xù)LOD的GeoMipMapping算法來繪制小塊地形;在宏觀上,采用動態(tài)調(diào)度策略來實現(xiàn)對地形塊的動態(tài)加載與卸載。
從高速公路視景仿真的角度來看,第一人稱視角是沿著道路漫游,那么視點只能沿著道路前進或后退。在對地形進行分塊時是依道路線形進行的,在任意時刻視點只可能在一塊地形上。按照地形分塊的連續(xù)性特性可知,視點下一時刻所處的位置只可能是在當前地形的上一塊、下一塊或當前塊。當視點處于前進過程中位于當前塊的邊緣時,如果下一塊沒有加載,則會出現(xiàn)當前視點前沒有任何場景,從而影響仿真效果,因而必須采用預(yù)取策略提前加載下一塊地形使得場景仿真具有連貫性。同時為了減少內(nèi)存中資源的駐留量,對于不需要的地形塊需要卸載。因此,為了使在原剪裁面范圍內(nèi)始終有地形存在,筆者采用動態(tài)調(diào)度策略保證在任意時刻有3塊地形在內(nèi)存中,即當前塊、上一塊和下一塊,釋放掉其他的無用地形塊,動態(tài)調(diào)度算法偽代碼描述如下:
For每一幀;
計算當前視點位置;
如果視點位于當前塊覆蓋區(qū)域則返回;
如果視點位于當前塊的下一塊,上一塊地形存在則釋放,更新下一塊為當前塊,下一塊地形存在則加載并返回;
如果視點位于當前塊的上一塊,下一塊地形存在則釋放,更新上一塊為當前塊,上一塊地形存在則加載并返回;
End for
實驗數(shù)據(jù)為六武高速地形數(shù)據(jù),其中六武高速全長90 km,對原始的六武高速地形CAD數(shù)據(jù)進行劃分,每塊地形覆蓋約為9 km的道路,將整個六武高速地形劃分為10塊。然后對每塊數(shù)據(jù)進行處理生成規(guī)則格網(wǎng)數(shù)據(jù),將生成的規(guī)則格網(wǎng)數(shù)據(jù)進行邊緣融合處理,最后將規(guī)則格網(wǎng)數(shù)據(jù)壓縮成高位圖數(shù)據(jù),生成的地形高位圖如圖5(a)所示。
在Windows平臺下,筆者基于OGRE引擎提供的基于連續(xù)LOD的GeoMipMapping算法對小塊地形進行渲染,同時在宏觀上對多塊地形采用動態(tài)調(diào)度策略來實現(xiàn)高速公路大規(guī)模地形的實時渲染,其中渲染效果圖如圖5(b)、(c)、(d)所示。兩塊地形采用了兩種不同的紋理貼圖,其中圖5(b)為沒有進行邊緣融合的效果圖,可以看到明顯的交錯、閃爍和層疊效應(yīng);圖5(c)為模型經(jīng)過邊緣融合的效果圖,完全消除了圖5(b)中的交錯效應(yīng)。應(yīng)用邊緣紋理拼接技術(shù)后兩塊地形采用相同的紋理渲染后生成的效果圖如圖5(d)所示,在圖5(c)進行模型邊緣融合的基礎(chǔ)上消除了紋理邊緣拼接問題。
圖5 地形高位圖及渲染效果圖
在硬件環(huán)境為酷睿雙核2.2 GHz,2 G內(nèi)存,G105M顯卡的筆記本上進行測試,一般情況下圖形繪制平均幀率為35幀,塊與塊之間進行動態(tài)調(diào)度的平均幀率為20幀。由實驗結(jié)果可以看出,地形場景繪制能基本滿足高速公路視景仿真的要求,雖在地形塊動態(tài)加載卸載的瞬間會有短暫的幀率下降,但也能滿足高速公路視景實時漫游的要求。由此可見,采用筆者的地形生成與調(diào)度算法,能夠高效、快速地生成高速公路周邊的大規(guī)模地形,有效地解決大規(guī)模地形的繪制問題。
筆者針對高速公路視景仿真過程中的大規(guī)模地形繪制問題,提出了一種按道路線形對地形進行分塊的整體劃分方案,同時根據(jù)相鄰兩塊地形間的重疊數(shù)據(jù)提出了一種斜向變步長線性融合算法,較好地解決了相鄰地形塊間的邊緣銜接問題。并結(jié)合現(xiàn)有的地形塊繪制技術(shù),從宏觀上對地形塊采用動態(tài)調(diào)度策略來實現(xiàn)大規(guī)模地形的實時渲染。理論上,筆者提出的方法可以實現(xiàn)無限長高速公路周邊地形的生成與繪制,并能夠在普通PC機上達到較好的效果,完全能夠滿足高速公路視景仿真過程中對地形渲染的要求。
[1]黃江波,李杰.高速公路視景仿真系統(tǒng)的應(yīng)用研究[J].公路,2006(4):202-206.
[2]袁望方.山區(qū)高速公路人-車-路-環(huán)境-運行虛擬仿真系統(tǒng)關(guān)鍵技術(shù)研究[D].西安:長安大學(xué)圖書館,2009.
[3]黃江波,李杰,劉堯.視景仿真系統(tǒng)在孝襄高速公路中的應(yīng)用[J].武漢工業(yè)學(xué)院學(xué)報,2006,15(1):68-71.
[4]DUCHAINEAUY M,WOLINSKY M.Roaming terrain:real-time optimally adapting meshes[C]//Visualization'97 Proceedings.CA:IEEE Computer Society Press Los Alamitos,1997:81-88.
[5]LINDSTROM P,KOILER D.Real-time continuous level of detail rendering of height fields[C]//Proceedings of the 23rd Annual Conference on Computer Graphics and Interactive Techniques.New York:ACM,1996:109-l18.
[6]ROTTGER S,HEIDRICH W,SLUSALLEK P,et al.Real-time generation of continuous levels of detail for height fields[C]//Proceedings of the 6th International Conference in Central Europe on Computer Graphics and Visualization.[S.l.]:[s.n.],1998:315-322.
[7]HUANG S J,TSENG D C.Construction of multi-resolution terrain models using hierarchical delaunay triangulated irregular networks[C]//1997 IEEE International Geoscience and Remote Sensing-A Scientific Vision for Sustainable Development.[S.l.]:[s.n.],1997(4):1999-2001.
[8]寧慧,原慶凱.一種基于規(guī)則網(wǎng)格的地形簡化算法[J].應(yīng)用科技,2009,34(4):36-39.
[9]SUKIMIN Z,HARON H.Geometric entities information for feature extraction of solid model based on DXF file[J].International Symposium on Information Technology,2008(8):1-5.
[10]梁海濤,馬軍林,童創(chuàng)明,等.基于DXF模型的數(shù)據(jù)讀取與分析方法[J].空軍工程大學(xué)學(xué)報:自然科學(xué)版,2007,8(2):46-48.