劉芳,王寶華,王聃,劉宗堡
基于虛擬環境的實時降雨模擬研究
劉芳,王寶華,王聃,劉宗堡
降雨是一種十分重要的自然景物,在虛擬環境中提高降雨模擬的效率和真實感可以很大程度地提高虛擬環境的渲染速度和沉浸性?;诹W酉到y理論設計并實現了虛擬環境中的實時降雨模擬。通過分析雨滴粒子的實際運動過程,給出了雨滴仿真模擬的靜態屬性和運動模型。通過對雨滴運動行為的分析給出了雨滴模擬有風時雨滴自由降落運動模型和無風時雨滴勻速降落運動模型。就風對雨滴的干擾作用進行計算,給出了簡化的陣風和穩定風的數學模型。雨滴落入水面會形成水波紋,針對已有的水波紋模擬方法的不足,采用線性水波紋模擬算法進行模擬,經實驗驗證模擬效果真實自然,實時性高,有一定的實用價值。
虛擬環境;降雨;降雪;粒子系統
隨著虛擬現實技術的日趨成熟,虛擬環境中的自然景物模擬技術因其模擬本身的復雜性而得到廣泛關注[1]。雨是虛擬環境中較為常見的一種自然景物,降雨的模擬廣泛應用于游戲、漫游等虛擬現實領域,所以對于降雨模擬的研究有著非常重要的理論價值和應用價值。為了得到符合自然規律,真實可信的模擬效果,本文采用物理模型作為繪制算法的基礎,通過分析雨滴粒子的實際運動過程,給出了雨滴仿真模擬的靜態屬性和運動模型。通過對雨滴運動行為的分析給出了雨滴模擬有風時雨滴自由降落運動模型和無風時雨滴勻速降落運動模型。就風對雨滴的干擾作用進行計算,給出了簡化的陣風和穩定風的數學模型。同時,針對降雨過程的不規則性,本文采用有一定隨機性的粒子系統算法,由粒子的產生、演變和消亡來體現不規則景物的變換過程,利用簡單易繪制的基本體素來構造千變萬化的景物。如beaudoin在火焰三維骨架內建立速度場,模擬了火焰的燃燒過程[2];丁紀云基于粒子方法設計并實現了煙花的動態效果[3];吳繼承利用系統應用程序接口利用粒子系統獲得了粒子噴泉的動態景觀[4]。因此本文選擇以物理模型為基礎的粒子系統來實時模擬降雨過程,并對雨滴落入水面形成的水波紋采用線性模擬算法,最后獲得較為真實的模擬效果。
1983年Reeves提出粒子系統理論并提出用該理論模擬諸如雨、雪、煙霧、火焰等不規則物體[5]。該方法為不規則物體的模擬提供了很實用的一種思路,也是目前模擬不規則物體尤其自然景物的常規有效方法。粒子系統的基本思想是把不規則模糊物體看作是由眾多粒子組成的粒子團,粒子團中的每個粒子均有自己的屬性,粒子隨時間的推移不斷運動并根據所模擬的景物的動力學屬性來改變自身的狀態[6]。
在基于粒子系統方法進行模擬的過程中,如果對粒子處以相同的算法就會產生規則的圖形圖像[7],具有較強的人工痕跡,為了避免這個問題,在用粒子系統解決問題的過程中通常會引入“隨機處理方法”,這個隨機處理思想會體現在基于粒子系統方法模擬生成圖像的整個過程中,如圖1所示:

圖1 粒子系統方法生產單幀圖像的過程
在生成新粒子過程,例如粒子產生的位置、數量和時間都是隨機的;新粒子的靜態屬性包括粒子的大小、顏色、形狀以及生存周期等的設置都引入隨機變量,粒子的動態屬性如速度、加速度和方向等屬性也都隨機處理。最后粒子的死亡即粒子的消失處理:一種處理方法是在生命周期已經減少到零,則我們認為粒子消失;另一種是運動到渲染邊界外。對于第一種情況,就要在粒子屬性中的生命周期屬性的設置上引入隨機變量,才會產生自然死亡的畫面效果。也就是說在每個粒子的“產生”、“活動”和“死亡”過程中,都要進行隨機性處理。
基于粒子系統的方法模擬實時降雨,要充分考慮實時性,其逼真度等因素,因此,在對粒子系統深入理解的基礎上,通過雨滴模型的建立,雨滴粒子運動過程的精確計算及運動模型的簡化等方法來實現降雨模擬。
2.1 雨粒子的基本屬性:包括外觀、空間、運動、生命周期等。
在雨的形狀方面,國內外的學者做過很多嘗試,有使用線條來描述的,也有使用楔形或者立體四棱錐來描述的[8]。在實時渲染的系統中,靜態屬性在一定程度上要為運動模型服務,因此,本文采用正方形面片來表示雨滴粒子的形狀,利用OpenGL紋理映射和色彩融合技術生成真實的雨滴。
雨的大小:粒子的尺寸不是固定的,這里引入方差變量sizedelta來表示雨粒子的方差,同時引入[-1,1]上的隨機函數rand()來做隨機性處理,用sizesnow來表示雨粒子尺寸的均值。
第i個雨粒子的大小描述如下:

雨粒子的均值和方差都是經驗值,通過反復實驗,觀察場景的降雨的效果,本文確定的尺寸均值為 0.05f;尺寸的方差為0.01f。
雨滴產生的位置:為了便于計算,在不顯著影響實時性的前提下,對初始化分布算法進行適當簡化,將雨粒子分布區域由視錐所構成的棱臺簡化為眼前的一個長方體,即產生于虛擬場景中的矩形天空里。如圖2所示:

圖2 雨粒子產生位置
雨滴粒子的運動屬性包括位置和速度,這些設置在雨滴粒子的運動模型中進行闡述。
根據上述分析,雨粒子的數據結構如下:

2.2 雨粒子的運動模型
雨的動力學行為較為復雜,為了適合模擬的需要,本文對雨的行為做如下簡化假設,以方便模擬[9]。
(1)在下降過程中,下降速度較快的雨滴與下降速度較慢的雨滴相遇后不會發生聚合。
(2)在下降過程中,當空氣阻力超過了使雨滴保持整體的分子內聚力時,雨滴不會發生分裂現象。即雨滴的大小在下落的過程中不發生改變。
(3)假設雨滴在經過加速降落狀態后均達到勻速極限速度,并保持這一速度運動。
經過模擬比對建立了雨粒子的運動模型包括無風時雨滴自由降落運動模型,無風時雨滴勻速降落運動模型。
無風時雨滴自由降落運動模型:

模擬計算中取雨滴密度ρ=1000k g/m3,空氣密度ρ=1. 22kg/m3,時間步長h = 0.02s,重力加速度g= 9. 8m/s2,空氣運動粘滯系數v=1. 493776×10-5m2/s ,計算精度控制速度誤差小于0. 0002m/s時認為已達到勻速降落。根據數值模擬計算結果與實測雨滴速度比較,當雨滴直徑d <1.5mm時,雨滴形狀能近似保持圓球形。
無風時雨滴勻速降落運動模型:

上式為雨滴達到勻速降落時的極限速度分段公式,其中雨滴直徑d以mm為單位,速度v以m/s為單位。根據雨滴降落運動微分方程



它們是雨粒子不斷運動的動力。
2.3 雨粒子在風場作用下的模擬
雨在空氣中除了受到垂直方向的重力影響外,水平方向還會受到風力影響。本文給出兩種常見簡化的風力模型;陣風和穩定風。陣風指的是風力從零開始逐漸加大,達到頂峰后,然后再逐漸衰減至零。穩定風是指風力增加至一定程度后保持該強度并存在微小的變化最后逐漸衰減至零。
經簡化的兩種風力模型的數學表示如下:陣風函數:

穩定風函數:

其中,tc為時間常數,a、b、c、d、e、f可根據實際情況考慮賦予不同的數值,本文對陣風模型選取a=c=d=1,b=0;對穩定風a=c=e=f=1,d=0.3。
對粒子加上風場的影響后,能夠明顯增強虛擬環境的真實感。
2.4 雨粒子的繪制
基于上述運動模型,本文選擇圓球體作為雨粒子的基本形狀,但是OpenGL繪制球體會采用較多的三角形面片,這樣會增加粒子繪制的開銷,在同等條件下試驗,采用真實繪制球形粒子的幀頻為20幀/秒,而采用正方形粒子繪制的幀頻為80幀/秒,因此,雨粒子的繪制采用基于OpenGL二維紋理映射的方法來實現[10]。如圖3所示:

圖3 雨粒子的紋理映射
為了增加真實感可以再虛擬環境中加入霧化效果,距離視點較近的景物相對清晰,而遠處的景物會隨著距離的增加變得越來越模糊,使用霧化能夠顯著的增加視覺效果的真實感,深度感。本文對降雪環境的霧化模擬選擇的模式。f為霧化方程的混合因子。可用于模擬自然界的霧現象,使整個環境看上去較為均勻[11]。
當雨滴落入水面的時候,會在落點處的局部水面產生同心圓形狀的水波紋,傳統的水波紋模擬方法有基于波的分析[12]和基于物理模型的波浪模擬[13],基于波函數的水波紋模擬人工痕跡較為明顯,而基于物理模型的模擬速度較慢不適合實時渲染的虛擬環境,因此,本文在實現水波紋模擬時,采用線性模擬算法。假設,在某一時刻水面某點的振幅由該點周圍的8個點以及該點自身的振幅來決定。如圖4所示:

圖4 八點水波紋擬八點分布示意圖
建立水波線性計算公式(1):

理想條件下,可設水的阻力為 0。根據能量守恒定理,水的總勢能保持不變,即在任何時刻,所有點的振幅之和保持不變,因此對于to和t1時刻應有公式(2):


由于上式中的某些點的數值超出了范圍,因此要改用該點對應的邊界點的振幅值進行近似計算,例如可假設:

由此假設,進行第一步合并,可得:

由此假設,進行第二步合并,可得:


將上述解代入式(1),最終得到水波紋振幅線性計算公式(4):

從式(4)可推廣到一般情況,得出一般結論:已知某一時刻水面上任意一點的振幅,則該點下一時刻的振幅等于與該點緊鄰8點的振幅之和除以4并減去該點的原振幅。
水波的產生需要波源,在降雨模型中,水波的波源是雨滴,當雨滴落入水面后記錄下雨滴的水平坐標位置,就是水波的波源。另外,程序中WAVEY和WAVX的選取也與降雨模型中,雨滴的初始化產生的水平位置及大小有關。程序中的damp為衰減率,damp=1/2n通過實驗得知n的取值范圍在5~9之間較為合適。
本文采用圖形開發庫 OpenGL和 Visual Studio.NET 2010作為開發環境中,Windows XP操作系統作為開發平臺進行了實驗。渲染效果圖如下:虛擬環境中降雨渲染效果圖;如圖5所示:

圖5 虛擬環境中降雨渲染效果圖
引入風場之后有風時的降雨效果圖;
如圖6所示:

圖6 有風時的降雨渲染效果圖
雨滴流入水面,通過線性水波紋算法模擬出來的帶破碎效果的水波紋模擬。如圖7所示:

圖7 水波渲染效果圖
本文介紹了粒子系統,研究了基于粒子系統理論的實時降雨模型、分析了雨滴粒子的靜態屬性和動態模型,通過對雨滴粒子的運動行為的分析給出了無風時雨滴自由降落運動模型和無風時雨滴勻速降落運動模型,引入陣風和穩定風后,給出了風場模型。針對雨滴落入水面形成的水波紋問題進行研究,提出了適合實時渲染虛擬環境的線性水波紋模擬算法,模擬效果良好。
[1] 張芹,謝雋毅,吳慧中,等. 火焰、煙、云等不規則物體的建模方法研究綜述[J].中國圖象圖形學報,2000,5(3):186-190.
[2] PBeaudoin,SPaquet,PPoulin.RealisticandControllableFire Simulation[C].ProceedingsofGraphicsInterface,Ottawa,20 01.159-166.
[3] 丁紀云,陳利平,李思昆.基于 OpenGL的煙花動態模擬方法的研究與實現[J].計算機工程,2002,28(4):240-241 ,275.
[4] 吳繼承,江南.虛擬現實中粒子系統的設計與應用[J].計算機仿真,2004,21(11):131-140.
[5] Reeves W.T.Particle System-A Technique for Modeling A Class of Fuzzy Objects[J].Computer Graphics,1983, 17(2):359-376.
[6] 徐利明,姜昱明. 基于粒子系統與 OpenGL的實時雨雪模擬[J].計算機仿真,2005,22(7):242-245.
[7] 王靜秋.基于粒子系統的動態自然景物模擬的研究[D].南京:南京航空航天大學,1999.
[8] 邵雪輝,王寶鈞,王建國.關于雨滴問題的幾點思考[J].河北北方學院學報:自然科學版,2005,21(2):10-11.
[9] 羅維佳,都金康,謝順平.基于粒子系統的三維場地降雨實時模擬[J].中國圖象學報,2004 ,9(4):495-500.
[10] 左魯梅,黃心淵.紋理映射技術在三維游戲引擎中的應用[J].計算機仿真,2004,21(10):146-148.
[11] 劉芳,劉賢梅.基于粒子系統和霧化的實時降雪模擬[J].微計算機應用,2011,32 (7):1-5.
[12] 陳和平,王早.水波特效模擬原理及其快速實現方法[J],計算機應用研究,2005,22(4):252-253.
[13] 徐迎慶,齊東旭.基于物理模型的流水及波浪模擬[J].計算機輔助設計與圖形學學報.1997,9(2):191-192.
Tp391 文獻標志碼:A
2015.04.24)
1007-757X(2015)08-0034-03
劉芳(1983-),女,東北石油大學,計算機與信息技術學院,講師,碩士,研究方向:虛擬現實與多媒體技術,大慶,163318王寶華(1980-),男,大慶地質錄井一公司資料解釋評價中心,工程師,碩士,研究方向:計算機應用,大慶,163411王聃(1982-),女,哈爾濱石油學院,信息工程與計算機技術系,講師,碩士,研究方向:計算機應用,哈爾濱,150027劉宗堡(1982-),男,東北石油大學,地球科學學院,副教授,博士,研究方向:地質建模,大慶,163318