摘 要:以粒子系統(tǒng)為基礎(chǔ)、線元為基本繪圖單位,應(yīng)用牛頓運(yùn)動(dòng)定律分析并建立瀑布運(yùn)動(dòng)方程,進(jìn)行了瀑布場景的模擬。采用包圍盒與粒子聚類檢測相結(jié)合的方式以及參考射線反射原理實(shí)現(xiàn)了瀑布與障礙物的碰撞,并運(yùn)用OpenGL中的混合技術(shù)生成半透明場景,使可視化場景更加真實(shí)。實(shí)驗(yàn)結(jié)果表明粒子系統(tǒng)在模擬瀑布等不規(guī)則物體時(shí)具有很大優(yōu)勢。
關(guān)鍵詞: 粒子系統(tǒng);碰撞檢測;粒子聚類;混合技術(shù)
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2008)07-2194-03
Simulation of waterfall based on particle system
TANG Haoxuan, LI Na
(School of Computer Science Technology, Harbin Institute of Technology, Harbin 150001, China)
Abstract:
This paper presented a method of waterfall simulation, which based on the particle system, chose short line as basic unit, and used the Newton’s principle to analyze particles’ motion and then established equations. In order to make the scene more vivid, it used the bounding box method and cluster particles to detect collisions between particles and obstacles, and used the principle of light reflection to make response. Besides, it introduced the blend operation to produce a translucent scene. The results demonstrate that the particle system represents more superiority on simulating irregular objects.
Key words:particle system; collision detecting; cluster particles; blend operation
自然景物和自然現(xiàn)象的模擬一直以來都是計(jì)算機(jī)圖形學(xué)領(lǐng)域的研究熱點(diǎn),這是由模擬對象的不規(guī)則性以及復(fù)雜性決定的。粒子系統(tǒng)是模擬不規(guī)則物體一種行之有效的方法,自從于1983年由Reeves[1]提出以來,粒子系統(tǒng)方法就被廣泛地應(yīng)用于自然景物或自然現(xiàn)象的模擬。例如,徐利明等人[2]應(yīng)用粒子系統(tǒng)與OpenGL實(shí)現(xiàn)了實(shí)時(shí)雨雪的模擬;萬華根等人[3]通過求解NS方程的一個(gè)特殊解得到了非常真實(shí)的噴泉效果;管宇等人[4]利用粒子系統(tǒng)進(jìn)行了瀑布的實(shí)時(shí)繪制。除此之外,還有大量的應(yīng)用粒子系統(tǒng)進(jìn)行噴泉、瀑布模擬的成功例子[5,6]。
本文以粒子系統(tǒng)方法為基礎(chǔ),采用線元為基本單元進(jìn)行瀑布場景的繪制,為了使模擬效果更加真實(shí),還添加了碰撞效果以及應(yīng)用OpenGL 中的混合技術(shù)生成半透明場景。
1 粒子系統(tǒng)瀑布
1.1 粒子系統(tǒng)的基本原理
粒子系統(tǒng)不是一個(gè)簡單的靜態(tài)模形。其基本原理是采用許多形狀簡單的微小粒子(如球體、橢球、立方體、點(diǎn)、線等)作為基本圖元,以這些粒子充滿物體,使其呈現(xiàn)各式各樣的形狀。每一個(gè)粒子具有特定的屬性,如大小、位置、顏色、運(yùn)動(dòng)速度、生命值等,隨著時(shí)間的推移,粒子屬性動(dòng)態(tài)變化。系統(tǒng)中可以不斷有新粒子的加入,舊粒子的死亡。
通常用粒子系統(tǒng)模擬物體需要以下步驟:
a)分析物體的靜態(tài)特性,定義粒子所具有的屬性;
b)建立粒子屬性變化規(guī)律;
c)在系統(tǒng)中生成新粒子并給每個(gè)粒子屬性賦初值;
d)根據(jù)粒子屬性變化的動(dòng)態(tài)特性改變其屬性值;
e)刪除系統(tǒng)中已經(jīng)死亡的粒子;
f)按照當(dāng)前粒子屬性繪制所有粒子。
其中,步驟c)~f)反復(fù)循環(huán)即形成物體的動(dòng)態(tài)變化過程。
1.2 瀑布粒子的動(dòng)力學(xué)原理
1.2.1 瀑布粒子的運(yùn)動(dòng)分析
瀑布是從某個(gè)源頭傾瀉出的一道或者多道水流,在重力等外力的作用下飛流而下,其運(yùn)動(dòng)軌跡近似于平拋運(yùn)動(dòng)的拋物線,瀑布水流下落過程中可能會(huì)與周圍障礙物發(fā)生碰撞,改變運(yùn)動(dòng)方向。
1.2.2 瀑布粒子的屬性設(shè)置
粒子系統(tǒng)中每個(gè)粒子都有特定的屬性,通過粒子屬性變化來體現(xiàn)物體的變化。從瀑布粒子的運(yùn)動(dòng)情況來看,粒子應(yīng)該具有位置、速度、生存期、高度等屬性。此外,考慮繪制效果,粒子還具有淡化屬性。粒子的生存期和淡化屬性都可以作為判斷某個(gè)粒子是否應(yīng)該消亡的依據(jù)。
1.2.3 瀑布粒子的屬性變化
粒子源在每個(gè)時(shí)間步長內(nèi)生成大量粒子,這些粒子的初速度和運(yùn)動(dòng)方向隨機(jī)生成,同一時(shí)刻的粒子具有相似的速度和方向。瀑布粒子從生成后就在重力場中運(yùn)動(dòng),隨著時(shí)間的推移,其生存期不斷縮減,粒子淡化屬性也在以一定的速率更新,直至生存期為零或者淡化值達(dá)到某個(gè)閾值,則此粒子在系統(tǒng)中消亡,不必進(jìn)行繪制。
瀑布粒子運(yùn)動(dòng)遵循牛頓運(yùn)動(dòng)定律,其速度和位置變化規(guī)律如下面公式所示:
其中:g為重力加速度;f為空氣阻力等外力。在每個(gè)時(shí)間步長內(nèi),根據(jù)上述公式更新粒子的速度和位置,即可以得到粒子連續(xù)的運(yùn)動(dòng)效果。
如果在系統(tǒng)中添加風(fēng)力的影響,則可以根據(jù)風(fēng)速改變粒子運(yùn)動(dòng)速度。假設(shè)風(fēng)速為wind v(設(shè)為向量形式),則瀑布速度更新參照如下公式:
1.2.4 瀑布粒子的選取
粒子系統(tǒng)靈活性的一方面就體現(xiàn)在粒子圖元的選取上。比如用粒子系統(tǒng)模擬噴泉時(shí),可以采用圓球作為粒子,也可以選用點(diǎn)、線、多邊形、多面體等多種圖元。在粒子系統(tǒng)瀑布模擬中,考慮到模擬效果的真實(shí)感,選用線元作為瀑布粒子。線段的頭和尾分別為粒子當(dāng)前位置與前一時(shí)刻位置,線段長度即是兩位置的間距。在進(jìn)行繪制時(shí),保存粒子上一時(shí)刻的位置P0,計(jì)算粒子在當(dāng)前時(shí)刻的位置P1,P0與P1用線連接即可得到粒子的運(yùn)動(dòng)軌跡,如圖1所示。由于粒子位置P1已經(jīng)提前計(jì)算過,在下一時(shí)刻繪制時(shí)不需進(jìn)行重復(fù)計(jì)算,這樣也節(jié)省了部分計(jì)算開銷,提高了繪制效率。
1.3 瀑布粒子的碰撞檢測
碰撞理論是構(gòu)造可視化系統(tǒng)的一個(gè)重要部分,它可以使用戶以更自然的方式與可視化系統(tǒng)中的場景對象進(jìn)行交互。
瀑布水流在下落過程中會(huì)與周圍的巖石等障礙物發(fā)生碰撞,碰撞后水流運(yùn)動(dòng)方向發(fā)生變化。Wong [7]采用將所有粒子與障礙物進(jìn)行碰撞檢測的方法來模擬碰撞效果,這種算法雖然直觀但是效率低下。O’Brien等人[8]將一些具有相同屬性的粒子作為一個(gè)大粒子,小粒子的數(shù)據(jù)增量作為大粒子的數(shù)據(jù)增量,將整個(gè)大粒子與障礙物進(jìn)行求交計(jì)算,這種方法提高了計(jì)算效率,但是會(huì)發(fā)生大量粒子與障礙物提前相撞的情況。本文參考管宇等人[4]提出的粒子聚類與包圍盒相結(jié)合的方法進(jìn)行碰撞檢測,提高了繪制效率和準(zhǔn)確性。
每一時(shí)刻粒子源都生成大量粒子。這些粒子具有相似的屬性,如相近的初速度、相同的高度等。粒子聚類的建立就是以粒子屬性的相似性為基礎(chǔ)的,其準(zhǔn)則為,將具有相似屬性的粒子進(jìn)行劃分,每一組相似粒子看做一個(gè)整體。當(dāng)進(jìn)行碰撞檢測時(shí),如果劃分中某個(gè)粒子與障礙物包圍盒相撞,那么認(rèn)為這個(gè)劃分中所有粒子均與障礙物發(fā)生碰撞,反之認(rèn)為劃分中沒有粒子與障礙物發(fā)生碰撞。粒子與障礙物包圍盒相交時(shí)碰撞發(fā)生,表明粒子當(dāng)前狀態(tài)不可用,需要重新計(jì)算新的粒子狀態(tài)[9,10]。
如果粒子與障礙物發(fā)生碰撞,系統(tǒng)就需要做出相應(yīng)的碰撞響應(yīng)。系統(tǒng)中的主要碰撞發(fā)生在粒子與球面之間以及粒子與平面之間,采用射線反射原理,碰撞后粒子的運(yùn)動(dòng)軌跡變化如圖2所示。其中:N為法線;I(xiàn)與R分別代表入射和反射方向。
圖2是理想碰撞的情況,遵循了動(dòng)量守恒定律。但是實(shí)際中的碰撞必然有能量損失,此時(shí)可以通過一個(gè)衰減參數(shù)來調(diào)整粒子反射方向。本文將碰撞理論應(yīng)用到瀑布模擬中,得到了瀑布水流與球面障礙物及平面障礙物碰撞的效果,如圖3所示。
1.4 混合技術(shù)的應(yīng)用
在進(jìn)行瀑布模擬時(shí),為了使模擬效果更加真實(shí),采用了OpenGL中的混合技術(shù)。
混合技術(shù)通過指定一個(gè)混合函數(shù),使物體原始顏色與目標(biāo)顏色結(jié)合起來,最終使場景中某些物體產(chǎn)生半透明效果。除了需要激活混合操作函數(shù),主要的還是準(zhǔn)確計(jì)算混合因子值。在混合過程中,輸入片原(即源)的顏色值將分兩個(gè)階段進(jìn)行處理,與對應(yīng)的當(dāng)前所存儲(chǔ)像素(目標(biāo))顏色值進(jìn)行合成。首先,要指定如何計(jì)算源因子和目標(biāo)因子,這些因子是分別乘以源和目標(biāo)中R、G、B、A各分量后的RGBA四元組。然后,將兩個(gè)RGBA四元組中各對應(yīng)分量相加。從數(shù)學(xué)上說明即假定源和目標(biāo)混合因子分別為(Sr,Sg,Sb,Sa)和(Dr,Dg,Db,Da),下標(biāo)s和d表示源和目標(biāo)的RGBA值。那么混合后的RGBA值由(RsSrRdDr,GsSg+GdDg,BsSb+BdDb,AsSa+AdDa)給出該四元組各分量值最終截取[0,1]內(nèi)。主要的源和目標(biāo)混合因子在表1中列舉出來,在應(yīng)用時(shí)可以參考。其中RGBA值分別以下標(biāo)s和d表示。
激活混合操作函數(shù)前后的模擬效果如圖4所示。其中:(a)為未采用混合技術(shù)時(shí)的實(shí)驗(yàn)結(jié)果;(b)是采用混合技術(shù)后的實(shí)驗(yàn)結(jié)果。從兩幅圖可以看出,混合技術(shù)生成的半透明效果使瀑布更加真實(shí)。
2 實(shí)驗(yàn)結(jié)果及分析
經(jīng)過以上各小節(jié)的分析,添加天空紋理以及光照后得到了一個(gè)瀑布場景。圖5為在不同視角下觀察得到的瀑布場景圖。
當(dāng)瀑布粒子數(shù)不同時(shí),場景繪制效率會(huì)有所改變:粒子數(shù)增多時(shí),計(jì)算量增大,繪制效率降低。系統(tǒng)初始運(yùn)行時(shí),粒子數(shù)為各粒子源在每一時(shí)刻生成的粒子數(shù)之和,而后隨著時(shí)間的推移,不斷有新粒子生成,舊粒子消亡,當(dāng)系統(tǒng)穩(wěn)定時(shí),粒子數(shù)也趨于一個(gè)常數(shù)。
粒子系統(tǒng)瀑布模擬過程中,粒子源生成粒子數(shù)不同時(shí),程序剛運(yùn)行與穩(wěn)定后每秒繪制幀數(shù)比較如表2所示。
3 結(jié)束語
本文應(yīng)用粒子系統(tǒng)建立了瀑布模形,并且結(jié)合碰撞檢測理論刻畫了瀑布與障礙物發(fā)生碰撞的水花效果,運(yùn)用OpenGL的混合操作生成了半透明場景,為模擬結(jié)果增添了真實(shí)感。本文實(shí)現(xiàn)的粒子瀑布再一次證實(shí)了粒子系統(tǒng)在描述不規(guī)則物體方面的優(yōu)越性。
今后的工作集中在以下幾個(gè)方面。首先,隨著粒子規(guī)模的增加,粒子系統(tǒng)的計(jì)算量不斷增大,會(huì)影響系統(tǒng)的運(yùn)行效率,針對這點(diǎn),今后的工作需要考慮如何加快粒子處理速度。其次,運(yùn)用粒子系統(tǒng)進(jìn)行場景繪制時(shí)離不開各種渲染算法,因此研究使場景更加真實(shí)的渲染算法也是今后的主要工作。第三,本文僅僅考慮了瀑布與障礙物的碰撞,在今后的研究中將嘗試刻畫瀑布水流之間的融合、聚集現(xiàn)象。
參考文獻(xiàn):
[1]REEVES W. Particle systems:a technique for modeling a class of fuzzy objects[J].Computer Graphics,1983,17(3):359-375.
[2]徐利明,姜昱明.基于粒子系統(tǒng)與OpenGL的實(shí)時(shí)雨雪模擬[J]. 計(jì)算機(jī)仿真, 2005,22(7):242-245.
[3]萬華根,金小剛,彭群生.基于物理模型的實(shí)時(shí)噴泉水流運(yùn)動(dòng)模擬[J].計(jì)算機(jī)學(xué)報(bào),1998,21(9): 774-779.
[4]管宇,鄒林燦,陳為,等.基于粒子系統(tǒng)的實(shí)時(shí)瀑布模擬[J].系統(tǒng)仿真學(xué)報(bào),2004, 16(11):2471-2474,2478.
[5]趙靜謐,張慧,鄭國勤.基于粒子系統(tǒng)的噴泉模擬[J].計(jì)算機(jī)應(yīng)用研究, 2006,23(1):244-245, 249.
[6]馬駿,朱衡君.基于動(dòng)態(tài)紋理和粒子系統(tǒng)的噴泉模[J].北京交通大學(xué)學(xué)報(bào), 2005,29(1):90-94, 110.
[7]WONG A H K. Waterfalla particle system animation[D]. Computer science department cornell university, 1994.
[8]O’ BRIEN D,F(xiàn)ISHER S,LIN M.Automatic simplification of particle system dynamics[J].IEEE Computer Animation,2001,20(3):210-218.
[9]劉濤,王增波,李占利.碰撞檢測過程中的包圍盒技術(shù)及應(yīng)用研究[J].西安科技大學(xué)學(xué)報(bào), 2006,26(3): 395-399.
[10]馬登武,葉文,李瑛.基于包圍盒的碰撞檢測算法綜述[J]. 系統(tǒng)仿真學(xué)報(bào), 2006,18(4):1058-1064.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。”