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