Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

處理材質屬性

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 章節。

Customizing the process material

If you need to change or implement new behaviors in shader code, you can do so by converting the current ParticleProcessMaterial to a ShaderMaterial. Existing properties are preserved by the conversion process. Features that are enabled will also affect what's present in the converted shader code.

To do so, right-click on the material in the FileSystem dock and choose Convert to ShaderMaterial. You can also do so by right-clicking on any property holding a reference to the material in the inspector.