處理材質屬性

ParticleProcessMaterial 屬性

最小值、最大值與曲線屬性

這個材質中的屬性會控制粒子在其生命週期中的行為與變化。許多屬性都包含 MinMaxCurve 數值,讓你能夠細緻調整粒子的表現。這些值的關係如下:每當產生一個粒子時,該屬性會設定為 MinMax 之間的隨機值。如果 MinMax 相同,所有粒子的該屬性都會相同。如果同時設定了 Curve,則該屬性的值會再乘上粒子生命週期當前點上曲線的值。你可以用曲線來讓屬性隨粒子生命週期變化。這樣就能表達出非常複雜的行為。

備註

本頁將說明如何在 3D 場景中使用 ParticleProcessMaterial。若需瞭解如何在 2D 場景使用請參考 ParticleProcessMaterial 2D 用法

時間

Lifetime Randomness``(生命週期隨機性)屬性用來控制每個粒子的壽命隨機程度。值為 ``0 時,所有粒子的壽命都相同,由 Lifetime 屬性決定;值為 1 時,粒子的壽命會完全隨機地分布在 [0.0, Lifetime] 之間。

粒子旗標

Align Y``(Y 軸對齊)屬性會將每個粒子的 Y 軸對齊至它的速度方向。啟用這個屬性相當於將 :ref:`Transform Align <doc_3d_particles_properties_draw>` 屬性設為 ``Y to Velocity

Rotate Y``(繞 Y 軸旋轉)屬性會與 `Angle <#angle>`__ `Angular Velocity <#angular-velocity>`__ 群組搭配,用來控制粒子的旋轉。如果你想讓粒子產生旋轉,必須啟用 ``Rotate Y。只有一種例外:當 Standard MaterialBillboard 屬性設為 Particle Billboard 時,粒子即使未啟用 Rotate Y 也會旋轉。

啟用 Disable Z (停用 Z 軸)屬性時,粒子將不會沿 Z 軸移動。這裡的 Z 軸是指粒子系統的本地 Z 軸還是世界 Z 軸,取決於 Local Coords 屬性的設定。

Damping as Friction (以摩擦力方式阻尼)屬性會將原本的固定減速阻尼,改為依速度大小變化的減速。

生成

發射形狀

粒子可以從空間中的一個點發射,或以充滿某個形狀的方式發射。Shape``(形狀)屬性控制發射形狀,預設為 ``Point``(點),即所有粒子從粒子系統中心的同一點發射。當設為 ``Sphere``(球體)或 ``Box``(方塊)時,粒子會平均分布在球體或方塊的範圍中發射。你可以完全控制這些形狀的尺寸。``Sphere Surface``(球體表面)則和 ``Sphere 類似,但所有粒子會直接生成在球體表面上,而不是填滿整個球體。

基本粒子發射形狀

粒子從一個點(左)、球體內(中)、方塊內(右)發射的效果

環狀粒子系統

一個環狀粒子系統

Ring (環狀)發射形狀會讓粒子以環形分布發射。你可以透過 Ring Axis (環軸)屬性來調整環的方向, Ring Height (環高)控制環在其軸線上的厚度, Ring Radius (外半徑)和 Ring Inner Radius (內半徑)分別控制環的外徑及中間空洞的大小。圖片中展示的粒子系統半徑為 2、內半徑 1.5,軸線方向沿著全域 Z 軸。

除了這些相對簡單的形狀外,你也可以選擇 Points (點集合)或 Directed Points (定向點集合)來創造更複雜的發射形狀。詳細設定方式請參考 Complex emission shapes 章節。

角度

Angle``(角度)屬性決定粒子的起始旋轉角度,詳情如上說明。要讓角度設定對粒子產生作用,必須啟用下列其中一項:`Rotate Y <#particle-flags>`__(繞 Y 軸旋轉)會讓粒子繞粒子系統的 Y 軸旋轉;或者 :ref:`Standard Material <doc_standard_material_3d>` ``Billboard 屬性設為 Particle Billboard 時,粒子會繞著指向攝影機的軸心旋轉。

方向

備註

僅設定 Direction (方向)屬性時,粒子並不會立即產生移動效果。必須同時設定速度或加速度相關屬性,這個方向設定才會生效。

Direction``(方向)是一個向量,控制粒子在生成瞬間的移動方向。例如設為 ``(X=1,Y=0,Z=0),所有粒子會沿 X 軸側向移動;若像噴水池一樣讓粒子往上噴出,則可設為 (X=0,Y=1,Z=0)

粒子方向的不同設定

不同方向設定:僅 Y 軸(左)、X 與 Y 值相等(中)、X 與 Y 並啟用重力(右)

設定方向後,你會發現所有粒子都以相同方向直線移動。可以透過 Spread``(擴散角度)屬性為每個粒子的方向增加隨機變化。值越大,偏離原始方向的程度越高。設為 ``0 表示完全沒有擴散,而 180 則讓粒子朝各方向隨機分布。這常用於模擬爆炸產生的碎片效果。

不同的粒子擴散角度設定

無擴散(左)、45 度角(中)、完整 180 度(右)

Flatness``(平坦度)屬性用來限制 Y 軸方向上的擴散。設為 ``0 表示不做限制,設為 1 則會讓粒子完全不會往 Y 軸方向移動,所有粒子會完全在水平面上擴散。

除非你同時設定下面的速度或加速度屬性,否則目前還看不到實際的粒子移動效果。接下來我們將說明這些屬性。

初始速度

Direction``(方向)屬性決定移動方向,而 ``Initial Velocity``(初始速度)則決定移動的快慢。這個速度有 ``Velocity Min``(最小速度)和 ``Velocity Max``(最大速度)兩個屬性,預設都為 ``0,所以一開始看不到任何移動。只要設定這兩個屬性中的任一個,粒子就會開始移動。方向向量會乘上這個速度,你也可以透過設負值讓粒子往反方向移動。

加速度

重力

接下來的幾個屬性群組會共同影響粒子的移動與旋轉。Gravity``(重力)屬性會將粒子朝其設定方向拉動,預設為地球重力大小且朝下。重力會影響所有粒子的運動。如果你的遊戲支援物理運算且世界重力會在運行中變化,可以利用這個屬性同步粒子的重力。若 ``Gravity 設為 (X=0,Y=0,Z=0),且沒有設定其他移動屬性,粒子將完全不會移動。

不同的粒子重力設定

左:(X=0,Y=-9.8,Z=0),中:(X=0,Y=9.8,Z=0),右:(X=4,Y=2,Z=0)。

角速度

Angular Velocity``(角速度)屬性控制粒子的旋轉速度,詳情請參考上方說明。你可以將 ``Velocity MinVelocity Max 設為負值,讓旋轉方向相反。和 Angle 一樣,必須啟用 Rotate Y 旗標或設定 Standard MaterialParticle Billboard 模式,旋轉效果才會呈現。

備註

Damping (阻尼)屬性不會影響角速度。

線性加速度

粒子的速度一旦設定後會維持不變,也就是說粒子會以固定速度移動。你可以利用 Linear Accel (線性加速度)屬性讓粒子的移動速度隨生命週期改變,詳情請見上方說明。正值會讓粒子加速,負值則會讓粒子減速甚至反向移動。

不同的粒子線性加速度設定

負值(上)與正值(下)線性加速度

請注意,調整加速度時,其實不是直接改變速度,而是改變速度的『變化率』。加速度曲線設為 0 並不會讓粒子停止移動,只是停止速度的變化。也就是說,當前速度是多少,粒子就會一直以該速度前進,直到加速度再次改變為止。

徑向加速度

Radial Accel (徑向加速度)屬性會讓所有粒子受到類似重力的作用力,其作用點在粒子系統中心。負值會讓粒子朝中心聚集,就像行星引力;正值則讓粒子遠離中心。

不同的粒子徑向加速度設定

負值(左)與正值(右)徑向加速度

切向加速度

圓上的切線

圓上的切線

這個屬性會讓粒子在 XZ 平面上的圓的切線方向上獲得加速度,圓心為粒子系統中心,半徑為每個粒子投影至該平面後與中心的距離。

我們來詳細說明一下。

圓的切線是在某一點與圓相切,且與該點的半徑垂直的直線。所謂粒子系統 XZ 平面上的圓,就是你從上方俯視粒子系統時所看到的圓。

從上方俯視的切向加速度

從上方俯視的切向加速度

Tangential Accel (切向加速度)永遠只作用於該平面,不會讓粒子沿 Y 軸運動。只要知道粒子在 XZ 平面的位置,就能定義一個以系統中心為圓心、粒子與中心距離為半徑的圓。

Tangential Accel (切向加速度)會讓粒子繞著系統中心打轉,不過半徑會不斷增加。從上方俯視時,粒子會以螺旋方式遠離中心。負值則讓粒子以反方向旋轉。

阻尼

Damping (阻尼)屬性會讓所有移動逐漸減速。每一幀,粒子的速度都會被減少一點,除非總加速度大於阻尼效果,否則粒子會越來越慢,最後停止。值越大,粒子停止所需時間越短。

吸引器互動

如果你希望粒子系統與 particle attractors (粒子吸引器)互動,必須勾選 Enabled (啟用)屬性。若未啟用,粒子系統將忽略所有粒子吸引器。

顯示

縮放

Scale (縮放)決定粒子的大小,詳情如前述。你可以分別設定 Scale Min (最小縮放)與 Scale Max (最大縮放),讓每個粒子尺寸隨機。這個屬性不接受負值,無法用來翻轉粒子。如果你用看板(billboard)方式繪製粒子,必須在 Standard Material 啟用 Keep Size (保持尺寸)屬性,縮放效果才會生效。

顏色

Color``(顏色)屬性決定粒子的初始顏色。只有在 :ref:`Standard Material <doc_standard_material_3d>` ``Vertex Color 群組中啟用 Use As Albedo``(用作基底色)後,才會有效果。此顏色會與粒子材質本身的 ``ColorTexture 屬性相乘。

粒子色階漸層

設定色階漸層

Color 群組下有兩個 Ramp (色階漸層)屬性,讓你定義一連串用於粒子的顏色。 Color Ramp (顏色漸層)屬性會讓粒子在其生命週期內依序變換色彩範圍, Color Initial Ramp (初始顏色漸層)則會在色階上隨機挑選粒子的初始顏色。

要設定色階漸層,請點擊屬性名稱旁的方塊,從下拉選單選擇 New GradientTexture1D。再點一次方塊打開紋理細節畫面,找到 Gradient``(漸層)屬性,點擊旁邊方塊並選擇 ``New Gradient。再點一次方塊,即可看到色彩範圍。點擊色條任一處可新增標記,可拖曳標記調整位置,右鍵點擊則可刪除。選取標記後,可用旁邊的色票工具修改其顏色。

色相變化

Color 屬性類似,Hue Variation (色相變化) 控制粒子顏色,但方式不同。它不是透過直接設定顏色值來達成,而是透過 偏移顏色的色相

色相(Hue)描述顏色的色調,例如紅、橙、黃、綠等,不包含亮度或飽和度。Hue Variation 屬性可用來控制可用的色相範圍,詳見上方說明。

色相變化會疊加在粒子目前的顏色上。你可以透過 Variation Min (最小變化)與 Variation Max (最大變化)設定色相偏移範圍。數值越大,顏色變化越明顯,數值越小,顏色則僅限於原始顏色附近。

不同的色相變化設定

不同色相變化值(基色均為藍色):0.6(左)與 0.1(右)

動畫

Animation``(動畫)屬性群組用來控制粒子 :ref:`Standard Material <doc_standard_material_3d>` 中貼圖集動畫的行為。``MinMaxCurve 的用法如前述。

動畫貼圖集是一種包含多個圖格並排列成格狀的紋理,這些圖格會依序快速播放,形成類似翻頁書的動畫效果。你可以用這種方式製作動畫粒子,例如煙霧或火焰。建立動畫粒子系統的步驟如下:

貼圖集

8x8 格動畫煙霧貼圖集

  1. 將動畫貼圖集匯入引擎。如果你手邊沒有現成的素材,可以下載此範例的高解析度圖片:img/particle_sprite_smoke.webp

  2. 建立一個粒子系統,至少設置一組繪製通道(draw pass),並在該通道的網格上指定 Standard Material (標準材質)。

  3. 將貼圖集設定到 Albedo``(表面色)群組的 ``Texture 屬性上

  4. 將材質的 Billboard (看板)屬性設為 Particle Billboard (粒子看板)。如此會顯示出 Particles Anim (粒子動畫)群組。

  5. H Frames 設為貼圖集的橫向格數,V Frames 設為縱向格數。

  6. 若希望動畫持續循環,請勾選 Loop (循環)選項。

標準材質部分設定到這裡就完成了,但你還不會立刻看到動畫。這時可以調整 Animation``(動畫)屬性群組。``Speed``(速度)屬性決定貼圖集動畫播放速度,將 ``Speed MinSpeed Max 設為 1 即可看到動畫效果。Offset``(偏移)屬性決定新產生粒子的動畫起始格,預設都是從第一格開始,你可以調整 ``Offset MinOffset Max 來隨機動畫起點,讓效果更豐富。

動畫粒子

三個不同設定的粒子系統,都使用相同的煙霧貼圖集

根據你的貼圖集包含的影格數量與粒子的存活時間,動畫可能不會很順暢。粒子存活時間、動畫播放速度與貼圖集影格數的關係如下:

備註

當動畫速度設為 1.0 時,動畫會在粒子生命週期結束前正好播放到最後一格。

\[動畫\ FPS = \frac{貼圖集的影格數}{粒子存活時間}\]

如果你的貼圖集有 64 格(8x8),粒子生命週期設為 1 ,動畫就會以 64 FPS 非常流暢地播放(1 秒 / 64 格)。如果生命週期設為 2 ,動畫也有 32 FPS。但若粒子存活 8 ,動畫就只剩 8 FPS,看起來會非常卡頓。此時你可以將動畫速度調高(如設為 3),提升播放格數來讓動畫再次流暢。

動畫粒子的生命週期

同一組粒子系統在不同生命週期時的效果:1 秒(左)、2 秒(中)、8 秒(右)

請注意,GPUParticles3D 節點的 Fixed FPS**(固定 FPS)屬性也會影響動畫播放。為了確保動畫流暢,建議將其設為 0(每一幀都模擬粒子)。若無法設為 0,建議將 **Fixed FPS 設為動畫實際播放的幀率(可參考上方公式計算)。

亂流

亂流會在粒子的移動上加入雜訊,產生有趣且富有生命力的效果。勾選 Enabled (啟用)屬性即可開啟亂流功能。啟用後會出現一系列新屬性,讓你調整移動速度、雜訊模式與對粒子系統的影響程度。詳情請參考 particle turbulence 章節。

碰撞

Mode (模式)屬性決定粒子發射器與粒子碰撞節點的碰撞方式。如果設為 Disabled (停用),則該粒子系統不會有任何碰撞;設為 Hide On Contact (接觸即隱藏),粒子一碰到就會消失;設為 Constant (持續),粒子會與物件碰撞並彈跳。啟用後你會在屬性面板看到兩個新屬性,可用來調整粒子發生碰撞時的行為。

較高的 Friction (摩擦力)數值能減少粒子在表面上的滑動,這在粒子碰到斜面時特別有用,例如要讓落在山坡上的雪不會直接滑到底下。較高的 Bounce (彈力)數值則會讓粒子碰撞後像橡皮球一樣彈跳。

如果啟用 Use Scale (使用縮放)屬性, collision base size (碰撞基礎尺寸)會乘上粒子目前的縮放比例。這樣可以確保當粒子縮放值隨機或隨時間變化時,視覺尺寸與碰撞區域能一致。

更多關於粒子碰撞的介紹,請參閱本手冊的 Collisions 章節。

子發射器

子發射器模式

可用的子發射器模式

Mode (模式)屬性決定子發射器的產生時機及方式。設為 Disabled (停用)時,永遠不會產生子發射器;設為 Constant (持續)時,會以固定頻率不斷產生子發射器,頻率由 Frequency (頻率)屬性控制。設為 At End (生命週期結束時)時,會在母粒子生命週期結束、即將消失前產生子發射器,數量由 Amount At End (結束時數量)屬性決定。設為 At Collision (碰撞時)時,粒子與環境碰撞時會產生子發射器,數量由 Amount At Collision (碰撞時數量)屬性決定。

啟用 Keep Velocity (保留速度)屬性時,剛產生的子發射器會繼承母粒子當下的速度。

關於如何將子發射器加入粒子系統,請參閱本手冊的 Sub-emitters 章節。