摘 ?要:使用快速傅里葉變換來計算深海海浪的網(wǎng)格與法線信息,添加風力的影響構建深海海面的波形并計算法線信息;然后對Gerstner波形進行擠壓,構建靠近岸邊的海水波形,計算水體的法線。添加光照模型,豐富海面的紋理。借用Unity的著色器進行渲染,實時的展現(xiàn)出海面的波浪效果。在增加海面的采樣點的情況下,依然可以保持較好的時效性。提升了海平面的細節(jié),增強了視覺效果。
關鍵詞:快速傅里葉變換;海面;法線;渲染
中圖分類號:TP391.9;P731.22 ? ? ? ? ? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)21-0024-04
Sea Surface Simulation Rendering Method Based on FFT
ZHANG Junpeng
(Qingdao University,Qingdao ?266071,China)
Abstract:FFT(fast Fourier transform)is used to calculate the grid and normal line information of deep sea waves,and the influence of wind is added to construct the waveform of deep sea surface and calculate the normal line information;then Gerstner waveform is extruded to construct the seawater waveform near the shore and calculate the normal of water body. Add a lighting model to enrich the texture of the sea. Using Unitys shaders to render,real-time show the wave effect of the sea. In the case of increasing the sea surface sampling points,it can still maintain good timeliness. Promote the details of the sea level,enhance the visual effect.
Keywords:fast Fourier transform;sea surface;normal line;rendering
0 ?引 ?言
模擬自然景觀中的流體一直是計算機圖形學比較重要的研究方向,其中包括火焰、水流等常見的流體。國內外大量學者都在虛擬海洋環(huán)境可視化方面做了很多工作,因為海洋環(huán)境復雜多變,海面可能會受到風力、洋流等許多因素的影響,生成復雜的海浪波形,提升海面波浪可視化的實時性和真實性成為了國內外學者研究的難點。在渲染海面波浪紋理的方面,初期使用的方法是在海面網(wǎng)格上映射上一張法線貼圖,再通過紋理的擾動得到近似海浪的效果。之后有學者發(fā)現(xiàn)Gerstner波可以模擬水體的波浪,其波形的浪尖被可以較為真實得描繪出水體的波浪。1986年,F(xiàn)ournier與Reeves[1]第一次使用Gerstner波構建出生動的海洋模型。2001年,Jerry Tessendorf[2]提出可以在海平面模型上添加采樣點,使用快速傅里葉變換(FFT)生成多種波形相互疊加的逼真海面模型并提高了實時性。童若鋒等[3]對頂點波以及短峰波進行分類造型,模擬水波的大致形狀。徐迎慶[4]等使用Saint-Venant方程組來構建海浪模型。在海面光學模擬上,2016年,唐勇等[5]對近島海洋場景中的海水色彩進行實時繪制,2018年,Jeschke S,Sk?ivan T,Müller-Fischer M等[6]使用小波變換對水體變換進行離散化處理,該方法是FFT生成模型的拓展,可以準確計算出物體與流體直接的作用。
本人愛好研究游戲制作,為了在游戲虛擬海洋場景中渲染出完整真實的海面模型,并且添加合適的光線效果,需要構建一個完整的海面渲染可視化流程。本文首先使用FFT波浪方程計算法線貼圖用于生成深海海浪,之后使用變形的Gerstner波用于生成海岸邊的波浪模型,并添加光照模型,生成較為完善的渲染框架。
1 ?海面海浪模型及法線
逼真的海面模擬特效需要有海面網(wǎng)格的劃分,模擬真實的海洋波浪,也需要模擬光照在海平面上的折射與反射的效果,本文所用技術為可編程的著色器,使用FFT變換與Gerstner波形實時構建深海與岸邊波形與法線,并添加菲涅爾反射,渲染工作由Unity的shader編寫。
1.1 ?深海波浪模型
深海海面的模擬波浪可以看做是多個不同周期不同偏執(zhí)的正弦曲線的疊加而來:
y=Aisin(ωix+tφi) ? ? ? ? ? ? ? ? ? ?(1)
其中,Ai為正弦曲線的振幅大小,ωi=,L為正弦曲線的波長,φi為波的初相移動。通過正弦曲線疊加而來的波形看起來較為圓滑,比較適合繪制平靜的湖面,但是對于波濤洶涌的海洋,還需要繪制尖型的浪頭的較寬的浪槽,這里本文在正弦波的水平方向增加位移,使用Gerstner波形來描繪海浪的浪尖。
(2)
其中,x、z為平面坐標中的長寬,Di為波峰運動方向,φi為波的初相移,i為每個Gerstner波形的序號,根據(jù)公式可以看出在相位波的傳導過程中添加了的相位偏移進行擠壓波形,當Qi=0時,這時波形是一個簡單的正弦波,而當Qi=時候會得到波峰最尖的波形。在海洋統(tǒng)計學中,波浪振幅可以看成一個高度函數(shù)h(x,t),X是一個二維坐標(x,z),將Y中時間t去掉,使用h(x,t)替換可得:
Y=h(x,t)×cos(ωiDi×(x,z)) ? ? ? (3)
將公式添加一個虛部可得:
Y=h(x,t)×cos(ωiDi×(x,z))+isin(ωiDi×(x,z)) ? ? ?(4)
然后我們設α為以弧度為單位的參數(shù),根據(jù)歐拉公式e iα= cosα+isinα帶入式(4)可得到:
Y=h(x,t)eiωiDiX ? ? ? ? ? ? ? ? ? ? ? ? (5)
此公式為海洋波形的初步形式,這時我們就可以根據(jù)快速傅里葉變換可快速對大量的cos和sin波形求和,這樣我們可以得到Tessendorf所提到的海洋公式:
(6)
本文設置參數(shù)為水平方向的坐標,t為時間,函數(shù) 就得到在相應時間與地點的海平面的高度,這里可以看出就是對做的離散傅里葉變換:
(7)
其中,k為波的方向向量,Lx和Lz為定義海面的長寬,N和M為定義離散采樣的點數(shù),如果采樣的數(shù)值越高,波形就會越平滑,但是計算的時間也會隨之增加。通過式(6)可以看出,只要得到頻譜h(k,t),就可以對其進行離散傅里葉變換得到平面的高度。這里頻譜設置為:
(8)
其中, 為 ?的共軛復數(shù),k為 ?的模,ω(k)為角頻率ω和波長的關系。
本文設置參數(shù)ω(k)2=gk,k為波浪傳播的模,g為重力加速度,其中Tessendorf使用傅里葉頻譜函數(shù)創(chuàng)建初始時刻海面高度場的傅里葉頻譜海面高度模型表示為:
(9)
其中,ξr和ξi為兩個相互獨立的高斯隨機數(shù),Ph(k)為方向波譜:
(10)
A為頻譜的幅度,向量為傳播的風向,l=v2/g,這里l等于風速在v時候的最大波浪。這樣遠洋處的波形就形成了。
1.2 ?深海波浪法線計算
在求得深海海平面高度方程后,可以使用差分法求法線,根據(jù)已求得的高度公式 因此本文可求得波浪的空間梯度為:
(11)
而海平面參數(shù)方程可表示為:
P(x,z,t)=(x,H(x,z,t),z) ? ? ? (12)
海平面的次法線與切向量分別可以看作是海平面方程對x與z求偏導數(shù)求出,因此,次法線N1可以表示為:
(13)
海平面切向量T可以表示為:
(14)
因此海面的法線N可以由切向量T叉乘次法線N1求出法線:
(15)
海面的網(wǎng)格與法線的公式已經(jīng)得出,接下來就可以對公式進行計算了,但是使用標準DFT性能消耗較大,所以本文使用FFT進行計算。網(wǎng)格信息的采樣點數(shù)N、M會影響海面的渲染效率,但是本文借助GPU的強大計算性能和使用FFT并行計算大量頻率信息,可以實時有效地完成對海平面的渲染。
1.3 ?靠近岸邊的海面波浪模型
遠洋海浪可以看作是不同頻率不同方向的多種波形疊加而成,而近岸處的海浪則會因為速度差而造成偏轉,近岸處的海浪波形可以看作是波形收到了來自岸邊方向的擠壓而造成的。為了形成尖型的波峰,我們通過對橫軸進行擠壓這里使用x=x-bsin(x)來對橫軸進行擠壓,b為表示擠壓程度的參數(shù),我們設自變量為q,生成Gerstner波:
X(q)=q-b×sin(q)
可得到Gerstner波形如圖1所示。
因為在自然界中靠近岸邊的波浪往往是帶有傾斜角度的波浪,本文為了形成海浪傾斜的波形,將剛剛生成的Gerstner波形前半個周期進行擠壓,后半個周期進行拉伸,從而形成了向岸邊傾斜的波浪形狀。波浪的傾斜角度會隨著離岸邊的距離增加而增加,所以本文也構建不同傾斜角度的函數(shù),這里函數(shù)如下,函數(shù)圖像如圖2所示。
r=1+k×x2
這里r為擠壓的系數(shù)參數(shù),將模型轉換為3D情況下,只需添加方向向量即可,因為越靠近海岸的情況下,海浪的頻率就會變得越高,所以本文在將靠近海岸的海浪波形頻率增大。
1.4 ?靠近岸邊的海面波浪法線計算
由N=normailze()得,只需求得 ?便可以得到一個函數(shù)周期中的法線,根據(jù)之前的公式推導可得:
(16)
因此可得出海平面的法線向量,此時求得的海浪法線為2D的,若要求得3D的法線,只需要將法線乘以海浪的傳播方向dir即可:
(17)
這樣就求得了近海的波形與法線,但是此時的波形高度和法線都太平滑,所以在計算時這里使用噪聲圖對模型的UV以及法線進行不規(guī)則的微弱扭曲,得到不規(guī)則的扭曲后的波浪。
2 ?海面光照
為了渲染出自然界真實的海面效果,光照模型是必不可少的。光照模型是用于計算光源經(jīng)過物體反射、折射、散射后返回到渲染畫面的數(shù)學模型表示方式。隨著GPU的性能提升,光照模型的計算效率和效果都得到了極大的提升。自然界的水體可以看作是一個理想的鏡面模型,但不同的是,在光線到達此模型時主要分為兩部分:一個是穿透海面經(jīng)過折射的光線和被反射的光線,這兩種光線受到反射與折射的系數(shù)影響。
2.1 ?反射光
在鏡面反射中,入射角等于反射角,之前已經(jīng)求出海面波浪函數(shù)h(x,t)以及海面的法向量N,當知道射入海面的光線方向向量Li就可以得到反射后的向量Lo:
(18)
2.2 ?菲涅爾反射
菲涅爾反射描述了一種光學現(xiàn)象,當光照到物體表面時,一部分發(fā)生反射,另一部分則進入物體內部,發(fā)生折射或散射;相比直接的反射和折射計算,菲涅爾反射更接近真實情況。菲涅爾反射光學模型一般運用于水面效果,在自然界中,當看向近處的水面時,反射較少,而遠處的水面反射較多,即反射率隨著入射角的增大而增大,這種現(xiàn)象稱為菲尼爾效應。設F0為反射系數(shù),e為視線的方向,N為海面的法向量,在實時渲染時通常使用Schlick菲涅爾近似等式:
(19)
海平面因為不同的反射率而形成的光照模型是重要的海面紋理之一,在本文中,通過不同方向的法線、反射率而形成的海面紋理更加具有真實感和實時性。
3 ?實驗與結果
3.1 ?實驗環(huán)境與實驗效果
本文實驗采用的機器配置為:Intel Core i7-8750,雙核四線程,主頻2.2 GHz,內存16 GB,NVIDIA GTX1060顯卡,CUDA版本為10.2。海面網(wǎng)格信息與實時渲染由Unity引擎,通過c#以及cg著色器語言實現(xiàn),本文在渲染計算中,絕大部分是FFT海面網(wǎng)格以及法線的計算,采樣的點數(shù)為512×512,通過著色器的渲染,可以呈現(xiàn)出逼真的海面波浪紋理,實驗效果圖如圖3所示。
3.2 ?實驗對比結果
本文算法在渲染時的真實感和實時性都較好,影響渲染效率的主要因素是采樣點的個數(shù),將本文方法與投影網(wǎng)格方法做出對比如表1所示。
對比本文方法與投影網(wǎng)格法的幀數(shù)中可以看出,本文方法渲染效率略低于投影網(wǎng)格法,但是渲染出來的真實性較好,在采樣點增加的情況下幀數(shù)雖然有所下降,但是幀數(shù)依然可以保持在200幀以上,可以夠保證渲染的實時性。
4 ?結 ?論
本文使用FFT構建了深海海浪的網(wǎng)格與法線信息,然后對Gerstner波進行方向上的擠壓,通過海水波形并計算水體法線。通過添加光照模型,渲染自然界真實的海面效果。經(jīng)過對比,本文的渲染方法在真實性和實時性方面效果較好,但渲染效率略低于投影網(wǎng)格法。因此,在渲染效率方面作者將做出深入研究。
參考文獻:
[1] FOURNIER A,REEVES W T.A simple model of ocean waves [J].ACM SIGGRAPH Computer Graphics,1986,20(4):75-84.
[2] TESSENDORF J.Simulating ocean water [J].Simulating nature:realistic and interactive techniques,2001,1(2):5.
[3] 童若鋒,汪國昭.用于動畫的水波造型 [J].計算機學報,1996(8):594-599+642.
[4] 徐迎慶,蘇成,李華,等.基于物理模型的流水及波浪模擬 [J].計算機輔助設計與圖形學學報,1997(2):96-97.
[5] 唐勇,范福鼎,李穎.近島海洋場景海水色彩真實感實時繪制 [J].小型微型計算機系統(tǒng),2016,37(4):847-850.
[6] JESCHKE S,SK?IVAN T,M?LLER-FISCHER M.Water surface wavelets [J].ACM Transactions on Graphics,2018,37(4):742-755.
作者簡介:張軍鵬(1994—),男,漢族,河南新鄉(xiāng)人,碩士研究生在讀,研究方向:計算機視覺。