莊甘霖,陳秀宏
(江南大學數字媒體學院,江蘇 無錫 214122)
常見三維場景中水面特效的模擬*
莊甘霖,陳秀宏
(江南大學數字媒體學院,江蘇 無錫 214122)
針對常見三維場景中水面特效真實感與實時性較難平衡的現狀,提出了一種基于Gerstner波模型的水面特效模擬方法。對振幅添加了隨機擾動,使得波動更具有變化;在將疊加后Gerstner波分為大波與小波的基礎上,通過改變不同類型波的參數可方便地控制波形;最后引入反射率與透明度以適應不同的環境與水體。實驗結果表明,新的模型不僅呈現出更加真實的水面特效,而且得到了比較理想的渲染速度。
水面特效;水波模擬;Gerstner波;隨機擾動;波形控制;反射率;透明度
水面是現實世界里最常見的一種自然景觀,真實水面的模擬對于增加虛擬自然環境的沉浸感起到非常重要的作用。水面模擬在游戲、動漫、影視以及虛擬現實等各領域中都有著廣泛的用途。從科學的角度來看,自然景物的真實感的建模與渲染的實時性是其難點所在。由于水的形狀是動態的、不固定的,因此不能用靜態的幾何多邊形來表示;并且水面的光影效果取決于各種光線的反射和折射,它們的比例會根據視點位置的不同而不同,因此找到一種合適的模型來模擬真實效果并不容易。由于人們對視覺體驗的要求不斷提高,高負荷的計算帶來的時間與資源的消耗又對實時性提出了嚴峻的考驗。近年來,基于波形分析的水面特效模擬在真實性與實時性上找到了一個不錯的平衡點,得到了廣泛的研究與應用。
Max N L[1]在1981年提出把整個水面作為高度場,通過正弦函數來模擬水面。Peachey D R[2]在此基礎上,使用平面波方程,通過改變參數得到了不同的水面效果。1986年,Fournier A和Reeves W T[3]在波形函數中首次采用了Gerstner波函數,克服了把波形作為高度場時不能很好地表現激烈水面環境的不足,使得算法的適用環境更加廣泛。2001年,Tessendorf J[4]又對 Gerstner波中的參數和疊加規律進行了深入的研究。童若鋒[5]的研究小組借鑒了Peachey D R的算法,將水網格作更進一步的細分,通過對水面網格的擾動操作來產生逼真的水面微觀效果,并且很好地解決了水面模擬不夠光滑的問題。劉潔等[6]在進行基于Gerstner波浪模擬時,研究了風力對于波形的影響,實現了海浪隨風速的變化而變化。王海玲等[7]在2011年利用改進的曲面熵算法對水面進行動態分區,對不同區域施加不同程度的水面擾動,通過修正紋理映射位移的方法提高水面質感。
本文提出了一種基于Gerstner波模型的水面特效模擬方法。首先,針對Gerstner波在固定振幅下波動不夠真實的情況,對振幅添加了隨機擾動,使得波動更具有變化;然后,采用三至五個Gerstner波進行疊加,尋求不同環境下合適的疊加方式,并將疊加的Gerstner波分為大波與小波兩類,通過改變不同類型波的參數可更加方便地控制波形;最后,引入反射率與透明度,對不同的環境與水體通過立方環境映射等技術,得到更好的光影效果,呈現出更真實的水面特效。
Gerstner在1802年首次提出了精確描述任意幅度水波的模型,該模型描述了在水深比波長大的情況下表面波的擺線運動。模型中的偏移量由下列方程決定:其中,X0=(x0,y0)是不受干擾的表面上的點,A是振幅,K是波矢,k是其大小,ω為水波的頻率,t為時間。

確立了Gerstner波模型后,選取不同的參數以及疊加方式可以得到理想的水面波動。
波矢K= (kx,ky),它是一個水平向量,方向為水波傳播的方向,k=2π/λ。
在傳統的模擬方法中,通常使用k值在XZ平面和YZ平面生成擺線,這種方法雖然計算量較少,但是使得Gerstner波在這兩個平面上的波動曲線完全相同,從而使XY平面上的各點圍繞各自原點振動,軌跡較單一。針對這個現象,本文分別在XZ、YZ平面內分別使用kx、ky來生成擺線。該擺線可以由如下的方法生成:在一個半徑為1/kx、圓心為M的圓盤內,距M為A處有一點P,當圓盤在XZ平面內通過M 點的軸旋轉前進時P點所形成曲線就是我們定義的擺線,如圖1所示。

Figure 1 Gerstner wave in XZplane圖1 XZ平面內的Gerstner擺線
在YZ平面內,圓盤的半徑則為1/ky。通過選取不同的kx與ky值進行搭配,可以得到XY平面上的點不同的振蕩形式,從而得到不同的波形。
振幅A反映波動的能量,控制著波動的幅度。通過擺線的繪制可知:當kA<1時,波的形態是正常的,并且當kA越接近于1時,波峰更尖,波谷更平緩;當kA>1時,在波峰上將會形成環,發生破碎,水波內部將會展示出來,達不到預期的真實效果。因此,通過選取不同的振幅與波長可以得到尖銳程度不同的波形。
使用傳統的Gerstner波模型模擬水面波動,依然面臨著水波較平緩的問題。為了解決這個問題,李蘇軍[8]提出將一高頻小振幅(小于水面波振幅的1/3添加到場景中)波作為背景添加到場景中,使其不至于影響整個水面波形,同時,增加水面的隨機性、復雜性。本文在此實驗基礎上,提出在波動的振幅A上添加一個-1/3~1/3振幅的隨機擾動:

其中,A為水波初始振幅,At為t時刻水波的振幅。此方法相較于之前的方法,不但減少了計算量,而且更好地增加了水面波動的隨機性和復雜性。
單一的Gerstner波無法滿足對各種波形的需要,經實驗分析,三至五個Gerstner波的疊加可以在效果和運算時間上得到很好的平衡。使用下面的公式得到疊加后水波各點的位置:

其中,Ki為第i個波的波矢,Dxi與Dyi分別為第i個波的單位波動向量Ki/k在x、y方向上的大小,ωi為第i個波的頻率,Ati則為第i個波隨機擾動下的振幅。
從圖2可以看出,選擇合適的Gerstner波進行疊加,可以得到各種波形。

Figure 2 Effect of three Gerstner waves圖2 三個Gerstner波疊加效果
本文在此基礎上,提出將疊加的Gerstner波分為大波和小波兩類。將該場景下合適的水面波動振幅下的波定義為大波,大波的頻率低于小波,使用大波來控制整體水面的波動形態。小波的振幅控制在大波振幅的1/10以內,頻率要高于大波,用來展示更細致的水體表面細節。在此分類下調節參數可以更方便地控制波形。添加隨機擾動時,不必對所有波都進行操作,過多的擾動會導致波形難以控制。如果需要整體波動上的多變,可將隨機擾動添加到某一大波,如果追求表面細節的細致,則將隨機擾動添加到某一小波。最終得到理想的波形。
浪花是三維場景中常見的水面效果。由于浪花很難用圖元表示,所以實現浪花效果的常用方法是使用粒子系統。其基本思想是采用大量的微小圖元作為浪花粒子來模擬不規則的浪花,賦予這些浪花粒子大小、形狀、顏色、生命及運動特征等屬性,這些屬性會隨著時間而變化,從而模擬出浪花的不規則運動。具體的實現過程分三步:(1)粒子初始化,賦予每個粒子初始屬性值;(2)粒子移動,每個粒子開始運動構成浪花不規則運動;(3)粒子的消亡和產生,舊的粒子消失,新的粒子誕生,粒子碰撞后融合。
被風吹起的水面波紋就是常見的漣漪效果,漣漪的形狀大致呈一些弧度很大的同心圓。通常用來實現漣漪效果的方法是對相位進行擾動,而且這一擾動在振源發出的射線上應具有一定的繼承性。具體的做法是把相位用極坐標表示,加入擾動,求出每個網格點的相位值,然后采用對周圍網格點的相位值進行雙線性差值的方法生成任意非網格點的相位值。
立方環境映射是環境映射技術的一種,在三維圖形渲染和游戲中得到廣泛的使用。如圖3所示,立方環境映射假想有一個巨大的立方體環繞在物體周圍。物體所在的周邊環境被映射到立方體的六個面上,然后存儲為六幅紋理圖像。這六幅紋理圖像就構成了立方環境映射的環境圖。紋理采樣時假想從立方體中心發出一條沿反射向量R方向的射線,并計算該射線與立方體面的交點,然后根據相交面確定是六幅圖像中的那一幅,再根據交點坐標在該圖像中按照二維紋理的方式采樣。

Figure 3 Cubic environmental mapping圖3 立方環境映射
實現水面反射效果的一種常用方法是使用環境映射。如圖4所示,P是水面上一點,N是P點處的單位法線向量,P0是照相機(觀察者)的位置。由于h=Dz=Pz+μRz,所以μ= (h-Pz)/Rz。使用D作為紋理坐標到反射平面中采樣得到P點處的反射顏色。

Figure 4 Reflection effects of water surface圖4 水面反射效果的實現


Figure 5 Refraction effects of water surface圖5 水面折射效果的實現
在得到P點的反射顏色Creflect與折射顏色Crefract后,通過下面的公式得到P點的最終顏色:

其中,Cambient、Cspecular與Cdiffuse分別為環境光、鏡面反射光與漫反射光;fspecular與fdiffuse為鏡面反射系數與漫反射系數;r與t分別為水面的反射率與透明度,根據不同環境下的不同水體,調節r與t可以得到理想的水面光影。
根據以上方法,模擬水面特效。采用 Windows XP平臺下的Visual C++6.0和OpenGL 3.0,并通過GLSL使用GPU進行渲染。硬件平臺為Intel Pentium Dual-Core E6700 3.2GHz,2 GB DDR3-1333 內 存,顯 卡 為 ATI Radeon HD 4350。
圖6為模擬結果,實驗均采用1 440×900的分辨率。圖6a為使用k生成擺線下的單一Gerstner波動下的水面,它在水平面兩個傳播方向上的分振動曲線是相同的。圖6b為分別在XZ、YZ平面內使用kx、ky生成擺線下的單一Gerstner波動水面,渲染速度可達153幀/s,波形有變化但是波動較平緩,水面細節很少,只適合于單一動力源(如單向風)下較平靜的內陸水體。圖6c為四個Gerstner波疊加下的水面,采用兩個大波和兩個小波疊加的方式,其中一個大波為另一個大波振幅的1/3,作為背景波,得到了較為復雜的波動,表面的細節也更豐富,渲染速度可達123幀/s。圖6d為在四個Gerstner波疊加的基礎上對其中一個大波添加了隨機擾動,使波形更加豐富,對水面細節也有一定的提高,渲染速度均值為111幀/s,高于一般游戲引擎下的水面模擬75幀/s,足以滿足游戲場景、虛擬現實應用的需要。圖6e為圖6d的線框圖。圖6f為反射率0.7、透明度0.3下的水面場景。根據不同環境與水體的要求,修改反射率與透明度,可以得到理想的水面光影效果。

Figure 6 Experimental results圖6 實驗結果
本文通過對Gerstner波參數與疊加方式的研究,對波動中的振幅添加了隨機擾動,并對疊加的Gerstner波進行分類控制,通過對水面光線反射與折射現象的研究,使用反射率與透明度控制光影效果,最終得到了更加真實的水面特效以及不錯的渲染速度。
下一步的工作重心將會放在水面刻蝕等光學效果以及浪花、漣漪等物理過程的研究。并進一步研究可編程找色器,繼續挖掘GPU的渲染潛能。
[1] Max N L.Vectorized procedural models for natural terrain:Waves and islands in the sunset [J].ACM SIGGRAPH Computer Graphics,1981,15(3):317-324.
[2] Peachey D R.Modeling waves and surf[J].ACM SIGGRAPH Computer Graphics,1986,20(4):65-74.
[3] Fournier A,Reeves W T.A simple model of ocean waves[J].ACM SIGGRAPH Computer Graphics,1986,20(4):75-84.
[4] Tessendorf J.Simulating ocean water[C]∥Proc of SIGGRAPH’01,2001:1.
[5] Tong Ruo-feng,Wang Guo-zhao.Waves modeling for computer animation[J].Chinese Journal of Computers,1996,19(8):594-599.(in Chinese)
[6] Liu Jie,Zou Bei-ji,Zhou Jie-qiong,et al.Modeling Gerstner waves based on the ocean wave spectrum[J].Computer Engineering &Science,2006,28(2):41-44.(in Chinese)
[7] Wang Hai-ling,Yin Gui-sheng,Zhang Jing,et al.Dynamic water surface simulation method based on improved surface entropy[J].Computer Engineering,2011,37(6):24-26.(in Chinese)
[8] Li Su-jun,Yang Bing,Wu Ling-da.Modeling and rendering of ocean scene based on Gerstner-rankine model[J].Journal of Engineering Graphics,2008,29(2):77-82.(in Chinese)
附中文參考文獻:
[5] 童若鋒,汪國昭.用于動畫的水波造型[J].計算機學報,1996,19(8):594-599.
[6] 劉潔,鄒北驥,周潔瓊,等.基于海浪譜的Gerstner波浪模擬[J].計算機工程與科學,2006,28(2):41-44.
[7] 王海玲,印桂生,張菁,等.基于改進曲面熵的動態水面模擬方法[J].計算機工程,2011,37(6):24-26.
[8] 李蘇軍,楊冰,吳玲達.基于Gerstner-rankine模型的真實感海洋場景建模與繪制[J].工程圖形學報,2008,29(2):77-82.
Simulating water effects in the common three-dimensional scene
ZHUANG Gan-lin,CHEN Xiu-hong
(School of Digital Media,Jiangnan University,Wuxi 214122,China)
For the problem that it is difficult to balance realism and real-time in modeling water,a new water effects simulation method based on Gerstner wave model is proposed.Firstly,random perturbations are added into the amplitude in order to make the fluctuations varied.Secondly,the superimposed Gerstner waves are divided into large waves and small waves,and it is more convenient to control waveform by changing the parameters of the different types of wave.Finally,the reflectivity and transparency are used to adapt to different environments and waters.The experimental results show that the new model not only presents a more realistic water effects,but also gets an ideal rendering speed.
water effects;waves simulation;Gerstner wave;random perturbations;waveform control;reflectivity;transparency
TP391.41
A
10.3969/j.issn.1007-130X.2014.04.030
2012-08-21;
2013-01-21
通訊地址:214122江蘇省無錫市濱湖區蠡湖大道1800號江南大學桔園30號樓526室
Address:Room 526,Building 30,Juyuan,Jiangnan University,1800Lihu Avenue,Binhu District,Wuxi 214122,Jiangsu,P.R.China
1007-130X(2014)04-0746-05
莊甘霖(1987-),男,山東濰坊人,碩士生,研究方向為計算機圖形學。E-mail:zglok@163.com
ZHUANG Gan-lin,born in 1987,MS candidate,his research interest includes computer graphics.