莊甘霖,陳秀宏
(江南大學(xué) 數(shù)字媒體學(xué)院,江蘇 無(wú)錫214122)
水面是現(xiàn)實(shí)世界里最常見的一種自然景觀,也是必不可少的組成部分,真實(shí)水面的模擬對(duì)于增加虛擬自然環(huán)境的沉浸感可以起到非常重要的作用。水面模擬在游戲、影視、虛擬現(xiàn)實(shí)各領(lǐng)域中有著廣泛的用途。作為自然景物模擬的重要內(nèi)容,對(duì)流體、水面的模擬正日益引起人們的關(guān)注。從科學(xué)的角度來(lái)看,自然景物的真實(shí)感以及建模與繪制的實(shí)時(shí)性是其難點(diǎn)所在。由于水的形狀是動(dòng)態(tài)的、不固定的,且極不規(guī)則,因此不能用靜態(tài)的幾何多邊形來(lái)表示;并且水面的光影效果取決于各種光線的反射和折射,它們的比例會(huì)根據(jù)視點(diǎn)位置的不同而不同,因此找到一種合適的模型來(lái)模擬真實(shí)效果并不容易。由于人們對(duì)視覺(jué)體驗(yàn)的要求不斷提高,在實(shí)現(xiàn)大規(guī)模、高精度、絢麗特效的同時(shí),高負(fù)荷的計(jì)算帶來(lái)的時(shí)間與資源的消耗又對(duì)實(shí)時(shí)性提出了嚴(yán)峻的考驗(yàn)。近年來(lái),基于波形分析的水面特效模擬在真實(shí)性與實(shí)時(shí)性上找到了一個(gè)不錯(cuò)的平衡點(diǎn),得到了廣泛的研究與應(yīng)用。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,Max在1981年提出把整個(gè)水面作為高度場(chǎng),通過(guò)正弦函數(shù)來(lái)模擬水面。在Max方法的啟發(fā)下,越來(lái)越多的人開始研究將水波曲面作為一個(gè)參數(shù)曲面來(lái)處理,然后用波形函數(shù)來(lái)描述水波的外觀形狀和運(yùn)動(dòng)效果。Peachey在此基礎(chǔ)上,使用了平面波方程,通過(guò)改變參數(shù)得到不同的水面效果。1986年Fournier和Reeves在波形函數(shù)中首次采用了Gerstner波函數(shù)。這種方法很好的解決了把波形作為高度場(chǎng)時(shí),不能很好的表現(xiàn)激烈的水面環(huán)境的不足,使得算法的適用環(huán)境更加廣泛。Perlin在文中還特別提到了模型的實(shí)際效果比它的物理意義更為重要。2001年,Tessendorf又對(duì)Gerstner波中的參數(shù)和疊加規(guī)律進(jìn)行了深入的研究。童若鋒借鑒了Peachey的算法,將水網(wǎng)格進(jìn)行更進(jìn)一步的細(xì)分,同時(shí)通過(guò)對(duì)水面網(wǎng)格的擾動(dòng)操作,來(lái)產(chǎn)生逼真的水面微觀效果,并且很好的解決了水面模擬不夠光滑的問(wèn)題。國(guó)內(nèi)對(duì)于基于Gerstner波模擬海浪有著廣泛的研究[1-3]。王海玲等[4]在2011年利用改進(jìn)的曲面熵算法對(duì)水面進(jìn)行動(dòng)態(tài)分區(qū),對(duì)不同區(qū)域施加不同程度的水面擾動(dòng),通過(guò)修正紋理映射位移的方法提高水面質(zhì)感。對(duì)于水波模擬中GPU技術(shù)的應(yīng)用,文[5-7]也各自做出了不錯(cuò)的效果。在能量衰減方面,陳和平等在2005年在算法中考慮增加了水波衰減效應(yīng)的模擬功能,方法是將每次計(jì)算出的新振幅按一定的衰減率減小,因移位運(yùn)算具有快捷性,衰減率選取1/16或1/32等。劉潔[8]等在模擬海浪時(shí)使用了線性衰減,波的振幅隨著時(shí)間的變化衰減至0。黃玲[9]等則根據(jù)波浪理論使用了風(fēng)速影響下的振幅A=4.416*10-3v2.5。2010年,侯學(xué)隆[10]等研究了基于方向譜的海浪合成方法,其中也根據(jù)波浪理論使用頻譜得到了單元波振幅的變化。
以往的常見水體特效模擬中,往往對(duì)振幅采取線性衰減或者無(wú)衰減。線性與指數(shù)的衰減是憑經(jīng)驗(yàn)、或者是適應(yīng)計(jì)算來(lái)構(gòu)造衰減方程,雖然渲染速度較快但是衰減不真實(shí),并不能展現(xiàn)水波傳播過(guò)程中真實(shí)的能量變化?;诓ɡ死碚摰恼穹兓匠屉m然有真實(shí)的數(shù)據(jù)指導(dǎo),但其計(jì)算方法過(guò)于復(fù)雜,使得渲染速度下降,再者它來(lái)源于波浪,模擬常見水體時(shí)很難得到適當(dāng)?shù)牟▌?dòng)效果。本文提出了一種基于Gerstner波模型的水面特效模擬方法。首先融入統(tǒng)計(jì)思想,針對(duì)單一Gerstner波波形變化較少的問(wèn)題,采用三個(gè)Gerstner波進(jìn)行疊加,尋找不同環(huán)境下合適的疊加方式;然后通過(guò)對(duì)水面真實(shí)波動(dòng)過(guò)程的研究,得到水波傳遞時(shí)能量衰減的物理模型,引入能量衰減因子α,建立嶄新的振幅隨時(shí)間衰減的方程,將方程代入Gerstner波函數(shù),使用新的模型來(lái)模擬水波;最后,引入反射率與透明度,對(duì)不同的環(huán)境與水體通過(guò)立方環(huán)境映射等技術(shù),得到更好的光影效果,呈現(xiàn)出更真實(shí)的水面特效。
捷克科學(xué)家Jozef Gerstner在1802年首次提出了精確描述任意幅度水波的模型,該模型描述了在水深比波長(zhǎng)大的情況下表面波的擺線運(yùn)動(dòng)。模型中的偏移量由下列方程決定
公式中X0=(x0,y0)是不受干擾的表面上的點(diǎn),A是振幅,K是波矢,它是一個(gè)水平向量,方向?yàn)樗▊鞑サ姆较?,k是其大小,其取值與水波的波長(zhǎng)有關(guān)
ω為水波的頻率,取值將在之后討論。
1986年,F(xiàn)ournier和Reeves將Gerstner波引入了計(jì)算機(jī)圖形學(xué),使用這個(gè)模型模擬水面上獨(dú)立波動(dòng)的點(diǎn)
式中:X = (xt-1,yt-1)——該點(diǎn)上一時(shí)刻的水平面坐標(biāo)值,Dx與Dy——單位波動(dòng)向量K/k在x、y方向上的大小。當(dāng)kA<1時(shí),波的形態(tài)是正常的,并且當(dāng)kA越接近于1時(shí),波峰更尖,波谷更平緩;當(dāng)kA>1時(shí),在波峰上將會(huì)形成環(huán),水波內(nèi)部將會(huì)展示出來(lái),達(dá)不到預(yù)期的真實(shí)效果。如圖1所示。
圖1 兩個(gè)不同kA的Gerstner波
因此通過(guò)選取不同的振幅與波長(zhǎng)可以得到尖銳程度不同的波形。
Gerstner波的波動(dòng)特性有很大一部分取決于它的頻率ω,根據(jù)流體動(dòng)力學(xué)知識(shí),波在水深為D的水體中傳播時(shí)
當(dāng)水體的深度與水波波長(zhǎng)相近時(shí),水體會(huì)對(duì)波的傳播有更強(qiáng)的阻尼作用。通常情況下,當(dāng)D>λ/2時(shí),由tanh函數(shù)的曲線接近于1,公式可簡(jiǎn)化為
從而有
g為重力加速度,取為9.8 m/s2。
單一的Gerstner波無(wú)法滿足對(duì)各種波形的需要,經(jīng)實(shí)驗(yàn)分析,3個(gè)Gerstner波的疊加可以在效果和運(yùn)算時(shí)間上得到很好的平衡
使用下面的公式得到疊加后水波各點(diǎn)的位置
從圖2可以看出,選擇合適的Gerstner波進(jìn)行疊加,可以得到所需的各種波形。
圖2 3個(gè)Gerstner波疊加效果
能量以波速在介質(zhì)中伴隨著波一起傳播。單位時(shí)間內(nèi)沿波速方向、垂直通過(guò)單位面積的平均能量稱為能流密度,也稱為波的強(qiáng)度,用I表示。能流密度是矢量,在各向同性均勻介質(zhì)中,能流密度矢量方向與波速μ方向相同。水波的能流密度為
公式表明,水波的能流密度 (波的強(qiáng)度)大小與振幅A的平方成正比,與頻率ω的平方成正比,與波速μ也成正比。
波在介質(zhì)中傳播時(shí),介質(zhì)總要吸收波的部分能量,因而波的強(qiáng)度將逐漸減弱,這種現(xiàn)象稱為波的吸收。實(shí)驗(yàn)表明,當(dāng)波通過(guò)距離為dx的介質(zhì)薄層時(shí),波的強(qiáng)度增量dI(dI<0)正比于入射波的強(qiáng)度I與介質(zhì)的距離dx,即
比例常數(shù)α是一個(gè)與介質(zhì)的性質(zhì)、溫度及波的頻率有關(guān)的量,稱為介質(zhì)的吸收系數(shù),也就是波的能量衰減因子。積分后得
式 (13)中I0和I分別為t=0和t=t處波的強(qiáng)度。在模擬水波時(shí),假設(shè)水波的傳播速度μ=1不變,則由式(11)與式 (13)可得振幅隨時(shí)間衰減的函數(shù)
函數(shù)曲線如圖3所示。
圖3 振幅衰減函數(shù)曲線
將式 (14)代入式 (10)有
對(duì)比于式 (10),式 (15)將振幅隨時(shí)間衰減的方程(式 (14))代入Gerstner波模型,使得在模擬水波時(shí)可以呈現(xiàn)出水波傳播過(guò)程中能量的衰減,并且引入了衰減因子α,可以根據(jù)環(huán)境、水體的不同選擇合適的α,得到更加真實(shí)的效果。
環(huán)境映射是一種常用的渲染反光表面的紋理映射技術(shù)。其基本原理是將反光物體所在的周邊環(huán)境存儲(chǔ)在稱為環(huán)境圖的紋理中。渲染物體時(shí)根據(jù)表面的反射向量到環(huán)境圖中采樣作為反射顏色。環(huán)境映射假定物體的尺度遠(yuǎn)遠(yuǎn)小于它與周邊環(huán)境的距離,是一種近似的方法。但如果使用得當(dāng)可以產(chǎn)生非常逼真的鏡面反射效果。
立方環(huán)境映射是環(huán)境映射技術(shù)的一種,在三維圖形渲染和游戲中得到廣泛的使用。如圖4所示,立方環(huán)境映射假想有一個(gè)巨大的立方體環(huán)繞在物體周圍。物體所在的周邊環(huán)境被映射到立方體的6個(gè)面上,然后存儲(chǔ)為六幅紋理圖像。這六幅紋理圖像就構(gòu)成了立方環(huán)境映射的環(huán)境圖。紋理采樣時(shí)假想從立方體中心發(fā)出一條沿反射向量R方向的射線,并計(jì)算該射線與立方體面的交點(diǎn),然后根據(jù)相交面確定是六幅圖像中的那一幅,再根據(jù)交點(diǎn)坐標(biāo)在該圖像中按照二維紋理的方式采樣。
圖4 立方環(huán)境映射
實(shí)現(xiàn)水面反射效果的一種常用方法是使用環(huán)境映射。如圖5所示,P是水面上一點(diǎn),N是P點(diǎn)處的單位法線向量,C是照相機(jī) (觀察者)的位置。
圖5 水面反射效果的實(shí)現(xiàn)
首先計(jì)算從P指向照相機(jī)的單位向量V
然后計(jì)算V相對(duì)于法線N的反射向量R
R與反射紋理平面的交點(diǎn)D
由于
所以
使用D作為紋理坐標(biāo)到反射平面中采樣得到P點(diǎn)處的反射顏色。
圖6中,d為水面到水底的平均深度,ηi與ηr分別為空氣與水的折射率,θi與θr分別為折射光 (入射光)與界面法線的夾角,由斯涅耳定律可知
則折射向量
將其單位化有
T與折射紋理平面的交點(diǎn)E
圖6 水面折射效果的實(shí)現(xiàn)
由于
所以
使用E作為紋理坐標(biāo)到折射平面中采樣得到P點(diǎn)處的折射顏色。
在得到P點(diǎn)的反射顏色Creflect與折射顏色Crefract后,通過(guò)下面的公式得到P點(diǎn)的最終顏色:
式中:Cambient、Cspecular與Cdiffuse——環(huán)境光、鏡面反射光與漫反射光,fspecular與fdiffuse——鏡面反射系數(shù)與漫反射系數(shù)。r與t——水面的反射率與透明度,根據(jù)不同環(huán)境下的不同水體,調(diào)節(jié)r與t可以得到理想的水面光影。
根據(jù)以上方法,模擬水面特效。采用 Windows XP平臺(tái)下的Visual C++6.0和OpenGL 2.0進(jìn)行繪制。硬件平臺(tái)為 Pentium Dual-Core E6700 3.2GHz,2GDDR3-1333內(nèi)存,顯卡為 ATI Radeon HD 4350。
圖7為模擬結(jié)果,其中圖7 (a)、圖7 (b)、圖7(d)分別為衰減因子α為0.01時(shí),時(shí)刻t分別為1秒、100秒和250秒時(shí)的場(chǎng)景截圖。圖7(c)、圖7(e)分別為線性衰減時(shí)刻t分別為100秒和250秒時(shí)的場(chǎng)景截圖。反射率為0.8、透明度為0.2。
從模擬結(jié)果來(lái)看,振幅的線性衰減過(guò)程是均勻過(guò)度的,顯得較為生澀,真實(shí)能量的衰減則較為柔和,更加自然。配合新的能量源產(chǎn)生的波形,便可得到理想的水面波動(dòng)效果。在1440×900的分辨率下,渲染幀數(shù)達(dá)到了224幀每秒,可以滿足各種游戲和動(dòng)畫場(chǎng)景的需要。
本文通過(guò)對(duì)真實(shí)水波物理特性的研究,得到了嶄新的水波傳播時(shí)能量衰減的方程。將其帶入Gerstner波模型模擬水波,使用反射率與透明度控制光影效果,得到了更加真實(shí)的水面特效以及不錯(cuò)的渲染速度。而且此方法簡(jiǎn)單,適用性強(qiáng),在多種軟、硬件平臺(tái)下都得到了理想的效果,有很強(qiáng)的通用性。
圖7 真實(shí)能量衰減與線性衰減的比較
下一步的工作重心將會(huì)放在水面刻蝕等光學(xué)效果以及浪花、漣漪等物理過(guò)程的研究。并進(jìn)一步挖掘GPU的潛能,提高渲染速度。
:
[1]LI Sujun,YANG Bing,WU Lingda.Modeling and rendering of ocean scene based on Gerstner-Rankine model [J].Journal of Engineering Graphics,2008,29 (2):77-82 (in Chinese). [李蘇軍,楊冰,吳玲達(dá).基于Gerstner-Rankine模型的真實(shí)感海洋場(chǎng)景建模與繪制 [J].工程圖形學(xué)報(bào),2008,29 (2):77-82.]
[2]FENG Kaiping,LIU Tao.Research on wave real-time simulation based on 3DGerstner wave [J].Journal of Engineering Graphics,2009,30 (5):52-57 (in Chinese). [馮開平,劉濤.基于3DGerstner水波的實(shí)時(shí)模擬研究 [J].工程圖形學(xué)報(bào)2009,30 (5):52-57.]
[3]HUANG Wei,WANG Changbo,XIE Buying.Real-time rendering of overturning waves based on Gerstner-wave model [J].Journal of University of Shanghai for Science and Technology,2009,31 (1):72-76 (in Chinese).[黃威,王長(zhǎng)波,謝步瀛.基于Gerstner波模型的海洋卷浪實(shí)時(shí)仿真 [J].上海理工大學(xué)學(xué)報(bào),2009,31 (1):72-76.]
[4]WANG Hailing,YIN Guisheng,ZHANG Jing,et al.Dynamic water surface simulation method based on improved surface entropy [J].Computer Engineering,2011,37 (6):24-26 (in Chinese).[王海玲,印桂生,張菁,等.基于改進(jìn)曲面熵的動(dòng)態(tài)水面模擬方法 [J].計(jì)算機(jī)工程,2011,37 (6):24-26.]
[5]LI Sujun,YANG Bing,GAO Yu,et al.GPU-based real-time rendering of large-scale ocean wave [J].Computer Simulation,2008,25 (5):190-194 (in Chinese).[李蘇軍,楊冰,高宇,等.基于GPU的大規(guī)模海浪實(shí)時(shí)繪制 [J].計(jì)算機(jī)仿真,2008,25 (5):190-194.]
[6]GUO Xingzhao,ZHANG Jun.Simulation of water based on GPU [J].Computer Simulation,2010,27 (1):218-221 (in Chinese).[郭新釗,張軍.基于圖形處理器的水面仿真 [J].計(jì)算機(jī)仿真,2010,27 (1):218-221.]
[7]LIU Xiaoping,XIE Wenjun.Research on the method of simulation of real-time water surface based on GPU [J].Journal of Graphics,2010,31 (1):79-83 (in Chinese).[劉曉平,謝文軍.實(shí)時(shí)水面模擬方法研究 [J].工程圖學(xué)學(xué)報(bào),2010,31(1):79-83.]
[8]LIU Jie,ZOU Beiji,ZHOU Jieqiong,et al.Modeling gerstner waves based on the ocean wave spectrum [J].Computer Engineering and Science,2006,28 (2):41-44 (in Chinese).[劉潔,鄒北驥,周潔瓊,等.基于海浪譜的Gerstner波浪模擬[J].計(jì)算機(jī)工程與科學(xué),2006,28 (2):41-44.]
[9]HUANG Ling,WANG Changbo,YANG Bo,et al.Photo-realistic modeling and rendering of curved wave [J].Computer Engineering and Applications,2009,45 (32):164-167 (in Chinese).[黃玲,王長(zhǎng)波,楊波,等.卷浪的真實(shí)感建模與繪制 [J].計(jì)算機(jī)工程與應(yīng)用,2009,45 (32):164-167.]
[10]HOU Xuelong,SHEN Peizhi,WANG Wenyun.Method of ocean wave synthesis based on directional spectrum [J].Journal of System Simulation,2010,22 (1):130-134 (in Chinese).[侯學(xué)隆,沈培志,王文惲.基于方向譜的海浪合成方法 [J].系統(tǒng)仿真學(xué)報(bào),2010,22 (1):130-134.]