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