處理材質屬性
最小值、最大值與曲線屬性
這個材質中的屬性會控制粒子在其生命週期中的行為與變化。許多屬性都包含 Min、Max 和 Curve 數值,讓你能夠細緻調整粒子的表現。這些值的關係如下:每當產生一個粒子時,該屬性會設定為 Min 到 Max 之間的隨機值。如果 Min 與 Max 相同,所有粒子的該屬性都會相同。如果同時設定了 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 Material 的 Billboard 屬性設為 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 Min 或 Velocity Max 設為負值,讓旋轉方向相反。和 Angle 一樣,必須啟用 Rotate Y 旗標或設定 Standard Material 的 Particle 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``(用作基底色)後,才會有效果。此顏色會與粒子材質本身的 ``Color 或 Texture 屬性相乘。
設定色階漸層
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>` 中貼圖集動畫的行為。``Min、Max 與 Curve 的用法如前述。
動畫貼圖集是一種包含多個圖格並排列成格狀的紋理,這些圖格會依序快速播放,形成類似翻頁書的動畫效果。你可以用這種方式製作動畫粒子,例如煙霧或火焰。建立動畫粒子系統的步驟如下:
8x8 格動畫煙霧貼圖集
將動畫貼圖集匯入引擎。如果你手邊沒有現成的素材,可以下載此範例的高解析度圖片:
img/particle_sprite_smoke.webp。建立一個粒子系統,至少設置一組繪製通道(draw pass),並在該通道的網格上指定
Standard Material(標準材質)。將貼圖集設定到
Albedo``(表面色)群組的 ``Texture屬性上將材質的
Billboard(看板)屬性設為Particle Billboard(粒子看板)。如此會顯示出Particles Anim(粒子動畫)群組。將
H Frames設為貼圖集的橫向格數,V Frames設為縱向格數。若希望動畫持續循環,請勾選
Loop(循環)選項。
標準材質部分設定到這裡就完成了,但你還不會立刻看到動畫。這時可以調整 Animation``(動畫)屬性群組。``Speed``(速度)屬性決定貼圖集動畫播放速度,將 ``Speed Min 與 Speed Max 設為 1 即可看到動畫效果。Offset``(偏移)屬性決定新產生粒子的動畫起始格,預設都是從第一格開始,你可以調整 ``Offset Min 與 Offset Max 來隨機動畫起點,讓效果更豐富。
三個不同設定的粒子系統,都使用相同的煙霧貼圖集
根據你的貼圖集包含的影格數量與粒子的存活時間,動畫可能不會很順暢。粒子存活時間、動畫播放速度與貼圖集影格數的關係如下:
備註
當動畫速度設為 1.0 時,動畫會在粒子生命週期結束前正好播放到最後一格。
如果你的貼圖集有 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 章節。