陸 曉
(浙江理工大學(xué) 信息學(xué)院,浙江 杭州 310000)
三維海面波浪場(chǎng)景模擬[1]是一種運(yùn)用計(jì)算機(jī)圖形學(xué)的理論與方法對(duì)海面場(chǎng)景進(jìn)行模擬仿真的技術(shù)。海面波浪模擬的研究重點(diǎn)是海面網(wǎng)格的形成、海面高度場(chǎng)的生成以及海面光照的模擬,通過對(duì)這三者的結(jié)合來模擬具有良好真實(shí)感的海面。
如今的三維海面場(chǎng)景建模技術(shù)已經(jīng)不單單是只是存在于科學(xué)家的研究之中,而是早已走進(jìn)了大眾的視野。在現(xiàn)實(shí)生活中,三維海面場(chǎng)景的應(yīng)用領(lǐng)域十分廣泛:在三維游戲開發(fā)、影視動(dòng)畫設(shè)計(jì)以及虛擬社區(qū)等領(lǐng)域,它的應(yīng)用都十分普遍。在三維游戲開發(fā)中,開發(fā)者通過建立逼真的海面波浪模型增強(qiáng)了游戲畫面的真實(shí)感;在影視動(dòng)畫設(shè)計(jì)方面,三維海面波浪建模技術(shù)的引入為觀影者帶來更好的觀影感受;在虛擬社區(qū)中,極其逼真的海面波浪場(chǎng)景更是為用戶帶來了無與倫比的親切感。
目前在視景仿真的運(yùn)用中,主要采取的建立海面場(chǎng)景的建模方式有很多。其中主要的建模方式有: Gerstner模型[2]、FFT模型[3]、流體力學(xué)模型[4]以及Perlin[5]噪聲模型等模型。其中Kass[6]等人通過求解簡(jiǎn)化Navier-Stokes的方程的解來模擬水波;Peachey[7]采用Sin函數(shù)和Cos函數(shù)進(jìn)行疊加的方法來模擬海面的波浪輪廓;Tessendorf[8]模擬海洋的方法是采用快速傅里葉變換(FFT)算法來實(shí)現(xiàn)高度場(chǎng)。海面網(wǎng)格創(chuàng)建也是一大熱點(diǎn),包括LOD[9]網(wǎng)格算法、多級(jí)LOD網(wǎng)格[10]、屏幕空間的網(wǎng)格自適應(yīng)方法[11],以及基于投影網(wǎng)格的Phillips譜海浪[12]等算法。其中Johanson[13]采用投影網(wǎng)格的算法。網(wǎng)格投影算法是根據(jù)觀察者的視覺習(xí)慣的一種算法,離觀察者遠(yuǎn)的網(wǎng)格比較稀疏;反之,則比較致密。王艷芬[14]等人在一種優(yōu)化的投影網(wǎng)格海面實(shí)時(shí)繪制方法中提出了屏幕空間的網(wǎng)格自適應(yīng)方法模擬精細(xì)化的海面。
利用投影網(wǎng)格來生成海面的一大特點(diǎn)就是不需要調(diào)整網(wǎng)格的數(shù)量,因?yàn)樗枪潭ú蛔兊?,不是?dòng)態(tài)變化的,這對(duì)于處理大范圍的視野時(shí)是比較好的,但是如果一旦觀察者的視野集中在一小塊區(qū)域時(shí),就會(huì)出現(xiàn)采樣過于密集,而導(dǎo)致走樣。圖1生動(dòng)地展示了大范圍的視野以及小范圍的視野。
圖1 觀測(cè)點(diǎn)不同時(shí)采集的不同精度的投影網(wǎng)格
總的來說,海洋表面的高度場(chǎng)產(chǎn)生算法只能是產(chǎn)生有限精度的高度場(chǎng)數(shù)據(jù),所以,如果視野過于狹小,就會(huì)產(chǎn)生網(wǎng)格采樣密度過高而導(dǎo)致走樣,所以要對(duì)這種情況進(jìn)行改進(jìn),得到一個(gè)相對(duì)較好的采樣精度。
因?yàn)橐朁c(diǎn)會(huì)隨著觀察者的觀測(cè)點(diǎn)的改變而改變,所以需要限制投影網(wǎng)格的精度,就需要對(duì)原來的投影網(wǎng)格算法做一些修正。換句話說,就是視點(diǎn)離水面較遠(yuǎn)時(shí),可以把采樣保持在比較高的精度,而當(dāng)視點(diǎn)離水面過近的時(shí)候就需要簡(jiǎn)化投影網(wǎng)格,使其采樣的精度變小。所以,提出如下改進(jìn)算法:
① 首先確定投影網(wǎng)格的最高的采樣頻率。根據(jù)FFT的理論,二維的FFT的周期為M,N,代表網(wǎng)格長(zhǎng)寬的是Lx,Lz,因此它的采樣點(diǎn)的頻率為:
Fwidth=M/Lx,Flength=M/Lz。
(1)
② 再利用Mprojector矩陣將視平面的4個(gè)頂點(diǎn)投影出來,如圖2所示。
圖2 調(diào)整投影網(wǎng)格的算法
③ 需要通過計(jì)算去得到采樣的實(shí)際頻率,采用采樣點(diǎn)的數(shù)量M,N除以其網(wǎng)格在世界坐標(biāo)系下的實(shí)際的長(zhǎng)度SAB,SAD,得到下式:
fwidth=M/SAB,flength=N/SAD。
(2)
④ 最后,需要對(duì)投影網(wǎng)格進(jìn)行調(diào)整,需要使投影網(wǎng)格的實(shí)際采樣頻率和最高頻率F相等。首先需要把實(shí)際的采樣頻率與設(shè)定的理想的F值相比較,假如fwidth
(3)
同理,對(duì)于投影網(wǎng)格的縱向采樣頻率flength也是采用相同的工作原理。
上述是對(duì)限制投影網(wǎng)格采樣精度的算法步驟,其中第4步,可以采取一種代替的算法去代替他,得到的算法有更好的渲染效率,具體改變是這樣的,改變網(wǎng)格的實(shí)際大小,利用減少采樣點(diǎn)的方法來達(dá)到限制采樣精度的效果。換句話說,就是當(dāng)fwidth>Fwidth時(shí),通過修改網(wǎng)格的橫向的采樣點(diǎn)數(shù)量,由公式表達(dá)就是M=Fwidth*SAB,具體如圖3所示。
圖3 減少采樣點(diǎn)后的圖示
采用對(duì)投影網(wǎng)格的采樣精度限制之后,當(dāng)視野向水面移動(dòng)之后,采樣點(diǎn)的數(shù)量或減少,網(wǎng)格精度降低,知道達(dá)到式子fwidth 圖4 采用限制采樣點(diǎn)數(shù)量之后與不限制采樣點(diǎn)時(shí)的比較 紋理動(dòng)畫也稱連續(xù)貼圖技術(shù),其主要思想是:首先,構(gòu)造一個(gè)矩形,并且為這個(gè)矩形創(chuàng)建一個(gè)紋理數(shù)組,當(dāng)這個(gè)三維物體開始運(yùn)動(dòng)時(shí)一系列的二維圖片作為創(chuàng)建的紋理數(shù)組的一個(gè)元素,再按其先后順序放置在數(shù)組中;其次,按照設(shè)定好的時(shí)間間隔連續(xù)切換矩形的紋理,當(dāng)其時(shí)間間隔非常小時(shí),并且圖片之間的差別也較小,這些連續(xù)的圖片就可以實(shí)現(xiàn)三維模型的運(yùn)動(dòng)效果。 直接通過FFT算法得到的海面過于光滑,與現(xiàn)實(shí)生活中的海面有一些差距,顯得不夠真實(shí)。真實(shí)的水面一般都會(huì)有一些波紋和跳動(dòng)的細(xì)節(jié),但是由于計(jì)算機(jī)資源是有限的,對(duì)于網(wǎng)格的精度是有限制的,所以只能模擬一些波長(zhǎng)較長(zhǎng)的波。所以,Bump Mapping的添加是有必要的,這樣就可以增強(qiáng)細(xì)節(jié)。但是在水面模擬中還是比較常用Normal Mapping仿真水紋的方式去動(dòng)態(tài)獲得Bump Mapping的效果。 Normal Mapping在仿真水紋時(shí)是利用紋理格式的 RGB 三通道得到一個(gè)三維的擾動(dòng)值,可將物體表面的每一個(gè)點(diǎn)轉(zhuǎn)化為一個(gè)單位長(zhǎng)度向量(Vx,Vy,Vz),其中的每一個(gè)變量都可以轉(zhuǎn)化成RGB值。Normal mapping的效果,如圖5所示。 一般的Normal mapping算法都是相對(duì)固定的,其水紋不會(huì)隨著時(shí)間的變化而變化,看起來并不真實(shí)。在此提出能夠使海面看起來隨時(shí)間改變而改變的場(chǎng)景,通過分析 Normal mapping算法的特點(diǎn),加入紋理動(dòng)畫的效果,實(shí)現(xiàn)波動(dòng)效果的海面。紋理動(dòng)畫是基于靜態(tài)網(wǎng)格的紋理采樣坐標(biāo)運(yùn)動(dòng),帶給觀察者一種水面運(yùn)動(dòng)的感覺。基于紋理動(dòng)畫的算法使得 Normal Mapping 紋理在水面上的位置不斷變化,海面網(wǎng)格的每個(gè)頂點(diǎn)的 Normal Mapping 紋理坐標(biāo)是不停運(yùn)動(dòng)的,給人感覺就像是水面上的高頻波紋也在不停地運(yùn)動(dòng)。本文采取3次采樣的方法,避免出現(xiàn)重復(fù)采樣帶來的重復(fù)感覺。這種方法主要是使水面的紋理隨著時(shí)間的變化而變化,即用變化的紋理坐標(biāo)對(duì)Normal Mapping進(jìn)行采樣,來提高水面的真實(shí)感。 圖5 突出細(xì)節(jié)對(duì)比 通過投影網(wǎng)格算法生成海面網(wǎng)格;利用FFT算法實(shí)現(xiàn)海面高度場(chǎng),并通過限制采樣頻率解決了視點(diǎn)在離水面較近時(shí)產(chǎn)生的走樣問題;利用圓屋頂模型建立球形天空盒,利用基于紋理動(dòng)畫的Normal Mapping算法改進(jìn)使得水面看起來更加真實(shí)。下面從幀率及海面波紋2方面分析: ① 幀率比較。實(shí)驗(yàn)結(jié)果考慮了在海面渲染過程中的幀率比較,主要考慮的是在限制采樣精度的投影網(wǎng)格與沒有通過限制的網(wǎng)格之間的比較,還有在沒有通過限制網(wǎng)格投影通過FFT生成的高度場(chǎng)幀率與改進(jìn)后的比較。比較結(jié)果如圖6所示。 通過改進(jìn)的投影網(wǎng)格和FFT高度場(chǎng)模擬的海面比傳統(tǒng)的投影網(wǎng)格和FFT高度場(chǎng)模擬的海面更好地減輕了計(jì)算機(jī)資源的壓力,提高了幀率。根據(jù)視點(diǎn)離海面的遠(yuǎn)近距離采用了限制采樣進(jìn)度的投影網(wǎng)格算法,當(dāng)視點(diǎn)遠(yuǎn)離海面時(shí),提高采樣進(jìn)度;反之,當(dāng)視點(diǎn)靠近海面時(shí),限制采樣頻率,解決了傳統(tǒng)投影網(wǎng)格法在視點(diǎn)離水面比較近采樣時(shí),頻率突然增加、導(dǎo)致采樣過于密集造成水面網(wǎng)格不平滑的現(xiàn)象,并且減輕計(jì)算機(jī)的計(jì)算壓力。 圖6 實(shí)驗(yàn)結(jié)果幀率比較 ② 海面波紋。通過FFT產(chǎn)生的海面高度場(chǎng)相對(duì)平滑,看起來不真實(shí),通過基于紋理動(dòng)畫的Normal Mapping算法改進(jìn)使海面看起來更加真實(shí),效果對(duì)比如圖7和圖8所示。改進(jìn)的思路是基于紋理動(dòng)畫算法使得Normal Mapping紋理在水面上的位置不斷變化,給人一種動(dòng)態(tài)的感覺。綜述所述,就是對(duì)每次隨著時(shí)間變化的紋理進(jìn)行采樣,產(chǎn)生動(dòng)畫的效果,凸顯細(xì)節(jié),增加真實(shí)感。 圖7 FFT直接產(chǎn)生的海面高度場(chǎng) 圖8 基于紋理動(dòng)畫的Normal Mapping算法改進(jìn) 在三維海面波浪場(chǎng)景建模中有兩點(diǎn)創(chuàng)新:第一,在傳統(tǒng)的投影網(wǎng)格算法中提出了在近視點(diǎn)的時(shí)候采用限制采樣頻率的投影網(wǎng)格算法,通過區(qū)分視點(diǎn)離海面的遠(yuǎn)近做出判斷,當(dāng)視點(diǎn)遠(yuǎn)離海面時(shí)提高采樣頻率,當(dāng)視點(diǎn)靠近海面時(shí)限制采樣頻率,通過這種算法減輕了計(jì)算機(jī)資源壓力并提高了計(jì)算效率;第二,在渲染海面場(chǎng)景中,在原有的Normal Mapping算法中融入紋理動(dòng)畫的概念,使得海面波浪紋理更加突出,提高了海面波浪浮動(dòng)的視覺感受,提高了海面模擬的真實(shí)感。2 基于紋理動(dòng)畫的法線貼圖算法改進(jìn)
3 實(shí)驗(yàn)結(jié)果及分析
4 結(jié)束語