第6章(粒子系統)課件_第1頁
第6章(粒子系統)課件_第2頁
第6章(粒子系統)課件_第3頁
第6章(粒子系統)課件_第4頁
第6章(粒子系統)課件_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第6章 粒子系統6.1 粒子系統概述6.2 粒子系統的生成原理6.3 粒子系統程序設計實例附錄:3ds max的粒子系統6.1 粒子系統概述 粒子系統是最實用的過程動畫技術之一。所謂過程動畫是指物體的運動或變形可由一個過程來描述。最簡單的過程動畫是用一個數學模型去控制物體的幾何形狀和運動,如旗幟、水波隨風的運動。較復雜的過程動畫則是包括物體的變形、彈性理論、動力學、碰撞檢測在內的物體的復雜運動。 粒子系統被認為是迄今為止模擬不規則模糊物體最為成功的一種圖形生成算法。這一方面的先驅是W.T.Reeves,他在1985年發表的論文中成功地提出了一種模擬不規則自然景物生成和動畫的系統,也就是所謂的粒

2、子系統。 文獻:Approximate and probabilistic algorithms for shading and rendering structured Particle System. Computer graphics,1985 粒子系統的發展 為了實現對這類不規則物體的真實感顯示,國內外學者一直在努力探索,先后提出了多種方法。例如,L系統、分形法構圖等。各種方法相比而言,粒子系統產生的圖像質量高,運算代價不高,且適合于中低檔的硬件平臺,所以,已被大量運用在大量3D軟件中(見附錄)。 粒子系統的發展 粒子系統在電影“星球大戰”中的出色表現,使得人們對這一技術刮目相看,目前

3、,粒子系統巳被廣泛應用于各個領域。尤其在視頻特技制作中,人們常希望產生用常規拍攝方式難以產生的自然特效和模擬群體行為。 粒子系統的應用 影視作品星球大戰剪輯影視作品星球大戰剪輯水墨畫仿真粒子系統作品粒子星云 為了能更清晰的理解現有的各種粒子系統,可以根據粒子間的作用關系將粒子系統分為三類: 粒子分類 獨立粒子系統;固定聯結的粒子系統; 動態聯結的粒子系統. 獨立粒子系統 獨立粒子系統,即粒子間是獨立的,無相互作用。獨立系統用來模擬生成例如火、煙、霧、水花等自然景物。作用在每個粒子上的作用力都是獨立的。為了建立復雜的效果,必須使用大量粒子,讓它們受到重力,風力,各種阻力的影響。根據所模擬景物的物

4、理特性來生成和刪除粒子。這些系統主要是產生動態特效,并不考慮景物的體積和表面因素。 固定聯結的粒子系統 固定聯結的粒子系統用于對物體物理變形特性的模擬。在這些系統中,為了建立物體的變形模型,可以對物體進行體或面的離散化。將體或面視為粒子,通過在“粒子” 間產生彈性,粘性作用力,使離散化的表面和體發生變化,在宏觀上產生物體的彎曲,斷裂,延伸等物理現象。動態聯結的粒子系統 在動態聯結的粒子系統中,粒子間的作用隨時都在變化,即粒子間的聯系自動刪除,隨之動態創建。用動態聯結代替固定聯結也能模擬與之相似的物理特性。但由于粒子聯結的動態變化,也會使物體的幾何和拓撲結構發生變化,這非常適合于模擬流體運動。粒

5、子系統實例煙 粒子系統實例火球 粒子系統實例火球例:星球爆炸例:滴落的水珠例:PF粒子實例:蒲公英例:冰雪融化6.2 粒子系統的生成原理粒子系統是迄今為止被認為模擬不規則模糊物體最為成功的一種圖形生成算法。景物被定義為成千上萬個不規則的,隨機分布的粒子所組成,而每個粒子均有一定的生命周期,它們不斷改變形狀,不斷運動。因而,我們關心的只是景物的總體形狀和特征的動態變化,而不是各個粒子本身。粒子系統的這一特性,使得它充分體現了不規則模糊物體的動態性和隨機性,很好地模擬了火,云,水,森林和原野等自然景觀。 6.2.1 粒子系統的核心思想粒子系統模型的基本思想是用大量的,具有一定生命力的粒子圖元來描述

6、自然界不規則模糊物體,每個粒子在任意時刻都具有隨機的形狀,大小,顏色,透明度,速度,加速度等屬性,并隨時間推移發生位置,形態的變化,每個粒子的屬性和動態性質均有預先定義的一組隨機過程來說明。粒子在系統內部要經歷“產生”,“活動”和“死亡”三個具有隨機性的階段,在某一時刻所有存活粒子的集合就構成了粒子系統的模型。 6.2.1 粒子系統的核心思想 綜上所述,粒子系統具有以下特性:系統組成由大量的、具有一定生命力 的粒子圖元所描述的自然界 不規則模糊物體。 動態性每個粒子在任意時刻都具有隨 機的形狀,大小,顏色,透明度, 速度,加速度等屬性,并隨時間 推移發生位置,形態的變化。 生命周期性粒子在系統

7、內部要經歷 “產生”,“活動”和“死亡” 三個具有隨機性的階段。隨機性每個粒子的屬性和動態性質均 有預先定義的一組隨機過程來 說明。6.2.1 粒子系統的核心思想6.2.2 粒子系統的生成步驟(1)根據產生效果的物理特性,建立數學 模型,即構建粒子的運動方程;(2)確定粒子的個體屬性 ;(3)產生粒子系統 ;(4)粒子活動; (5)粒子的死亡;(6)其它。一般過程(1)構建粒子的運動方程 總結并研究粒子可能的運動形式,研究其運動方程的求解方法,在不影響整體效果前提下盡量使算法簡化,計算量減少以滿足實時性的要求。在整個數學模型構建過程中,為了使產生的圖象更具有真實感,應該考慮加上風力,重力等因素

8、。 (2)確定粒子的個體屬性為表達粒子系統的隨機性,Reeves采用了一些簡化的隨機過程來控制粒子在系統中的形狀、特征及運動。對每一粒子參數均確定其變化范圍,然后在該范圍內隨機地確定它的值,而其變化范圍則由給定的平均期望值和最大方差來確定,粒子系統中的任一需隨機確定的參數均可由以下參數表達式求得:ParameterMeanParameterRand( )VarPararmeter 粒子的屬性主要包括: 初始位置、大小 初始運動速度和方向 初始顏色 初始透明度 初始形狀 生命周期(2)確定粒子的個體屬性不同的特效對粒子的個體屬性要求的側重點不同。例如在模擬星光燦爛的宇宙時,為了產生星光閃爍的效果

9、,就要考慮粒子的位置,大小,透明度屬性和顏色屬性,而對加速度,速度不作為考察重點。 (2)確定粒子的個體屬性(3)產生粒子系統 粒子的產生由隨機函數控制,每一幀圖象產生的粒子數目直接影響著物體的密度,常使用以下方法定義: 第fi幀產生的粒子屬性直接定義為NP(fi) NP(fi)MP(fi) + RAND( ) * VP(fi) 其中,RAND()是-1,1 上均勻分布的隨機函數,MP(fi)和VP(fi)是第fi 幀新產生的粒子數目的平均值和方差。 (3)產生粒子系統 上式中粒子數目的平均值和方差可定義為常數或變量。如: MP(fi)=MP(f0) +MP*(fif0) 對每一新產生粒子都必

10、須賦以初始屬性,如初始位置,方向,顏色,生存期等。 其他屬性用下式計算: Property(f0)=屬性均值+RAND()*屬性方差(3)產生粒子系統 粒子的這些屬性值可作如下定義: 粒子的初始位置P(f0)由粒子的產生區域決定,同時產生區域也可決定粒子的初始運動方向。對于球形區域,粒子從粒子系統原點沿球半徑向外運動,對于圓形區域,粒子以一定的噴射角離開所在平面向外運動。 (4)粒子活動 粒子產生后,就要根據所確定的運動模型進行運動。一幀接一幀,直至死亡。這種運動有自己的規律,也就是說所有粒子的屬性有共同的地方,這是產生整個現象的基礎,但每個粒子又有自己的不同,這種不同就要有隨機函數來體現。

11、(4)粒子活動粒子運動軌跡為:位置: P(fi) = P(fi-1) + V (f i-1) * (fif i-1)速度: V(fi) = MV+RAND( )*VV+A*(fi fi-1)顏色: C(fi)=MC+RAND( ) *VC+C * (fi- fi-1)(4)粒子活動粒子運動軌跡為:透明度: T(fi)=MT+RAND( )*VT+T*(fifi-1)生存期: L(fi ) = L(fi-1) L 式中fi為幀號(i= 0,1,2,3,n), i=0時為初始幀,A,C,T,L分別為粒子的加速度,顏色變化率,透明度變化率,生命遞減值均可定義為常數。(5)粒子的死亡 粒子一產生就賦予

12、了生存期L(f0),用幀數來度量,隨著粒子一幀一幀的運動而遞減,即: L(fi) = L(fi-1 ) L 遞減到0時,粒子死亡。將其從系統中刪除。 (5)粒子的死亡 還可采用其他方法來衡量粒子的存亡,如當粒子的顏色和透明度低于限定值,或粒子的運動超出給定的距離,則可認為粒子死亡,將其從系統中刪除。 粒子的產生,活動,死亡這三個階段構成了一幅動態進化的畫面。(6)其它因素(1)考慮到許多自然景物的形態變化,需要由多個粒子系統來描述,而每個粒子系統又由大量粒子組成,可以通過建立粒子系統的層次結構來加強對這些復雜物體的整體控制。層次結構的建立方法與傳統的方法完全一樣。算法在每一時刻首先確定新生成的

13、子粒子系統的數量,父粒子系統的所有屬性均可以傳遞給其子粒子系統。例如,當父粒子系統運動時,其所有子粒子系統將跟隨一起運動。這非常適合與模擬飛機尾焰等效果。(6)其它因素(2)為了使產生的特效更具有真實感,我們的粒子運動一般都建立在三維空間中。這就考慮使用何種三維加速引擎。常用就是OpenGL和DirectorX。另外還要考慮視點和粒子系統的位置關系,即要使用LOD(level of detail)技術解決遠近不同的景象,既能縮短時間,又不降低對圖象質量的要求。(6)其它因素(3)產生的粒子系統圖象與其他圖象的融合。在視頻技術中,將不同的圖象疊加在一塊,從視覺上感覺不出他們來源于不同的畫面。由粒

14、子系統產生的景物怎么和已有畫面的融合,這雖是影視制作人員的任務,但我們產生的粒子系統要具有這種特性,才能夠被使用。所以,在產生粒子系統圖象時候,一定要考慮圖象的格式,一般講應該要考慮到圖象的透明度。這與單個粒子的透明度是不同的。 例1.粒子火焰 程序運行后,大量發光的粒子在屏幕上運動,每一個粒子都有一定的生命周期,在這個周期內以一定的角加速度運動,同時,速度逐漸變慢。6.3 粒子系統程序設計實例 程序的基本步驟:(1)定義一個粒子結構。(2)粒子初始化。(3)計算出粒子的運動軌跡。(4)模糊效果生成。 (1)定義一個粒子結構struct CParticle float m_x; /當前x坐標

15、float m_y; /當前y坐標 float m_Angle; /方向 float m_Speed; /速度 float m_AngleAdjustment; /角加速度 float m_Life; /生命值 float m_Decay; /衰減速度;(2)粒子的初始化 當一個粒子誕生時,我們需要對它進行一些必要的初始化,對于不同的效果,初始化的內容也是不一樣的,下面是一種最簡單的運動粒子的初始化:(2)粒子的初始化最簡單的運動粒子的初始化:void InitParticle(CParticle& particle, float x, float y) particle.m_x = x; p

16、article.m_y = y; particle.m_Speed = 1 + (Rnd( ) * 3); particle.m_Angle = Rnd( )* 2*pi; particle.m_AngleAdjustment = -1/40.0f+Rnd( ) / 20; particle.m_Life = 1.0f; particle.m_Decay = 0.01f+Rnd( ) / 20;注釋1:由第二步可以看出,其中有許多參數帶有一定的隨機性,這樣即可以保證每個粒子的坐標、速度或角加速度在一定范圍內分布,也可以保證整體效果永遠不會以相同的面貌出現。有了這些初始數據,我們就可以計算出粒子

17、的運動軌跡。 (3)計算粒子運動軌跡void MoveParticle(CParticle& particle) if (particle.m_Life = 0)return; particle.m_x += (float)cos(particle.m_Angle) * particle.m_Speed; particle.m_y += (float)sin(particle.m_Angle) * particle.m_Speed; particle.m_Angle += particle.m_AngleAdjustment; particle.m_Life -= particle.m_Dec

18、ay; 每一次調用MoveParticle函數,即可獲得該粒子的新坐標,同時粒子的生命值降低。如果粒子生命值大于0,設置粒子在新坐標象素的顏色為255(調色板最大值),如果粒子生命值小于0,表明粒子已經死亡,不予顯示,這樣,就能夠模擬出大量粒子的運動軌跡了。注釋2:(4)產生模糊效果 為了顯示出發光粒子拖著一條長尾巴的效果,還需要對圖象進行一些特殊的處理才行。Blur算法即是完成這個目的。Blur即模糊的意思,最簡單的Blur算法是取該象素前后左右四個象素的平均值。(4)產生模糊效果 Blur算法的代碼如下: for (y=1; y height-1; y+) for (x=1; x widt

19、h-1; x+) pixel(x,y) = ( (pixel(x,y-1) + pixel(x-1, y) +pixel(x+1,y)+ pixel (x,y+1) ) 2;上面只是程序中的一些原理性的描述和未經優化的代碼,在具體編程中,還會有以下一些需要考慮和注意的問題:對粒子的初始狀態和運動施以不同的規則,可以構造出不同的粒子火焰效果,煙火即可用這種方法實現。對于調色板的靈活運用可使程序更加富予色彩。如對調色板進行分段,可同時顯示出不同顏色的粒子火焰;對調色板進行循環,顯示出火焰整體色彩的變換。Blur的算法有很多種,還可以實現Blur的同時向某個方向移動的效果,或是實現如火焰般的效果。注

20、釋3:例2 粒子禮花 程序運行后,在不同幀產生下列效果粒子屬性結構public: int m_flag; / 從低位開始,頭2位表示階段,第3位表示主(1)或從(0)粒子 int m_blinkNumber; / 閃爍計數器 double m_radius; / 粒子大小半徑 double m_x, m_y, m_z; / 粒子的位置坐標 double m_vx, m_vy, m_vz; / 粒子的運動速度 double m_life, m_lifeIncrement; / 粒子的生命值及其增長量 GLfloat m_red, m_green, m_blue; / 粒子的顏色值 CPartic

21、le* m_next, *m_previous; / 相鄰的兩個粒子主要函數void mb_addParticle(CParticle* p); / 在當前粒子后插入指定的粒子 void mb_removeParticle( ); / 從鏈表中去除位于當前粒子后的粒子void mb_draw( ); / 繪制單個粒子void mb_makeSelfLoop( ); / 形成單粒子的雙向鏈表void mb_setBlinkRand( ); / 設置隨機閃爍計數值void mb_setColor(GLfloat r, GLfloat g, GLfloat b); / 設顏色值void mb_set

22、Life(double life, double increment); / 設置生命值void mb_setPosition(double x, double y, double z); /設位置坐標void mb_setVelocity(double x, double y, double z); / 設置速度void mb_updatePosition( ); / 更新位置坐標禮花粒子系統中的粒子單個的主粒子第一階段的主粒子死亡所有粒子死亡創建第三階段的粒子創建第二階段的粒子第二階段的粒子死亡不斷創建尾粒子尾粒子不斷死亡不斷創建尾粒子粒子運動粒子不斷死亡 3ds max擁有強大的粒子系統,功能眾多,可以制作出數不勝數的粒子特效,是特技制作必不可少的工具。另外,3ds max中的paticle Flow也是一個非常強大的粒子系統,它是一種事件驅動型的粒子系統。附錄 3ds max 的粒子系統3ds max的7類粒子系統噴射(Spray) 噴射粒子系統,可發射水滴、直線狀和十字交叉型粒子常用于建立雨景、水流、噴泉和煙花爆竹等模型。雪花(Snow) 雪花粒子系統,可發射六角、點狀和十字交叉型粒子常用于建立飄雪、拋落的紙削和糖果等模型。超級噴射(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論