專利名稱:一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一般的地形數(shù)據(jù)處理或產(chǎn)生,尤其涉及一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法。
背景技術(shù):
分形最早由法國(guó)數(shù)學(xué)家Mandelbrot提出,可參考[Mandelbrot1975],Mandelbrot,B.B.On the Geometry of Homogeneous Turbulence,with Stress on theFractal Dimension of Iso-Surfaces of Scalars.Journal of Fluid Mechanics.1975,72(2)401-416。這是一門(mén)以非規(guī)則幾何形態(tài)為研究對(duì)象的幾何學(xué),具有無(wú)限以及統(tǒng)計(jì)自相似性的特點(diǎn),它用遞歸算法使復(fù)雜的景物可用簡(jiǎn)單的規(guī)則來(lái)生成。因?yàn)樽匀唤缰衅毡榇嬖谧韵嗨频牟灰?guī)則現(xiàn)象,所以分形為研究者提供了一個(gè)很好地描述自然現(xiàn)象的數(shù)學(xué)模型。分維布朗運(yùn)動(dòng)(fractional Brownian motion,fBm)作為一種分形噪聲,可以有效地表示地形、云彩、雪花等具有隨機(jī)自相似性的自然景物。
fBm函數(shù)計(jì)算復(fù)雜度很高,因此需要對(duì)fBm進(jìn)行簡(jiǎn)化,減少計(jì)算量。早在1982年,F(xiàn)ournier等人提出了一個(gè)迭代剖分算法來(lái)近似fBm,稱作中點(diǎn)置換方法(Midpoint Displacement),可以生成具有自相似性的地形,可參考[Fournier1982],Alain Fournier,Don Fussell and Loren Carpenter.Computer Rendering ofStochastic Models.Communications of the ACM.1982,25(6)371-384。他們首先構(gòu)造了基于線段的一維fBm模型,然后推廣到二維的地形,從而生成山脈的分形細(xì)節(jié)。該方法把fBm的計(jì)算復(fù)雜度從O(nlog(n))降為線性,計(jì)算簡(jiǎn)單。但中點(diǎn)置換不是一個(gè)嚴(yán)格的fBm算法,統(tǒng)計(jì)特性不是穩(wěn)態(tài)的,會(huì)降低生成地形的真實(shí)感。
Musgrave等人從fBm的頻域角度進(jìn)行分析,提出了帶限噪聲累積算法(Summing Band-Limited Noises),利用Perlin噪聲作為基函數(shù)生成地形網(wǎng)格。該方法生成地形的統(tǒng)計(jì)特性是穩(wěn)態(tài)的,因此生成質(zhì)量比中點(diǎn)置換算法好,但計(jì)算復(fù)雜度為O(nlog(n)),比中點(diǎn)置換算法大,比較耗時(shí)??蓞⒖糩Musgrave1989]F.Kenton Musgrave,Craig E.Kolb and Robert S.Mace.The Synthesis and Renderingof Eroded Fractal Terrains.Computer Graphics.Jul.1989,23(3)41-50。
為了更精確地模擬自然界地形,Kaplan等人提出了擴(kuò)展的自相似性(extended self-similar,ESS)概念,可參考[Kaplan1995]Lance M.Kaplan andC.-C.Jay Kuo.Texture Roughness Analysis and Synthesis via Extended Self-Similar(ESS)Model.IEEE Transactions on Pattern Analysis and Machine Intelligence.Nov.1995,17(11)1043-1056。并以此為基礎(chǔ),給出一個(gè)一般的fBm模型,稱作漸進(jìn)式分維布朗運(yùn)動(dòng)(asymptotic fBm,afBm),允許粗糙度因子隨著采樣間距變化而變化,從而生成地形的起伏程度也會(huì)隨之變化。
以上介紹的方法都是研究如何離線式生成地形,并沒(méi)有考慮地形繪制問(wèn)題。過(guò)程式的地形繪制方法是把地形生成和繪制相結(jié)合,在繪制過(guò)程生成視點(diǎn)依賴的地形網(wǎng)格,實(shí)現(xiàn)地形的按需生成和繪制。Losasso和Hoppe把地形幾何看作紋理,提出了Geometry Clipmap技術(shù),把地形分成中空的矩形網(wǎng)格進(jìn)行繪制,可參考[Losasso2004]Frank Losasso and Hugues Hoppe.Geometry ClipmapsTerrainRendering Using Nested Regular Grids.Proceedings of Siggraph 2004.2004,769-776.。他們也通過(guò)分形噪聲生成地形的細(xì)節(jié)信息,但是對(duì)整個(gè)地形僅使用一組分形參數(shù),因此生成的地形難以令人滿意。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法,有效地逼近原始地形模型,可以快速繪制大規(guī)模的地形場(chǎng)景,并且數(shù)據(jù)量較小。
為實(shí)現(xiàn)上述的目的,本發(fā)明采用的技術(shù)方案如下1)建立地形的分形層次樹(shù)結(jié)構(gòu)給定一個(gè)地形模型,對(duì)地形進(jìn)行四叉剖分,建立四叉樹(shù)結(jié)構(gòu),每個(gè)結(jié)點(diǎn)對(duì)應(yīng)一塊地形區(qū)域,記錄著分形信息,包含afBm信息與重要的高度值,這種分形層次樹(shù)結(jié)構(gòu)稱作afBm-tree;2)根據(jù)閾值獲取afBm子樹(shù)在繪制前,根據(jù)用戶設(shè)定的閾值,從afBm-tree中抽取出afBm子樹(shù),閾值表示原始地形和生成地形之間允許的差異。
3)根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù)首先根據(jù)用戶設(shè)定的隨機(jī)概率值,確定分形盒的最小、最大高度值;然后計(jì)算累加高度值在屏幕上的投影誤差;接著根據(jù)該投影誤差,確定結(jié)點(diǎn)的生成級(jí)數(shù);4)對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度首先初始化五隊(duì)列;然后在繪制的每一幀,調(diào)整五個(gè)隊(duì)列中所有結(jié)點(diǎn);接著分別對(duì)Qg和Qm中的結(jié)點(diǎn)交替進(jìn)行處理,直到Qr中的結(jié)點(diǎn)達(dá)到所需要的繪制要求;5)通過(guò)GPU生成與繪制分形塊首先通過(guò)GPU的象素著色器生成分形塊,然后通過(guò)GPU的頂點(diǎn)著色器構(gòu)造地形網(wǎng)格。
對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度的方法可以是首先把a(bǔ)fBm-tree的根結(jié)點(diǎn)送入Qr,并清空其余的隊(duì)列;然后在繪制的每一幀,調(diào)整五隊(duì)列中所有的結(jié)點(diǎn);接著取出Qg中最高優(yōu)先級(jí)的結(jié)點(diǎn),并移入到Qr或Qp中,它的子結(jié)點(diǎn)按照同樣方法進(jìn)行處理;隨后取出Qm中最低優(yōu)先級(jí)的結(jié)點(diǎn),并移入到Qr或qp中;對(duì)Qg和Qm中的結(jié)點(diǎn)交替進(jìn)行處理,直到Qr中的結(jié)點(diǎn)達(dá)到所需要的繪制要求。
通過(guò)GPU生成與繪制分形塊的方法可以是首先通過(guò)GPU的象素著色器生成分形塊,并使用三張紋理,分別是上一級(jí)別的分形塊紋理、掩碼表和高斯噪聲圖紋理;然后通過(guò)GPU的頂點(diǎn)著色器構(gòu)造地形網(wǎng)格,從分形塊中取出頂點(diǎn)的高度值,并從連接模板中確定頂點(diǎn)的二維位置,組合成實(shí)際的三維空間點(diǎn),最后構(gòu)造出繪制地形網(wǎng)格并進(jìn)行地形的繪制。
本發(fā)明與背景技術(shù)相比具有的有益效果是本發(fā)明通過(guò)記錄原始地形的分形信息,構(gòu)造出分形層次樹(shù)結(jié)構(gòu),稱作afBm-tree。afBm-tree是對(duì)地形的一種逼近表示,通過(guò)調(diào)整其生成閾值,可獲得不同的生成精度與壓縮率。通過(guò)afBm-tree,可在繪制時(shí)生成視點(diǎn)依賴的地形網(wǎng)格,從而跳過(guò)龐大的地形層次細(xì)節(jié)模型數(shù)據(jù)的創(chuàng)建過(guò)程。與傳統(tǒng)的地形繪制算法相比,同樣數(shù)據(jù)大小的afBm-tree覆蓋的范圍更廣,可以有效降低多級(jí)調(diào)度的代價(jià),在單CPU的機(jī)器上更有優(yōu)勢(shì)。此外,afBm-tree應(yīng)用領(lǐng)域更廣,允許用戶進(jìn)行編輯,就可以直接用于繪制。本發(fā)明可應(yīng)用于地理信息仿真、虛擬場(chǎng)景漫游、游戲引擎等領(lǐng)域中。
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
圖1是本發(fā)明方法的流程圖;圖2是分形層次樹(shù)afBm-tree的構(gòu)造過(guò)程;圖3是根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù);圖4是分形塊的生成與繪制的流程圖。
具體實(shí)施例方式
本發(fā)明提出的一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法,包括建立地形的分形層次樹(shù)結(jié)構(gòu)、根據(jù)閾值獲取afBm子樹(shù)、根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù)、對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度和通過(guò)GPU生成與繪制分形塊五個(gè)步驟。流程如圖1所示首先根據(jù)原始的地形高程值,建立地形的分形層次樹(shù)結(jié)構(gòu)afBm-tree;然后根據(jù)閾值獲取afBm子樹(shù);根據(jù)視點(diǎn)與誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù),并選擇合適的afBm結(jié)點(diǎn);接著對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度;最后通過(guò)GPU生成與繪制分形塊。
現(xiàn)具體介紹本方法的五個(gè)步驟1)建立地形的分形層次樹(shù)結(jié)構(gòu)為了表示地形不同位置的不同起伏狀態(tài),對(duì)整個(gè)地形建立afBm-tree結(jié)構(gòu),每個(gè)結(jié)點(diǎn)記錄著一塊地形區(qū)域的分形信息。設(shè)原始地形的大小為(2M+1)×(2M+1),對(duì)地形進(jìn)行遞歸剖分,建立四叉樹(shù)結(jié)。層次索引為0的根結(jié)點(diǎn)對(duì)應(yīng)整個(gè)地形高程,層次索引為i的結(jié)點(diǎn)對(duì)應(yīng)的地形區(qū)域大小為(2M-i+1)×(2M-i+1),最小的地形區(qū)域大小記為(2m+1)×(2m+1),其中1≤m<M。需要計(jì)算層次索引為i的四叉樹(shù)結(jié)點(diǎn),i取值范圍i=0,1,...,M-m。
漸進(jìn)式分維布朗運(yùn)動(dòng)(afBm),允許粗糙度因子隨著采樣間距變化而變化,從而生成地形的起伏程度也會(huì)隨之變化。設(shè)函數(shù)Var(x)是一組隨機(jī)數(shù)x的統(tǒng)計(jì)方差,σ2是一個(gè)常量。F(x,y)可以看成是在位置(x,y)處的地形高度值。與二維fBm模型類似,afBm模型的方差可寫(xiě)成Var[F(x+dx,y+dy)-F(x,y)]=σ2f(dt) (1)函數(shù)f(t)稱作結(jié)構(gòu)函數(shù),當(dāng)f(t)=|dt|2H時(shí),式(1)為fBm模型的方差公式。afBm的結(jié)構(gòu)函數(shù)表示為f(t)=(1-A)ρ|t|-1ρ-1+A|t|2H----(2)]]>這里0≤ρ<1,常量A是平滑因子。
每個(gè)afBm結(jié)點(diǎn)的基高度值用于控制生成地形的輪廓形狀,包含四個(gè)對(duì)應(yīng)地形區(qū)域邊界上的角點(diǎn)高度值1,如圖2中的實(shí)圈3所示,需要計(jì)算afBm的四個(gè)參數(shù)值2,分別是H,σ2,ρ和A,首先使用統(tǒng)計(jì)方法求出H和σ2。使用E(t)表示數(shù)學(xué)期望函數(shù),根據(jù)afBm的分形統(tǒng)計(jì)屬性,可得到logE([F(x+dx,y+dy)-F(x,y)]2)=logσ2+(2log|dt|)H (3)由此可得到點(diǎn)對(duì){log|dt|,logE([F(x+dx,y+dy)-F(x,y)]2)},H和σ2可以通過(guò)線性回歸算法得到,所對(duì)應(yīng)的回歸線如圖2中4所示。獲得這兩個(gè)參數(shù)后,可以按照文獻(xiàn)[Kaplan1995]Lance M.Kaplan and C.-C.Jay Kuo.Texture RoughnessAnalysis and Synthesis via Extended Self-Similar(ESS)Model.IEEE Transactionson Pattern Analysis and Machine Intelligence.Nov.1995,17(11)1043-1056的方法計(jì)算出系數(shù)ρ和A。
當(dāng)按照自上而下的順序處理完所有的地形區(qū)域后,就構(gòu)建出了afBm-tree,如圖2中的5。
σ2表示了生成地形和原始地形之間的統(tǒng)計(jì)差異,σ2越大,它們之間的差異越大,因此可以用σ2來(lái)控制生成地形的逼近精度。為了正確選擇afBm結(jié)點(diǎn),進(jìn)一步把σ2調(diào)整為飽和模式。
σTi2=σTi2,i=M-mmax(σTi2,σTi+12),Ti+1⋐Ti,0≤i<M-m-----(4)]]>這里Ti+1Ti表示Ti+1是Ti的子結(jié)點(diǎn)。
2)根據(jù)閾值獲取afBm子樹(shù)在繪制前,首先根據(jù)用戶設(shè)定的閾值Ω,從afBm-tree中抽取出afBm子樹(shù),閾值Ω表示原始地形和生成地形之間允許的差異。
對(duì)afBm-tree從上向下進(jìn)行遍歷,對(duì)每個(gè)結(jié)點(diǎn)T,如果它的統(tǒng)計(jì)方差σT2≤Ω,]]>則T滿足生成精度的要求,否則對(duì)它的子結(jié)點(diǎn)進(jìn)行遞歸訪問(wèn)。完成所有的遍歷訪問(wèn)后,就構(gòu)造出afBm子樹(shù)。下面,將在繪制中使用afBm子樹(shù)創(chuàng)建視點(diǎn)依賴的地形網(wǎng)格。
3)根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù)如圖3所示,為了控制生成地形塊高度的范圍,對(duì)結(jié)點(diǎn)T定義一個(gè)盒子,稱作分形盒(為1),要求所有頂點(diǎn)的高度值均落在該盒子中。分形盒的二維投影等于T所對(duì)應(yīng)的地形區(qū)域大小。分形盒與傳統(tǒng)的包圍盒很相似,不同的是,包圍盒是衡量物體的空間橫跨范圍,大小保持不變,而分形盒是為了限制生成高度的范圍,其大小可以受用戶控制改變。設(shè)T的基高度值為F(xi,yj),(i,j=0,1),T的某一頂點(diǎn)記為(xp,yq),0≤p,q≤1,則根據(jù)afBm的概念,該位置的高度值為F(xp,yq)=F‾(xp,yq)+Σk=0kmaxΔk·Ngauss-----(5)]]>這里F(xp,yq)是基高度值的雙線性插值,如果使用afBm模型,則從式(1),可得到Δk為Δk=σ2[f(2-k)-14f(2-k+1)]------(6)]]>Ngauss是均值為0,方差為1的高斯隨機(jī)變量。由于高斯隨機(jī)數(shù)主要分布在一定區(qū)域內(nèi),所以可以預(yù)先設(shè)定某一概率值a,確定高斯隨機(jī)數(shù)的分布范圍,從而估計(jì)出生成高度值的橫跨范圍。如圖3所示,如果大部分高斯隨機(jī)數(shù)落在陰影區(qū)域的概率值為a(圖3(b)中的2),則可以通過(guò)下式得到它的分布范圍[-G0,G0],見(jiàn)圖2中的3與4。
P{|x|<G0}=a→P{x<G0}=(a+1)/2 (7)P表示一組隨機(jī)數(shù)的概率值,x是高斯隨機(jī)變量。例如,如果a等于95%,則大部分隨機(jī)數(shù)都會(huì)落在區(qū)域?yàn)閇-2,2]的范圍內(nèi)。得到G0后,就能夠控制生成高度的范圍,設(shè)分形盒的最小、最大高度值為F‾T±G0Σk=0kmaxΔk,]]>這里FT是T的基高度的均值。通過(guò)這個(gè)設(shè)定,所有生成的高度值都可以保證落在分形盒中。
接下來(lái),需要確定結(jié)點(diǎn)T所要生成的分形塊的級(jí)數(shù)。分形塊的高度值是以遞增式的方式創(chuàng)建,每增加一級(jí)的分形塊,新創(chuàng)建的高度值增加ΔkNgauss。當(dāng)給定概率值a時(shí),增加值實(shí)際上小于ΔkG0,如圖3(a)中的5,因此,把該值投影到屏幕上,并與預(yù)先設(shè)定的屏幕誤差Escr進(jìn)行比較,從而確定分形塊的級(jí)數(shù)k。對(duì)于視點(diǎn)vp,如圖3(a)中的6,設(shè)w和h是視域屏幕的寬度7和高度8,fov是用于繪制的攝像機(jī)廣角,dv是T的地形區(qū)域中點(diǎn)和當(dāng)前視點(diǎn)的距離9。投影誤差PrjT可以通過(guò)下式計(jì)算prjT=max(w,h)2tan(fov/2)·ΔkG0dv<Escr-----(8)]]>如果當(dāng)前視點(diǎn)位于分形盒內(nèi)部,則將生成最大級(jí)的分形塊,即kmax。如果在外部,則使用式(8)檢測(cè)k級(jí)的分形塊是否滿足要求,如果不能符合式(8),那么同樣地再檢測(cè)(k+1),如果k+1>kmax,則需要訪問(wèn)T的子結(jié)點(diǎn)。
4)對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度在繪制階段,當(dāng)視點(diǎn)以較小的間距移動(dòng)時(shí),存在幀與幀之間的連貫性,也就是說(shuō),兩幀的繪制網(wǎng)格實(shí)際上變化不大。因此,在選擇用于繪制的afBm結(jié)點(diǎn)時(shí),不必每幀都自頂向下遍歷afBm子樹(shù)。把前一幀的結(jié)果作為本幀的初始值,進(jìn)行調(diào)整得到當(dāng)前幀的繪制結(jié)點(diǎn),從而加速了結(jié)點(diǎn)的調(diào)度操作。
采用五隊(duì)列的調(diào)度算法來(lái)管理afBm結(jié)點(diǎn)和生成分形塊,這五個(gè)隊(duì)列稱作Qr,Qp,Qg,Qd和Qm。Qr記錄用于繪制的afBm結(jié)點(diǎn),Qp保存Qr中繪制結(jié)點(diǎn)的所有父結(jié)點(diǎn)。Qg中的結(jié)點(diǎn)將會(huì)生成更高級(jí)別的分形塊,Qd中的結(jié)點(diǎn)將丟棄當(dāng)前的分形塊,轉(zhuǎn)而使用更粗糙的分形塊。把較小級(jí)別的分形塊緩存在fBm結(jié)點(diǎn)中,因此不需要再次進(jìn)行生成操作。Qm記錄可以合并四個(gè)子結(jié)點(diǎn)的父結(jié)點(diǎn)。Qg和Qm需要按照優(yōu)先級(jí)進(jìn)行排序,其它三個(gè)隊(duì)列則不需要排序。
在繪制的初始化階段,把a(bǔ)fBm-tree的根結(jié)點(diǎn)送入Qr,并清空其余的隊(duì)列。在繪制的每一幀,首先利用前面介紹的誤差估計(jì)公式(8),處理五個(gè)隊(duì)列中所有結(jié)點(diǎn),并調(diào)整到合適的隊(duì)列中。然后取出Qg中最高優(yōu)先級(jí)的結(jié)點(diǎn)T,通過(guò)式(8)決定將要生成分形塊的級(jí)數(shù)k。如果k≤kmax,把T移入到隊(duì)列Qr中;否則,將T分裂成四個(gè)子結(jié)點(diǎn),同時(shí)把T移入到隊(duì)列Qp。它的子結(jié)點(diǎn)按照同樣方法進(jìn)行處理。接著,取出Qm中最低優(yōu)先級(jí)的結(jié)點(diǎn)T,并檢測(cè)T的所有子結(jié)點(diǎn)是否都在隊(duì)列Qr或者Qd中。如果是的,則執(zhí)行合并子結(jié)點(diǎn)操作,過(guò)程為,移走T的所有子結(jié)點(diǎn),并把T移到隊(duì)列Qr。如果不是,那么對(duì)于在隊(duì)列Qd中的子結(jié)點(diǎn),降低它們當(dāng)前正在使用的分形塊級(jí)數(shù),并轉(zhuǎn)移到隊(duì)列Qr,然后把T移到隊(duì)列Qp中。對(duì)Qg和Qm中的結(jié)點(diǎn)交替進(jìn)行處理,直到Qr中的結(jié)點(diǎn)達(dá)到所需要的繪制要求。
5)通過(guò)GPU生成與繪制分形塊為了利用幀與幀的連貫性,根據(jù)每個(gè)繪制結(jié)點(diǎn)的生成級(jí)別,遞增式地生成需要的分形塊,并通過(guò)GPU加速這個(gè)過(guò)程。在生成新的分形塊之前,需要把a(bǔ)fBm參數(shù)和前一級(jí)的分形塊保存在顯存中供GPU使用。但是,如果分形塊生成后再?gòu)娘@存中讀回到主存,則傳輸代價(jià)會(huì)很高,甚至高于生成代價(jià),反而會(huì)降低整體的性能。在最新的圖形處理器中,允許在GPU中的頂點(diǎn)著色器(Vertex Shader,VS)訪問(wèn)紋理,因此可以把生成的分形塊以紋理方式保存在顯存中,然后在頂點(diǎn)著色器中讀出數(shù)據(jù)進(jìn)行操作,避免了傳送到內(nèi)存的代價(jià)。
如圖4所示,使用兩步法來(lái)生成和使用地形分形塊通過(guò)GPU的象素著色器(Pixel Shader,PS)1生成分形塊;通過(guò)頂點(diǎn)著色器2構(gòu)造地形網(wǎng)格并繪制。具體描述如下在生成分形塊階段,共需要三張紋理來(lái)生成級(jí)數(shù)為(k+1)的分形塊3,第一張紋理是第k級(jí)的分形塊4,用于計(jì)算第(k+1)級(jí)的分形塊的高度平均值??梢酝ㄟ^(guò)雙線性插值計(jì)算均值,為了讓圖形處理器自動(dòng)完成,只需要把OpenGL的紋理放大參數(shù)設(shè)置成GL_LINEAR即可。因?yàn)橹恍枰獙?duì)(k+1)級(jí)分形塊中新的頂點(diǎn)生成高度值,已有頂點(diǎn)的高度值可以從k級(jí)的分形塊中獲得,所以第二張紋理是一張掩碼表5。如果掩碼表上某個(gè)象素值為1,則在目標(biāo)分形塊上相應(yīng)位置處需要生成新的高度值;如果為0,則不需要生成新的高度值,只需要從第k級(jí)分形塊取出相應(yīng)值即可。第三張紋理是一張預(yù)處理的高斯噪聲圖6,用于計(jì)算分形噪聲。在繪制前,根據(jù)預(yù)先定義的概率值a,計(jì)算出一個(gè)高斯隨機(jī)值數(shù)組,并存儲(chǔ)成二維紋理的形式。生成分形塊時(shí),使用地形網(wǎng)格頂點(diǎn)的坐標(biāo)值在高斯噪聲圖中查找隨機(jī)值。
基于afBm的生成方法可以在以下兩種方法中選擇中點(diǎn)置換算法(MidpointDisplacement,MD)和帶限噪聲累積算法(Summing Band-Limited Noises,SBLN)。MD算法要比SBLN快得多,但是生成的質(zhì)量不如SBLN。在MD算法中,使用F+Δk·Ngauss計(jì)算新的高度值,這里是F相鄰高度值的平均值,Δk與公式(6)定義一致。SBLN算法實(shí)際上是一種頻譜合成,對(duì)一組噪聲函數(shù)相加而得,這些噪聲函數(shù)的頻率依次增大,振幅依次減小。如果需要計(jì)算高度值的頂點(diǎn)為vx,y,那么可以通過(guò)F‾+σ2Σi=0Octavew-iHn(wivx,y)]]>計(jì)算得到,這里w是個(gè)常數(shù),通常取為2。Octave也是一個(gè)常數(shù),控制著相加的噪聲函數(shù)的個(gè)數(shù)。n(t)是噪聲基函數(shù),這里使用基于高斯噪聲的Perlin函數(shù)。
分形塊生成之后,將和相應(yīng)的連接模板7一起通過(guò)頂點(diǎn)著色器構(gòu)造地形網(wǎng)格,并進(jìn)行繪制8。在頂點(diǎn)著色器中從分形塊中取出頂點(diǎn)的高度值,并從連接模板中確定頂點(diǎn)的二維位置,組合成實(shí)際的三維空間點(diǎn),最后構(gòu)造出繪制地形網(wǎng)格。
為了提高繪制質(zhì)量,可采用兩種紋理映射技術(shù),一種是預(yù)處理的紋理四叉樹(shù)技術(shù),另一種是過(guò)程式紋理映射技術(shù)。紋理四叉樹(shù)技術(shù)的基本思路是,給定一個(gè)很大的紋理,在預(yù)處理階段,建立一個(gè)紋理四叉樹(shù)結(jié)構(gòu),每個(gè)結(jié)點(diǎn)對(duì)應(yīng)原始紋理的一塊區(qū)域,所有四叉樹(shù)結(jié)點(diǎn)使用相等分辨率的紋理塊。把紋理四叉樹(shù)組織成Out-of-Core的形式,在繪制階段,將選擇合適的紋理結(jié)點(diǎn),并把數(shù)據(jù)從硬盤(pán)中調(diào)入主存,再送入顯存用于紋理貼圖。紋理四叉樹(shù)技術(shù)的更多細(xì)節(jié)可參見(jiàn)[Cline 1998]David Cline and Parris K.Egbert.Interactive Display of Very LargeTextures.Proceedings of IEEE Visualization 1998.1998,343-350。
紋理映射的另一個(gè)方案是在繪制時(shí)過(guò)程式獲得紋理信息,這一技術(shù)已廣泛應(yīng)用于虛擬繪制引擎中。首先,在預(yù)處理階段創(chuàng)建一張地形的材質(zhì)類型圖,包含草地、砂石、雪地等類型。繪制地形時(shí),把類型圖和各種材質(zhì)紋理通過(guò)多紋理映射方式,傳輸給GPU,計(jì)算出繪制時(shí)地形表面顏色。也可以預(yù)先計(jì)算好地形的光照和陰影圖,作為紋理送入GPU,進(jìn)行地形的明暗處理。
權(quán)利要求
1.一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法,其特征在于包括以下五個(gè)步驟1)建立地形的分形層次樹(shù)結(jié)構(gòu)給定一個(gè)地形模型,對(duì)地形進(jìn)行四叉剖分,建立四叉樹(shù)結(jié)構(gòu),每個(gè)結(jié)點(diǎn)對(duì)應(yīng)一塊地形區(qū)域,記錄著分形信息,包含afBm信息與重要的高度值,這種分形層次樹(shù)結(jié)構(gòu)稱作afBm-tree;2)根據(jù)閾值獲取afBm子樹(shù)在繪制前,根據(jù)用戶設(shè)定的閾值,從afBm-tree中抽取出afBm子樹(shù),閾值表示原始地形和生成地形之間允許的差異。3)根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù)首先根據(jù)用戶設(shè)定的隨機(jī)概率值,確定分形盒的最小、最大高度值;然后計(jì)算累加高度值在屏幕上的投影誤差;接著根據(jù)該投影誤差,確定結(jié)點(diǎn)的生成級(jí)數(shù);4)對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度首先初始化五隊(duì)列;然后在繪制的每一幀,調(diào)整五個(gè)隊(duì)列中所有結(jié)點(diǎn);接著分別對(duì)Qg和Qm中的結(jié)點(diǎn)交替進(jìn)行處理,直到Qr中的結(jié)點(diǎn)達(dá)到所需要的繪制要求;5)通過(guò)GPU生成與繪制分形塊首先通過(guò)GPU的象素著色器生成分形塊,然后通過(guò)GPU的頂點(diǎn)著色器構(gòu)造地形網(wǎng)格。
2.根據(jù)權(quán)利要求1所述的一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法,其特征在于所述的對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度方法可以是,首先把a(bǔ)fBm-tree的根結(jié)點(diǎn)送入Qr,并清空其余的隊(duì)列;然后在繪制的每一幀,調(diào)整五隊(duì)列中所有的結(jié)點(diǎn);接著取出Qg中最高優(yōu)先級(jí)的結(jié)點(diǎn),并移入到Qr或Qp中,它的子結(jié)點(diǎn)按照同樣方法進(jìn)行處理;隨后取出Qm中最低優(yōu)先級(jí)的結(jié)點(diǎn),并移入到Qr或Qp中;對(duì)Qg和Qm中的結(jié)點(diǎn)交替進(jìn)行處理,直到Qr中的結(jié)點(diǎn)達(dá)到所需要的繪制要求。
3.根據(jù)權(quán)利要求1所述的一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法,其特征在于所述的通過(guò)GPU生成與繪制分形塊的方法可以是,首先通過(guò)GPU的象素著色器生成分形塊,并使用三張紋理,分別是上一級(jí)別的分形塊紋理、掩碼表和高斯噪聲圖紋理;然后通過(guò)GPU的頂點(diǎn)著色器構(gòu)造地形網(wǎng)格,從分形塊中取出頂點(diǎn)的高度值,并從連接模板中確定頂點(diǎn)的二維位置,組合成實(shí)際的三維空間點(diǎn),最后構(gòu)造出繪制地形網(wǎng)格并進(jìn)行地形的繪制。
全文摘要
本發(fā)明公開(kāi)了一種基于分形層次樹(shù)的過(guò)程式地形快速繪制方法。該方法包括建立地形的分形層次樹(shù)結(jié)構(gòu)、根據(jù)閾值獲取afBm子樹(shù)、根據(jù)誤差精度估計(jì)結(jié)點(diǎn)的生成級(jí)數(shù)、對(duì)繪制結(jié)點(diǎn)進(jìn)行五隊(duì)列的優(yōu)化調(diào)度和通過(guò)GPU生成與繪制分形塊五個(gè)步驟。通過(guò)記錄地形的分形信息,構(gòu)造出分形層次樹(shù)結(jié)構(gòu)afBm-tree。它是對(duì)原始地形的一種逼近表示,通過(guò)調(diào)整生成閾值,可獲得不同的生成精度與壓縮率。afBm-tree可在繪制時(shí)生成視點(diǎn)依賴的地形網(wǎng)格,跳過(guò)龐大的地形層次細(xì)節(jié)模型數(shù)據(jù)的創(chuàng)建過(guò)程。與傳統(tǒng)算法相比,同樣數(shù)據(jù)大小的afBm-tree覆蓋范圍更廣,多級(jí)調(diào)度代價(jià)更低,在單CPU的機(jī)器上更有優(yōu)勢(shì)。本發(fā)明可應(yīng)用于地理信息仿真、虛擬場(chǎng)景漫游、游戲引擎等領(lǐng)域中。
文檔編號(hào)G06T15/20GK1932884SQ20061005360
公開(kāi)日2007年3月21日 申請(qǐng)日期2006年9月26日 優(yōu)先權(quán)日2006年9月26日
發(fā)明者華煒, 鮑虎軍, 張淮聲, 何治 申請(qǐng)人:杭州鐳星科技有限公司