郝學娟
(山西運城農業職業技術學院信息技術系,山西 運城 044000)
在圖形學領域中,自然景物的圖像模擬一直以來都是一個重要的研究課題,然而自然景物并非表面上看到的那么簡單,可以說是千變萬化,形態各異,而且是時刻變化著的,基本模型肯定無法實現,還有一些自然現象必須追溯到現象本身的物理根源,才能再現自然現象。
對于游戲開發者和電影導演來說,他們希望不借助物理算法就能達到真實自然景物的效果。因為自然景物的內部結構非常復雜,所以很難通過手動制作動畫。伴隨著計算機技術的發展,個人計算機也隨之能夠完成更多更復雜的算法,這便出現了各個領域的自然景物模擬,比如廣告、電腦游戲、影視特技、動畫以及可視化的科學計算等等。
從20世紀80年代開始就有人研究粒子系統了,第一次提出粒子系統概念的人叫Reeves W.T.,他于1983年提出并使用粒子系統非常成功地模擬了五彩繽紛的煙花及煙霧爆炸等效果[1];1985年,Reeves W.T.與Blau兩人合作進一步發展了粒子系統,他們主要是利用“volumefilling”生成隨時間推移而改變其形狀的實體,而該實體基本上保持不變,即沒有本質的變化,就比如隨風搖擺的花草樹葉[2];此后,Reeves W.T.又提出了關于粒子系統的消隱繪制算法,也可稱其為“近似概率性算法”,該算法從理論到技術各個方面都得到了非常大的發展,主要用于解決可見面以及陰影問題,從而取得更加真實的三維效果;Fournier等人利用粒子系統模擬了海浪浪花,并提出浪花在什么條件下才會產生,即當粒子運動速度同海浪曲面傳播速度的差異超過了一定的閥值時才會產生浪花,否則只能產生泡沫[3];Karl Sims利用粒子系統所具有的并行特點,提出了一個全新的并行粒子繪制系統,進而研究了粒子動畫,該繪制系統能繪制各種各樣的粒子,比如形狀不同的、顏色不同的、大小不同的或者透明度不同的粒子等,而且還能進行各種各樣的處理,比如消隱的處理、反走樣的處理、運動模糊的處理等;Reynolds又進一步擴展了粒子系統的功能,即將其作為一種建模工具,當很多粒子在一起共同存在時,他提出了某一粒子與其他粒子之間以及粒子與其環境之間如何進行交互的思想,還詳細說明了當大量的簡單圖元進行交互作用時會產生更加復雜的行為;Miller&Pearce、Tonnesen等人為了模擬像流體一樣的物體開發了雙粒子系統。總而言之,我們可以利用粒子系統創建各種各樣的自然景物的動畫效果,它已經被廣泛地應用到各種可視化虛擬場景中。
近些年來,國內也有許多大學都在研究、探索以及應用粒子系統模型構建自然景物,而且還獲得了不小的成果。比如徐迎慶等人通過粒子系統模擬了自然景物的水沫以及碰撞時所產生的水花等效果;再如宋萬壽等人利用粒子系統技術在個人計算機上開發了樹木模擬以及煙花模擬;徐利明與姜顯明兩人合作實現了雨、雪飄落的效果[4];張芹、吳慧中等人根據粒子系統具有的動態性以及隨機性的特點,模擬了火焰、煙霧等效果;王靜秋、錢志峰等人利用粒子系統實現了對焰火的動態模擬,其根據不同焰火的細節和特點實現了不同形狀的焰火,并主要介紹了旋轉、星狀等顯示效果的模擬,隨后還詳細介紹了焰火的各種特性,比如焰火的顏色、焰火的透明度、焰火的形狀以及生命周期等等。這些模擬相比國外還是相差甚遠,所以國內的關于粒子系統的研究仍需要在今后作進一步的探索、研究與實踐[5-6]。
現如今,國內外已有很多學者都研究過基于粒子系統技術的煙花模擬,故關于煙花粒子系統模型已有了一定的基礎,而且其模型結合紋理貼圖或是Bill Boarding技術,只需簡單的改變其紋理參數便可產生各種不同的煙花模型,所以非常通用,可以滿足人們對煙花的各種審美需求。實際生活中,關于煙花的基本模型主要有下面幾類。
眾所周知,煙花的形狀可以說是千姿百態,不同的人喜歡不同的煙花形態,我們最常見的最典型的煙花形狀有圓形的、菊花狀的、環狀的、椰樹形的,像錦冠、牡丹、大麗就屬于圓形的煙花,彗星、菊花、花蕾則屬于菊花狀的煙花,而紅雙環、綠雙環屬于環狀的煙花。
煙花在燃放時都會具有一定的危險性,那是因為我們不知道煙花在何時炸開產生禮花,根據該特點,我們利用初始屬性來隨機控制炸開的高度。炸開的形狀我們也可以進行控制,煙花的外表形狀有些是有序排列的,有些是無序的組合,有序排列的煙花炸開類似于我們看到的球體、五星、心形等預先已經設計好的造型,而無序排列則可以炸出像彗星、椰樹、柳樹等造型的煙花。
用粒子模擬煙花,整個煙花運動的過程有兩個發射處,一個是粒子的燃放點,另一個是粒子的炸點處。通過觀察發現,大部分煙花其燃放點低而炸點處高,且二者的位置是不同的,所以我們分兩段來處理。第一段,在燃放點只有一個粒子沖向天空去,我們可以通過隨機函數設置幾個隨機的燃放點,從而產生不同的效果。第二段也是最關鍵的一部分即炸開點,這個炸點必須在合適的位置才可爆炸,也就是說它只能在某一幀或是某一時間段才可產生。
為了能模擬出更加逼真的煙花效果,必須仔細地觀察與分析煙花顯示的各種細節及特點。比如:煙花種類和顏色、形狀,而且有的煙花綻放快、有的煙花綻放慢,各有其特點。
煙花整個燃放過程有兩個粒子發射處,一個是粒子的燃放點,它是在一定范圍內隨機產生的;另一個是粒子的炸開點,它也是通過隨機函數隨機產生的,一般煙花的形狀主要通過炸開點來控制。下面將設計幾個最基本的模型,并通過這些模型來合成形狀各異的煙花。基于粒子系統技術和紋理貼圖模擬各式煙花,主要是研究合理的數據結構和代碼,從而借助其模擬出所需效果。下面就煙花的基本特性著重分析一下:如煙花顏色、形狀與大小、衰減度以及其空間位置等。
(1)煙花顏色特性:它是最重要的一個特性。煙花在綻放時,主要依賴于其內部所使用的化學元素才使其呈現出不同顏色,最常用的元素有鋇(可顯示出綠色的煙花)、鈉(可顯示出黃色的煙花)、銅(可顯示出藍色的煙花)、鍶(可顯示出桔紅色的煙花)等。我們在制造煙花時,通過控制上面各種元素的比例,在其綻放時就會得到五彩繽紛的煙花。基于粒子系統的煙花模擬,為了使設計的煙花表現得更具真實性,需要用較多的粒子來描述,而且每個粒子根據位置特點單獨地分配其各自的顏色值,通常用三原色(紅、綠、藍)來表示。本文所設計的煙花模擬,是讓煙花的顏色一開始鮮艷明亮,慢慢變得暗淡下去,最終消失。
(2)煙花的衰減度特性:煙花顯示的另一個重要特性就是衰減度,本文用fade表示粒子的衰減度。煙花的每個粒子都有其生命周期,本設計中規定所有粒子的生命周期都是1s。粒子經過上升、爆炸后就要消亡,然后再產生新粒子。
(3)煙花的形狀特性:也就是各種外部形狀,比如圓形、椰樹形等。一般通過爆炸區域來控制煙花所顯示的形狀。我們在學高等數學時都知道,通過各種數學函數,例如sin、cos、tin等函數能產生各種不同曲線,本設計就是運用了這個原理。
(4)煙花的外觀屬性:外觀屬性也是煙花的重要特征之一,它能給人最直接的視覺效果。首先,煙花基本粒子的外觀。在以往的煙花模擬程序中,其煙花粒子的外觀大多采用圓形。而在實際中,煙花都是一條條鏈狀的“蝌蚪形”,所以在本設計中將通過數學公式用一組源粒子組成鏈狀的煙花粒子。其次,煙花爆炸后形成各種形狀的外觀。由于本設計是在三維空間中完成的,所以在視圖上采用透視投影,即遠處的煙花看起來會比較小,而近處的則比較大。
煙花粒子運動狀態的變化包括粒子的空間位置、形態顏色以及運動速度等方面的變化。通過這些變化動態地描述煙花的變化過程。在現有的煙花模擬過程中,重力也會影響煙花的軌跡,粒子的質量也要相應地考慮進參數中,而其他的煙花釋放的顏色、煙花可見性以及運動形態的變化等,通過調整相應的參數即可實現。
所有新產生的煙花粒子,系統都要賦予其一定的屬性,其初始屬性可以描述如下:我們假設粒子的初始位置為(x,y,z)。粒子的初始位置和初速度定義如下:

如果只考慮粒子受重力加速度的影響,則粒子在x軸和z軸方向上的加速度賦為0,只給它們一個合適的y方向加速度,且是常量值,如Vy acc=a,a=-2.0。
對于新生粒子,我們都給它們統一生命值1.0f。但它們的衰減值不一樣,定義如下:fade=(float)(rand()%100)/20000+0.0023f。為了建立煙花所在的空間坐標系,我們令重力方向為Y軸,水平方向為X軸,垂直于XY平面的軸即為Z軸。生命期的衰減:Life=Life-fade
其中可以用數學上的一些曲線方程的參數來控制Xspeed、Zspeed的值,來達到改變爆炸煙花形狀的目的。
每個煙花粒子都有三個生命歷程:產生新粒子、活動狀態和粒子消亡,整個過程煙花粒子經過不斷的更新,始終保持一種相對的平衡,這種平衡保證煙花粒子的數量恒定。再具體地說,就是當新煙花粒子一旦產生,系統就會賦予該粒子生命值life=1.0,生命值根據其運動變化逐漸地減少,當life=0時,我們認為該煙花粒子消亡。煙花粒子消亡后,系統會將其刪除,結束其生命歷程,隨后系統再補充新煙花粒子,開始新生命歷程。在應用過程中,度量煙花粒子是否死亡還可以有其他的一些標準。例如當煙花粒子的顏色與背景色相同或煙花粒子的透明度減少至零時,或者煙花粒子的運動超出了顯示區域或者超出了初始化所設定的區域時,系統會根據情況認為煙花粒子已經死亡,從而結束其生命歷程。
實際中,煙花具有動態隨機性而且外形非常不規則,要模擬出更真實的煙花模型,值得更深入地去探討。所以計算機基于粒子系統的煙花模擬到目前為止都有非常廣闊的發展前景。
為了繪制更加貼近現實生活的煙花,還需要繼續改進以下方面:第一,一些不可抗因素的影響,比如風力、浮力等因素的存在;第二,大量粒子組合在一起產生煙花效果,越復雜的煙花效果,煙花粒子會更多,它們之間產生碰撞、作用是不可避免的,但當他們互相作用時會產生什么樣的效果,需要進一步分析。