基于粒子系統(tǒng)和物理模型的實(shí)時(shí)飄雪模擬
利用計(jì)算機(jī)來(lái)模擬自然景物,一直是計(jì)算機(jī)圖形學(xué)領(lǐng)域中很令人感興趣的話(huà)題之一。而粒子系統(tǒng)正是一種描繪自然景物的強(qiáng)有力的工具。雪花由于具有一類(lèi)自然景物的共性,使得其可以很方便地由粒子系統(tǒng)描述并繪制出來(lái)。
我們知道,在計(jì)算機(jī)視頻游戲開(kāi)發(fā)等實(shí)際應(yīng)用領(lǐng)域中,對(duì)繪制速度的要求遠(yuǎn)大于對(duì)繪制景物的真實(shí)程度的要求,即不需要追求完美的逼真度,但必須保證一定的FPS(即Frames Per Second,每秒鐘能夠渲染的幀數(shù))。
我利用動(dòng)力學(xué)代數(shù)方程建立了風(fēng)場(chǎng)的速度場(chǎng)模型,以及相應(yīng)的粒子運(yùn)動(dòng)模型,并對(duì)傳統(tǒng)的粒子系統(tǒng)的繪制步驟進(jìn)行了兩點(diǎn)改進(jìn),最后利用微軟的DirectX平臺(tái)編寫(xiě)了演示程序,在保證一定真實(shí)程度的前提下,完全達(dá)到了實(shí)時(shí)性的要求。
1 物理場(chǎng)建模及粒子運(yùn)動(dòng)模型
自然界中的風(fēng)場(chǎng)是一個(gè)很復(fù)雜的場(chǎng),如果利用空氣動(dòng)力學(xué)對(duì)其進(jìn)行建模,勢(shì)必會(huì)在粒子系統(tǒng)更新粒子屬性時(shí)進(jìn)行大量的運(yùn)算,從而在很大程度上拖慢繪制速度。本文提出的風(fēng)場(chǎng)模型則具有模型簡(jiǎn)單、逼真度高、計(jì)算量小的優(yōu)點(diǎn)。
1.1 風(fēng)場(chǎng)的速度場(chǎng)建模
根據(jù)氣體分子運(yùn)動(dòng)理論,空氣是一種完全氣體。所以我們可以把單位體積的空氣看作剛性微粒,在有風(fēng)的條件下,其具有一定的質(zhì)量和運(yùn)動(dòng)速度。
設(shè)風(fēng)速矢量為Vw,則Vw可以表示為:Vw = Vw1 + Vw2,
其中Vw1 表示平均風(fēng)速矢量,Vw2表示隨機(jī)風(fēng)速矢量。
建立右手直角坐標(biāo)系xyz,其中y坐標(biāo)表示垂直高度。
由于在低空中風(fēng)速受垂直坐標(biāo)的影響不大,故|Vw|=f(x,z,t)。為了模擬出|Vw|隨坐標(biāo)位置及時(shí)間的變化,我們首先令g(t)是由三角函數(shù)集構(gòu)成的周期函數(shù),將其展開(kāi)為有限項(xiàng)傅里葉級(jí)數(shù),可得:

當(dāng)取a0=0、N=2、3、5,w=1時(shí),g(t)的函數(shù)圖像就可以呈現(xiàn)出很好的隨機(jī)感(見(jiàn)圖1):

圖1 g(t)函數(shù)圖
然后我們令h(x,z)= Ksin(ax)sin(bz), 其中a,b,K為比例系數(shù)。當(dāng)取K=1、a=0.1、b=0.1時(shí),h(x,z)的函數(shù)圖像如圖2所示:

圖2 h(x,z)函數(shù)圖
所以|Vw|可描述為:|Vw|=|Vw1|+Ksin(ax)sin(bz)g(t)。
設(shè)風(fēng)粒子運(yùn)動(dòng)方向與x軸夾角為 ,則

其中ax、az分別為x、z方向的單位矢量。
1.2 重力場(chǎng)及空氣阻力場(chǎng)建模
重力場(chǎng)和空氣阻力場(chǎng)的物理建模很簡(jiǎn)單,設(shè)a為空氣粒子的加速度矢量,則

其中g為重力加速度矢量,f為阻力系數(shù),為一正數(shù)。
1.3 粒子運(yùn)動(dòng)模型
由前述可知,我們可以把單位體積的空氣看作剛性微粒,同時(shí)雪花也可以看作是剛性粒子,設(shè)其質(zhì)量為M。由于空氣沒(méi)有具體形狀,可以取與雪花同樣形狀和體積的一部分空氣,令其質(zhì)量為βM(0<β<1)。這樣空氣粒子與雪花粒子的碰撞可視為完全彈性碰撞,可利用動(dòng)力學(xué)的知識(shí)列方程組如下:

其中V1為碰撞前空氣粒子的速度矢量,V2為碰撞前雪花粒子的速度矢量,V1'為碰撞后空氣粒子的速度矢量,V2'為碰撞后雪花粒子的速度質(zhì)量。由上述方程組,我們可以解得:

2 DirectX平臺(tái)下粒子系統(tǒng)的實(shí)現(xiàn)
2.1 DirectX平臺(tái)簡(jiǎn)介
DirectX是微軟公司推出的API,可讓以Windows、Windows Mobile/CE以及XBOX/XBOX360為平臺(tái)的游戲或多媒體程序獲得更高的執(zhí)行效率,加強(qiáng)3D圖形和聲音效果,并為設(shè)計(jì)人員提供一個(gè)共同的硬件驅(qū)動(dòng)標(biāo)準(zhǔn)。
2.2 粒子系統(tǒng)基本原理
粒子系統(tǒng)的組成元素,自然就是粒子。粒子系統(tǒng)就是指將許多形狀簡(jiǎn)單的微小粒子作為基本元素,然后聚集起來(lái)形成一個(gè)不規(guī)則的模糊物體,從而構(gòu)成的一個(gè)封閉的系統(tǒng)。每個(gè)粒子要保存自身的屬性并在每幀當(dāng)中動(dòng)態(tài)更新。一個(gè)粒子具有的特征主要包括質(zhì)量、位置、速度、受力、生存期,以及顏色、空間尺寸、形狀等。每個(gè)粒子都代表了自然場(chǎng)景中的一個(gè)最小單元,通過(guò)很多個(gè)粒子相互組合,效果疊加,粒子系統(tǒng)才能夠顯示五彩斑斕的美麗的自然場(chǎng)景。在本文中,雪粒子具有五種屬性,即位置矢量、質(zhì)量、速度矢量、加速度矢量和紋理ID。
2.3 粒子系統(tǒng)的繪制過(guò)程
粒子系統(tǒng)繪制過(guò)程的偽代碼描述如下:
Initialization of Particle System:
{
Initialize Wind //初始化風(fēng)場(chǎng)
Initialize CSnow //初始化雪花粒子
}
Update Procedure:
{
Calculate FPS and set amount //計(jì)算FPS并根據(jù)FPS設(shè)定粒子數(shù)目
Update snow particles //更新雪花粒子的動(dòng)態(tài)屬性
Deal with the boundary conditions //處理邊界條件
}
Render Procedure:
{
Set world matrix //設(shè)置世界矩陣
Set render state //設(shè)置渲染狀態(tài)
Render snow particles //渲染雪花粒子
}
2.4 粒子系統(tǒng)繪制過(guò)程中的優(yōu)化
首先,當(dāng)粒子到達(dá)邊界時(shí),直接將該粒子置為初始狀態(tài),即將其速度設(shè)為零值、位置設(shè)為起始點(diǎn),這樣就避免了對(duì)內(nèi)存的不停操作,從而提高程序的運(yùn)行效率。
其次,我們采用根據(jù)FPS動(dòng)態(tài)調(diào)整粒子數(shù)目的方法,即當(dāng)粒子數(shù)目過(guò)多而導(dǎo)致FPS過(guò)低時(shí),在不影響最終效果的前提下適當(dāng)?shù)販p少粒子數(shù)目,從而增加FPS。
2.5 程序運(yùn)行測(cè)試效果圖

圖3 程序運(yùn)行效果(進(jìn)行了反色處理)
在上述PC機(jī)上的程序運(yùn)行測(cè)試,測(cè)試結(jié)果表明,該程序FPS達(dá)到了65-70,完全滿(mǎn)足了實(shí)時(shí)性的要求。
3 結(jié)論
本文對(duì)基于粒子系統(tǒng)和物理場(chǎng)建模的實(shí)時(shí)飄雪過(guò)程模擬方法進(jìn)行了研究,沒(méi)有采用傳統(tǒng)的流體力學(xué)建模方法及OpenGL平臺(tái),而是采用了基本的物理學(xué)動(dòng)力學(xué)知識(shí)對(duì)風(fēng)場(chǎng)和雪花粒子及它們的相互作用進(jìn)行了建模,同時(shí)對(duì)傳統(tǒng)的粒子系統(tǒng)繪制過(guò)程進(jìn)行了適當(dāng)?shù)膬?yōu)化,并且利用微軟的DirectX平臺(tái)進(jìn)行了程序的設(shè)計(jì)和編寫(xiě)。
責(zé)編/萬(wàn)海濱
參考文獻(xiàn)
[1]REEVES W T. Particle Systems—a Technique for Modeling a Class of Fuzzy Objects[C] //SIGGRAPH, 1983, 17(3): 359-376.
[2] 王長(zhǎng)波.飄雪場(chǎng)景的實(shí)時(shí)模擬[D].杭州:浙江大學(xué),2006.
[3] 陳蕾,陳賀新,王潤(rùn)杰,勵(lì)映群.可視環(huán)境的仿真中粒子系統(tǒng)的應(yīng)用[C]//第五屆全國(guó)仿真器學(xué)術(shù)會(huì)論文集, 2004.
[4] 吳望一.流體力學(xué)[M].北京:北京大學(xué)出社,2004.
[5] 吳德馨 風(fēng)工程與工業(yè)空氣動(dòng)力學(xué)[M]國(guó)防工業(yè)出版社,2006.
[6] 王德才.精通DirectX 3D圖形與動(dòng)畫(huà)程序設(shè)計(jì)[M].北京:人民郵電出版社,2007.
[7] DUNN F,PARBERRY I.3D數(shù)學(xué)基礎(chǔ):圖形與游戲開(kāi)發(fā)[M].史銀雪,陳洪,王榮靜,譯,北京:清華大學(xué)出版社,2005.
手機(jī)體驗(yàn)

微信公眾號(hào)

微信小程序

手機(jī)版
-
微分享
