談談粒子系統

2022-06-23 07:12:09 字數 1548 閱讀 4971

近幾個星期以來一直在搞粒子系統,下面簡要總結一下。

粒子系統從其本質來說就是一些點被發射出來,並在其生命週期內受到一些影響。

這些點的資訊也無非就是位置,方向,顏色等等,根據需要也可以擴充其他。

而渲染的時候則根據粒子的資訊,再結合具體的渲染型別(比如billboard)進行渲染。

從上面可以看出粒子系統分為4各部分

1. 粒子,這裡只要把他理解成一些關心的變數集合,比如位置,方向,顏色,紋理偏移,生命時間等

2. 發射器,其實就是乙個噴嘴,把粒子發射出來。所謂發射出來,聽起來挺懸的,其實就是將粒子標記為活動,並對其資料進行初始設定。

3. 影響器,對發射出來的例子資料施加影響,根據物理模型,或者其他什麼規則改變粒子的資料而已。

4. 渲染器,對發射出來的粒子進行渲染繪圖。

除了這4各部分還需要有乙個總的結構來對其進行總的管理,這就是particlesystem.particlesystem的主要工作就是負責管理上面提到的4各部分,做好粒子的分配和**(使用佇列,分別是活動粒子佇列和空閒粒子佇列),並在更新函式中呼叫發射器和影響器,統籌管理。

在具體設計的時候需要仔細考慮的乙個問題也是乙個關鍵的問題是粒子系統是否可以發射粒子系統,聽起來有些奇怪,粒子系統怎麼能發射粒子系統呢。其實說白了就是將粒子系統本身作為粒子並可以被其他粒子系統發射。這將是乙個非常重要的特性,可以實現巢狀發射,實現更加豐富的效果。

同時還需要進一步考慮的問題是,既然粒子系統可以發射粒子系統,那麼發射的粒子系統再發射的粒子到底受那個粒子系統的影響其影響呢?是發射粒子系統的那個粒子系統影響器影響,還是直接發射他的那個粒子系統影響其影響。(很像繞口令)

關於這個問題,我的設計就是,發射出來的粒子只受發射他的粒子系統中的影響其影響。換句話說爸爸之影響兒子,爺爺不能影響孫子。這樣就使問題明確且單純。反過來說如果允許爺爺影響孫子,那麼太爺爺是否也要影響孫子,太太爺爺呢?這樣問題就被無限複雜下去了。

據乙個例子,爺爺粒子系統發射爸爸粒子系統,其出速度為零,並橫向發射,爸爸粒子系統發射孫子粒子,起初速度為零冰箱上發射。那麼最終看到的效果就是乙個個例子水平排開,並作垂直向上的運動。

在ogre中只實現了粒子系統發射發射器,這是不夠徹底的!

關於渲染器,其實就是那到粒子的資料並根據具體的渲染器型別構造真正的幾何資料並進行渲染。

接下來在討論一下更加複雜的特效系統。

特效系統視專案不同包含很多東西,通常有粒子系統,相機,後期,音效等。很顯然特效系統是乙個各個效果的集合。在具體的實現過程中他們可能會同意包裹在乙個特效類中,也可能分散開來,此時特效系統就是乙個概念,而沒有具體的對應實現。到底選用哪種方案呢?需要考慮以下幾個問題:

1. 從引擎的實現角度考慮這些子系統本身並沒有特別直接的關係(除了概念上都是特效的一部分以外)。每個部分都可以做的很獨立很模組化。因此額外的再將其整合到乙個所謂的特效系統中就有一些畫蛇添足的意思。

2. 從工具的角度來看,有些引擎分別在不同的工具(至少是用乙個工具的不同面板下)分別製作這些特效元素。比如unreal等。而有些引擎則將其放在乙個工具中進行製作,並最終儲存為乙個檔案。

從上面兩點來看,總的來說還是分別獨立實現要好一些。從引擎內部模組的實現,從工具的製作流程都比較明確清楚。

CCParticleSystem粒子系統

第一次接觸粒子系統,以前遊戲裡面的一些小特效,像製作動畫一樣,是採用一幀一幀的切出來的,由於這種特效,變化無常,切出來的幀,都非常的大,也很耗記憶體,一下就記憶體溢位了.呵呵 主要是以前都沒有接觸過.現在接觸了,以後遊戲就可以用到了.開心 建立乙個ccparticlesystem粒子系統 ccpar...

Unity粒子系統

首次接觸unity的粒子系統,內容太多,搞得都不好寫筆記,所以就記錄下unity的粒子系統做出來的東西以及經常用的一些引數。火焰效果製作 這個相對簡單 建立粒子系統物件 1 調duration 1 開啟loop start size 1 start lifetime 1 start speed 1 ...

Unity粒子系統

rateoverdistance 隨著移動距離產生的粒子數量。只有當粒子系統移動時,才發射粒子。bursts sprite 通過相同尺寸的sprite實現粒子動畫。tiles 網格的行列數。animation startframe 開始的幀是哪一幀。flipu 翻轉u。flipv 翻轉v。enabl...