潘澤云,丁利瓊,程鵬
(1.四川大學計算機學院,成都610065;2.四川川大智勝軟件股份有限公司,成都610065)
一直以來,自然場景的模擬與仿真都是計算機圖形學中的重要研究方向之一,特別是在三維場景中,對諸如雨雪天氣等大氣現象的重現方面,更是投入頗大。其原因在于,在對雨雪天氣的實施繪制中,雨點及雪花的數量巨大,降落時運動又受多方面因素影響,因而軌跡復雜,且形狀會發生些許扭曲變形,再加上多變的光照條件,確實極難給人以渾然天成之感。
目前,在模擬降雨方面有四種常見的方法[1],分別為:基于粒子系統的方法、基于圖像的方法、基于紋理的方法,以及綜合法。在模擬不規則模糊物體方面,粒子系統是公認的最為成功的圖形生成算法[2-3],已在諸多商業軟件中被廣泛采用,其動態的過程計算模型在配合以適當的物理模型的前提下,會將整個建模過程變得非常簡單,但是前期物理模型的準備需要對降雨的整個物理過程有足夠細致了解;基于圖像的方法是將整幅降雨效果圖加入場景,以時間為基準進行旋轉或替換從而達到動態的視覺效果[4-5],這樣做計算量少,實時響應程度高,但是缺少真實感,也無法體現光照風向等因素,也有從視頻中分離出雨點,并根據不同場景的光照和視點等因素調整其亮度的做法;基于紋理的方法使用連續的彎曲紋理模擬雨點的降落過程,是一種結合了物理運動模型、光照交互技術[5-6]和粒子系統的方法,光照是其中至關重要的因素。
本文將綜合上述三種方法,把不同方法的優勢方面糅合起來,從圖片中分離出雨點的基本信息以生成雨點紋理庫,并運用到粒子系統中進行實時渲染。圖片源自NVIDIA 的數據庫,該數據庫中包含了370 張以雨滴震蕩模型為基礎的生成于不同光源照射和視角的雨點圖片。為減少光照計算量,使用二維紋理數組存放已生成完畢的雨點數據庫,并借鑒GPU 粒子系統[7-8]的有關思想,充分利用GPU 的性能優勢,同時滿足真實感和實時性方面的要求。
自然界中,雨點自開始下落至最終落地,經歷了三個過程:受重力和風力的影響,與地平線呈某角度開始加速降落,在此同時又受到空氣阻力的作用使得該加速度不斷減小,其中空氣阻力絕對值隨速度絕對值的增大而增大;在某一時刻,豎直和水平方向的空氣阻力分力分別與該方向上重力、風力的分量合力相等,這時雨點速度達到最大值,稱該速度為收尾速度,在不考慮風力變化的前提下,雨點將保持收尾速度勻速降落直至與地面發生碰撞。
雨點降落過程中的受力示意圖如圖1,圖中坐標系為場景世界坐標系,v0為該時刻雨點的飛行方向,G、F、f1、f2分別為該時刻所受重力、風力、豎直和水平方向上的空氣阻力,α 為速度與水平方向的夾角。計算可得:


圖1 雨點降落過程中的受力分析
由此公式可知,α 在0°到90°之間時,風力與偏移角成某非線性反比關系,大致可得如下步驟以模擬風場中的降雨場景:
(1)確定最大粒子數量
(2)根據風向設置粒子系統的公共方向矢量
(3)根據風力大小計算夾角α
(1)收尾速度
當雨點處于不同速度時,會發生不同程度的形變,將處于收尾速度時雨點的等效半徑記為r。在等效半徑r 不同的情況下,收尾速度v 的計算有如下兩種情況[9]:
①r ?0.13mm 時:

②r ≥0.13mm 時:

其中,ρω與ρ 分別表示雨點與空氣的密度,g 表示重力加速度,C 是阻力系數,h 是雨點的扁率,C0與γ 為常數。
一般來說,雨點會在開始下落后的幾秒內完成加速過程達到收尾速度,而本文設置的視點位于地面上方數米處,故將雨點的初始速度設置為收尾速度,在風力的影響下速度會稍有起伏。風力大小為數個預設值,并隨時間變化對風力進行插值,更具真實感。
(2)初始位置
而對雨點的初始位置(x0,y0,z0)的設置,有兩個關鍵點:一是需要均勻分布;二是位置有隨機偏量。因此,將其設置為:

w,a,b,c 分別為繪制視口的寬度和三個常數。
本文利用GPU 高效的圖形處理能力實現粒子每一時刻速度與位置的更新,為確保這些更新計算可以正常映射到GPU 并行處理模型上,采用了布告板技術,將每一個代表了雨點的粒子延伸為平行于xOy 平面的矩形以適應渲染。不妨設矩形邊長為L,已知粒子坐標為(x0,y0,z0),則不難求出矩形的四個頂點坐標:

如此,就能將雨點紋理映射到矩形平面上融合形成雨點。雨點紋理源自NVIDIA 數據庫中,各種光照及視角條件下的16 位單色圖像。將數據存放在二維紋理數組中,利用多重渲染目標技術,可以減少切換頻率并加快計算,從而加快訪問效率。片元處理階段,對存儲位置和速度數據的紋理取樣,根據運動模型與當時刻參數計算雨點速度,并利用求得的速度與前一幀所在位置更新位置信息并寫入到片元顏色輸出數組。
雨點在降落過程中,因雨點、視點與光源三者的相對位置不斷變化,故而需要隨位置變化不斷確定新的紋理單元進行采樣,采樣索引為三個角度參數:θlight,θview,φlight,以此為依據從三維紋理中尋找最接近的紋理坐標。其中,θlight為光源方向與xOz 平面的夾角,θview為視點方向與xOz 平面的夾角,φlight為光源方向與視點方向在xOz 平面上的投影所成角,如圖2 所示。

圖2 相對位置關系示意圖
考慮到不同場景中,不同的光照強度及光源位置可能對雨點透明度的視覺效果造成不同影響,故對透明度進行設置,使其與光照強度成正比,和與光源的距離平方成反比。
在Intel Core i7-4790K CPU 4.00GHz,8GB RAM,NVIDIA GeForce GTX 780,分辨率1680×1050 像素顯示器的硬件條件下,依上述方法模擬降雨天氣。試驗結果如表1,效果圖如圖3。

表1 性能相關數據

圖3 不同粒子數效果圖
相較于純粹基于粒子系統、圖像或紋理之一的方法,本文所述方法采用真實受力及運動模型,較好地提高了真實度,實現了不同場景下的可復用性,又有效利用了GPU 高效的圖形處理能力,兼顧了運算效率,保證了渲染的實時性。
本文所述方法引入真實物理模型,其中風力大小、雨點等效半徑、光照強度及光源位置等條件都可以根據不同場景需要進行調整,實現對不同風力條件下,各種等級的降雨的實時模擬,可復用性較強;但若要進一步模擬不同時段中自然光照下的場景,仍需引入太陽光光照模型,且雨點和場景的交互性有待加強,如雨點落在不同位置產生的不同飛濺、漣漪效果等。在下一步的工作中,將繼續進行上述方面的研究,并嘗試向其他天氣進行延伸,以求完成對全年全天氣的模擬仿真。