摘 要: 結(jié)合面向?qū)ο?/a>的分析和設(shè)計(jì)方法,提出了面向?qū)ο蟮?、參?shù)化的通用粒子系統(tǒng)模型和架構(gòu)設(shè)計(jì)。
關(guān)鍵詞: 粒子系統(tǒng) 自然模擬 面向?qū)ο?nbsp; 參數(shù)化
自1983年W.T.Reeves將粒子系統(tǒng)引入到計(jì)算機(jī)圖形領(lǐng)域后,國內(nèi)外有關(guān)粒子系統(tǒng)的研究和應(yīng)用已經(jīng)比較廣泛。粒子系統(tǒng)比較適合對模糊自然景物的模擬,如云、雨、雪、閃電、火焰、爆炸等。
粒子系統(tǒng)基本思想包括:自然景物可以認(rèn)為由有限的、離散的空間粒子(particle)組成;粒子具有一些自然屬性(空間位置、速度、加速度、亮度、溫度等);粒子是有一定壽命的,具有產(chǎn)生、變化、滅亡的過程;在不同應(yīng)用中,粒子的屬性變化大多遵循一定的規(guī)律,這種規(guī)律可以采用準(zhǔn)確或近似的數(shù)學(xué)模型來描述。
以往的研究通常是針對某種具體的模擬對象進(jìn)行基于粒子系統(tǒng)方法的建模及解決計(jì)算機(jī)模擬實(shí)現(xiàn)中的算法或性能問題。本文通過研究粒子系統(tǒng)的原理,分析一些典型粒子系統(tǒng)應(yīng)用的建模特點(diǎn),提出一種通用的、參數(shù)化的粒子系統(tǒng)模型,并采用面向?qū)ο蟮脑O(shè)計(jì)方法給出了架構(gòu)分析設(shè)計(jì);并給出了用在解決真實(shí)感計(jì)算問題上的輕量級粒子的設(shè)計(jì)方法。
1 面向?qū)ο蟮膮?shù)化粒子系統(tǒng)建模
1.1 粒子、粒子系統(tǒng)、粒子系統(tǒng)應(yīng)用
在粒子系統(tǒng)理論中,被模擬的對象由空間中離散的粒子構(gòu)成。粒子可以是空間中的一個點(diǎn),也可以是一個有特定形狀的圖形單元。
粒子系統(tǒng)應(yīng)用(Particle System Aplication)是指采用粒子系統(tǒng)的方法,對模糊自然景物或?qū)ο筮M(jìn)行的計(jì)算機(jī)圖形模擬應(yīng)用。在一個粒子系統(tǒng)應(yīng)用中往往包含了一個或多個粒子系統(tǒng)。例如瀑布模擬,整個系統(tǒng)可以分成二個粒子系統(tǒng)。其中一個模擬下瀉的瀑布(瀑布系統(tǒng)),另一個用來模擬瀑布下水花四濺、漣漪遍布的水面(水面系統(tǒng))。這二個粒子系統(tǒng)具有獨(dú)立性,例如它們所模擬的粒子是不同的,粒子屬性的變化規(guī)律是不同的,其粒子的圖形顯示也是不同的;同時這二個粒子系統(tǒng)又存在一些關(guān)聯(lián)性,如瀑布系統(tǒng)中的粒子在到達(dá)水面后將從瀑布系統(tǒng)中消失(死亡),但同時給水面系統(tǒng)增加了一個新的粒子。
1.2 粒子的屬性
在粒子系統(tǒng)中,粒子一般具有空間位置、速度、加速度、大小尺寸、顏色、亮度、熱度、形狀、生存期等屬性。例如在采用粒子系統(tǒng)進(jìn)行雪景模擬中,粒子就代表了一個實(shí)際的雪花,粒子的屬性就模擬了一個真實(shí)雪花的物理屬性,其屬性的變化模擬了真實(shí)雪花的變化。
1.3 粒子的產(chǎn)生
在粒子系統(tǒng)中,粒子是不斷產(chǎn)生、變化和滅亡的。在某個時刻(Ti),新產(chǎn)生的粒子數(shù)量可以用以下公式描述:
NP(Ti)=MNP(Ti)+Rand( )*VNP(Ti)
其中:MNP(Ti)為在Ti時刻新產(chǎn)生粒子數(shù)目的平均值;VNP(Ti)為在Ti時刻新產(chǎn)生粒子數(shù)目的方差;NP(Ti)為在Ti時刻新產(chǎn)生的粒子數(shù)目;Rand( )為在[-1.0,1.0]上均勻分布的隨機(jī)函數(shù)。
平均值和方差可以是常量,也可以是基于Ti的變量。
在粒子系統(tǒng)中,對于新產(chǎn)生的粒子,其初始屬性可以根據(jù)不同的模擬對象特點(diǎn)進(jìn)行賦值。例如可以按以下公式賦值:
Property(Ti)=MProperty(Ti)+Rand( *VProperty(Ti)
公式中:MProperty是該屬性的均值,VProperty是該屬性的方差。以雪花系統(tǒng)為例,粒子的初始位置可以將空間一個平面(或三維空間)作為基準(zhǔn),隨機(jī)分布。再例如煙花模擬中,煙花的各個粒子在某個時刻誕生在空間一個點(diǎn)(或者非常小的空間內(nèi)),并且速度的絕對值和方向矢量可以用上述公式來表示。
1.4 粒子更新
在自然景物模擬中,粒子的屬性將隨時間發(fā)生變化。變化的類型大致分為以下幾種:
(1)力學(xué)作用。如重力、風(fēng)力、浮力等,將對粒子的位置、速度、加速度等屬性產(chǎn)生影響。
(2)熱作用。如自然冷卻、化學(xué)作用、熱傳遞等,將影響溫度、亮度、透明度等屬性。
(3)形狀變化。如爆炸、分裂等,導(dǎo)致粒子增多或影響到粒子尺寸、形狀、質(zhì)量等屬性。
對于力學(xué)作用,基本可以采用牛頓定律來描述。在具體應(yīng)用中,根據(jù)實(shí)際情況還可以采用近似簡化的表示。例如在雨景、雪景的模擬中,模擬空間范圍時,可以認(rèn)為粒子的下落在達(dá)到一定速度后,是按勻速運(yùn)動的(VP(Ti)=VP(Ti-1))。
對于熱能相關(guān)的變化,可以認(rèn)為其爆炸、獲得能量、散熱的過程按不同的速率曲線進(jìn)行。例如在焰火模擬中,有些粒子可以認(rèn)為是瞬間充分燃燒,能量獲得最大值,然后按線性或非線性的散熱曲線冷卻。而有些粒子先在一個相對長的時間內(nèi)逐漸獲得熱能,然后再按某種下降曲線冷卻(變暗)。對于通用的參數(shù)化粒子系統(tǒng), 就需要設(shè)計(jì)滿足不同需要的模型結(jié)構(gòu),在應(yīng)用時只要通過參數(shù)選擇不同的熱能變化類型即可。
對于形狀變化,往往涉及到新粒子的產(chǎn)生或消亡。例如焰火的爆炸,可以理解成一個粒子在消亡的同時有一批粒子產(chǎn)生并同時發(fā)生能量的變化。再如大片的雪花自然分成二片,意味著一個粒子的消失,二個新粒子的產(chǎn)生。
1.5 粒子死亡
既然有粒子的產(chǎn)生和變化,必然就有粒子的消亡。
粒子的消亡有以下幾種類型:
(1)空間位置靜止。例如在雪景模擬的粒子系統(tǒng)中,當(dāng)雪花降落到地面后,雪花的空間位置不再變化,此時它自身的視覺效果可以通過地面的其他方法來模擬,代表雪花的粒子就沒有存在的必要了。
(2)視覺效果消亡。例如在煙火、火焰模擬的粒子系統(tǒng)中,粒子有速度、熱能、溫度。粒子在運(yùn)動的過程中,不斷地散發(fā)熱能,其亮度因此也在變化。當(dāng)其亮度小于一定的閾值時,雖然粒子可能還在空間運(yùn)動,但相對其背景已經(jīng)影響不到視覺模擬。在這種情況下,該粒子對模擬已經(jīng)沒有價值,可以消亡。
(3)生存期結(jié)束而消亡。有些粒子系統(tǒng)中,粒子有一個生存期屬性。在到達(dá)生存期后,粒子也就可以死亡。生存期條件的采用又分二種情況:一種是在物理模擬中,本身就存在比較嚴(yán)格的生存期條件,例如生物對象;另一類是在物理系統(tǒng)的建模中,抽象出一個生存期的屬性來作為一種簡化、相對準(zhǔn)確的描述。例如在焰火模擬中,以定義生存期的方式來簡化模擬粒子的熱能變化、亮度變化、時間變化。
(4)超出視界的消亡。因?yàn)榭紤]到粒子系統(tǒng)的用途,在粒子超出觀察范圍后,也可以消亡。
2 面向?qū)ο蟮膮?shù)化粒子系統(tǒng)架構(gòu)
通過對粒子系統(tǒng)的理論分析并考慮到不同粒子系統(tǒng)應(yīng)用的特點(diǎn),有可能建立一種比較通用的粒子系統(tǒng)模型。這個粒子系統(tǒng)模型首先要實(shí)現(xiàn)一個通用的架構(gòu),將粒子系統(tǒng)分割成各個獨(dú)立組件;其次要將粒子系統(tǒng)中常用到的結(jié)構(gòu)、算法、組件實(shí)現(xiàn)參數(shù)化設(shè)計(jì)。這樣在系統(tǒng)基礎(chǔ)上,通過定制具體結(jié)構(gòu)、算法、組件參數(shù),滿足各類不同需求的粒子系統(tǒng)應(yīng)用。
結(jié)合面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法,本文提出了這種通用參數(shù)化粒子系統(tǒng)模型和架構(gòu)設(shè)計(jì)?;诖思軜?gòu)可實(shí)現(xiàn)通用參數(shù)化粒子系統(tǒng)庫。
系統(tǒng)架構(gòu)如圖1所示,PartSystem表示一個完整的粒子系統(tǒng)(類)。PartSystem包含三大部分:PartManager(粒子數(shù)據(jù)管理器)、PartRender(粒子圖形渲染器)、 Container(粒子容器)。其中Container是用于存儲粒子數(shù)據(jù),PartManager用于維護(hù)粒子的產(chǎn)生、變化、消亡,PartRender則根據(jù)不同粒子的屬性和類別,采用不同的圖形顯示。

PartManager對象包含了三個子對象:PartGenerator表示粒子產(chǎn)生器,可以模擬粒子的產(chǎn)生,可以定制粒子產(chǎn)生的平均值(可以是常數(shù),或者是時間或其他參數(shù)的函數(shù))、粒子產(chǎn)生的方差、粒子的初始位置(點(diǎn)、平面、空間參數(shù))、粒子的初始速度(均值、方差、角度特點(diǎn))等。對于一個PartManager(也就是一個PartSystem),可以有多個PartGenerator以表示多個粒子源。PartUpdator表示粒子更新器,一個PartSystem對象可以有多個PartUpdator。PartCleaner表示粒子消亡器,在PartCleaner中可以定制本文1.5節(jié)中提到的各種粒子消亡條件。
一個粒子系統(tǒng)模塊可以有多個粒子發(fā)生器、粒子更新器、粒子消亡器,亦即在一個粒子系統(tǒng)中,可以有多處粒子源、多個更新變化條件、多個粒子消亡條件。同時從圖1中可以看到,粒子發(fā)生器、粒子更新器、粒子消亡器從基類中派生出很多子類,代表了已定制的不同類型的以上組件。例如,要從粒子消亡器基類中派生出基于空間位置條件的消亡器(SpaceCleaner),只要定制其條件位置參數(shù)即可;還有熱能溫度條件消亡器(HeatCleaner),只要定制其溫度門限值即可自動將符合條件的粒子從Container中清除。
PartRender類被設(shè)計(jì)用于圖形顯示,從中可以派生出不同的Render,如基于OpenGL或其他渲染器。此處PartRender可以設(shè)計(jì)成靜態(tài)對象。針對不同的粒子(如雪花、雨滴、火花等),常用的顯示參數(shù)、顯示特性可以定制在PartRender模塊中。
3 真實(shí)感計(jì)算和輕量級粒子
在粒子系統(tǒng)實(shí)現(xiàn)中,常常會遇到實(shí)時計(jì)算開銷過大的問題。產(chǎn)生這個問題的主要原因是:(1)粒子數(shù)量眾多;(2)為了真實(shí)模擬粒子狀態(tài),粒子系統(tǒng)往往采用計(jì)算復(fù)雜度高的數(shù)學(xué)模型;(3)圖形顯示計(jì)算開銷。
解決以上問題的主要思路是:(1)減少粒子數(shù)量;(2)簡化系統(tǒng)模型,降低計(jì)算復(fù)雜度,或在系統(tǒng)模型不變的情況下優(yōu)化算法;(3)減少圖形顯示計(jì)算開銷。
針對第(2)種解決思路,可以采用優(yōu)化建模的方法或者采用近似算法。例如三角函數(shù)可以通過查表法獲得,從而避免進(jìn)行三角運(yùn)算。
針對第(1)種思路,可以采用輕量級粒子(Flyweight Particle)的設(shè)計(jì)方法。在粒子系統(tǒng)中,有少部分粒子是真實(shí)粒子(Concrete Particle),其他粒子可以是一種輕量級粒子。每一個輕量級粒子其私有屬性的數(shù)據(jù)很少,其他大部分屬性數(shù)據(jù)可以索引到一個真實(shí)粒子上。這樣在粒子數(shù)據(jù)更新運(yùn)算的時候,只需要計(jì)算這少部分真實(shí)粒子的數(shù)據(jù);在圖形顯示的時候,可以根據(jù)輕量級粒子和其索引的真實(shí)粒子數(shù)據(jù)進(jìn)行圖形顯示。因此輕量級粒子的存儲開銷和計(jì)算開銷都大大減少。這可以理解為在計(jì)算數(shù)據(jù)時只有少量的粒子,但在需要圖形顯示時仍有大量的粒子數(shù)據(jù)。
設(shè)計(jì)中,在真實(shí)粒子上標(biāo)記了鏈接在其上的輕量級粒子的數(shù)量。只要這個值大于1,則這個真實(shí)粒子即使達(dá)到了消亡條件也不能被清除。
根據(jù)本文提出的面向?qū)ο蟮?、通用的、參?shù)化粒子系統(tǒng)架構(gòu),實(shí)現(xiàn)了通用粒子系統(tǒng)庫。在此基礎(chǔ)上,實(shí)現(xiàn)了幾種典型的自然景象模擬。
參考文獻(xiàn)
1 Reeves W T.Particlesystems——A technique for modeling a class of fuzzy objects.Computer Graphics,1983;17(3)
2 宋萬壽,賴建偉.基于粒子系統(tǒng)方法的焰火及樹木模擬.計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué),1996;8(4)
3 楊子華,劉宏芳.基于粒子系統(tǒng)模型的自然景物生成技術(shù)應(yīng)用研究.計(jì)算技術(shù)與自動化,1998;17(3)
4 張芹.基于粒子系統(tǒng)的火焰模型及其生成方法研究.計(jì)算機(jī)輔助設(shè)計(jì)和圖形學(xué)學(xué)報(bào),2001;13(1)
