Unreal Engine 4 系列教程 Part 8:粒子系統教程


原文:Unreal Engine 4 Particle Systems Tutorial
作者:Tommy Tran
譯者:Shuchang Liu

在本篇教程中,你將學習如何創建粒子特效並使用藍圖進行更新。

粒子特效是構成視覺效果的關鍵組件。它能讓開發者創造如爆炸,煙霧和雨水等特效。

Unreal Engine 4有一個非常壯健,易於使用的粒子特效系統——Cascade。這個系統允許用戶創建模塊化特效,並能隨意地控制粒子行為。

在本篇教程中,你將學習:

  • 創建粒子系統
  • 設置粒子的速度和體積
  • 調整粒子的生成速度
  • 使用曲線調整其生成周期的粒子體積
  • 使用Cascade設置粒子顏色
  • 使用藍圖激活/反激活粒子系統
  • 使用藍圖設置粒子顏色

注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:

起步入門

下載示例項目並解壓。進入項目文件夾,雙擊SpaceshipBattle.uproject打開項目。

按下Play運行游戲,長按左鍵射擊,使用WASD鍵進行移動。

在本篇教程中,我們將創建兩個粒子特效,分別用於飛船推進噴射和飛船爆炸。我們將使用粒子系統來創建特效。

什么是粒子系統?

顧名思義,粒子系統是用於創建並管理粒子的系統。一個粒子本質只是游戲世界里的一個點。通過粒子系統,我們可以控制粒子的出現和表現。

粒子系統包含一個或多個所謂發射器的組件,它們負責生成粒子。

發射器同樣包含所謂模塊的組件,模塊控制發射器粒子的一組參數。比如,一個粒子的材質和初始速度。如下面動圖,是用了兩個模塊定義了紅色圓形材質和隨機速度做出了粒子效果。

我們也可以在粒子的生命周期里修改其顏色。比如下面動圖,粒子的顏色會從紅色漸變成藍色:

現在你已了解什么是粒子系統了,我們先來創建飛船的推進噴射效果。

創建粒子系統

打開ParticleSystems文件夾,點擊Add New\Particle System,將新建資源命名為PS_Thruster並雙擊打開編輯器。

Cascade:粒子系統編輯器

Cascade編輯器由四個主要面板組成:

1.Viewport:該面板用於展示粒子特效的預覽效果。我們可以通過長按右鍵移動鼠標轉動視角,長按右鍵並配合WASD鍵移動鏡頭。
2.Details:顯示你選中的任何組件(發射器,模塊等)的參數。如果沒有任何組件選中,則顯示粒子系統的參數。
3.Emitters:該面板會從左至右的顯示一組發射器列表。每個發射器都會顯示它的模塊列表。
4.Curve Editor:曲線編輯器允許我們可視化地調整模塊曲線數值,不過不是所有模塊參數都支持曲線調節的。

現在,粒子系統正在使用默認粒子材質。

第一步,我們先將粒子材質替換為球形材質。

應用粒子材質

在Emitters面板選中Required模塊。

Required模塊包含如粒子材質和發射器時長等必要參數。每個發射器都有一個Required模塊。

為了修改材質,在Details面板將Material修改成M_Particle。可以看到,粒子的外觀已經變成了橙色圓形。

接着,我們要將粒子系統應用到玩家飛船上。

關聯粒子系統

回到主編輯器並打開Blueprints文件夾,打開BP_Player並找到Components面板。

我們可以使用Particle System組件來使用粒子系統,創建組件並將其命名為ThrusterParticles。確保將其放在Collision組件下。

為了指定具體粒子系統,在Details面板展開Particles設置,將Template設置為PS_Thruster

接着,設置ThrusterParticlesLocation(-80, 0, 0)。將組件放在飛船的后面。

最后,將Rotation設置為(0, 90, 0),旋轉粒子系統,讓粒子朝遠離飛船的方向噴射。

點擊Compile並回到主編輯器,按下Play運行游戲看看粒子特效的實際效果。

粒子特效已經生效了,但粒子噴射得有點緩慢,也比較小型。我們可以通過設置粒子的初始速度和體積來調整。

設置粒子的速度和體積

首先,我們先設置粒子的初始速度。打開PS_Thruster並選中Initial Velocity模塊。隨后,展開Start Velocity\Distribution

默認情況下,粒子的初始速度范圍是從(-10, -10, 50)(10, 10, 100)

為了粒子以更高的速度朝飛船相反方向噴射,我們所要做的是增加Z軸速度。將Min Z設為300Max Z設為400

以下是原始速度跟修改后速度的粒子對比圖:

接着,我們需要設置粒子的初始體積。

設置粒子體積

選中Initial Size模塊,在Details面板展開Start Size\Distribution

一如Initial Velocity模塊,Initial Size也有最大值最小值隨機范圍。然而,在本例中,我們要將體積設定為常量值。將Distribution字段設置成Distribution Vector Constant

注意: Distributions字段允許我們指定常量值,范圍值或曲線值。我們也可以通過藍圖來設值。要了解更多,前往查閱Unreal引擎文檔的數據分布(Distributions)部分內容。

隨后,將Constant設置為(70, 70, 70)。以下是體積對比圖:

回到主編輯器並按下Play查看效果。

粒子效果看起來好多了,但粒子間距顯得比較大。這是因為粒子間的生成時間間隔太長了。要解決這個問題,就要增加粒子生成速率。

增加粒子生成速率

為了增加生成速率,我們需要使用Spawn模塊,這個模塊決定了生成器生成粒子的速率。跟Required模塊一樣,每個發射器都有一個Spawn模塊。

打開PS_Thruster並選中Spawn,在Details面板展開Spawn\Rate設置。

Constant調成50,使得粒子器每秒生成50個粒子。

回到主編輯器並點擊Play

如你所見,粒子特效現在看起來更像噴氣拖尾了。為了讓效果看起來更加逼真,我們還可以讓粒子隨時間縮小。

隨時間縮小粒子效果

打開PS_Thruster並找到Emitters面板。

要縮小粒子效果,我們可以使用Size By Life模塊。這個模塊使用了一個乘數來控制粒子體積。在面板空白處右鍵點擊彈出選中菜單並選中Size\Size By Life

添加完后,粒子效果體積不會有任何變化。因為乘數默認設置為1。為了縮小粒子體積,我們需要調整模塊的曲線來逐漸減小體積乘數。不過首先第一點疑問,什么是曲線?

什么是曲線?

曲線是一系列點的集合。每個點包含兩個信息:位置和值。

當你擁有多於兩個點時,你就擁有了一條線段。下面是一條簡單線性的曲線。點A是個坐標點,其數值為0點B也是個坐標點,其數值為1

如果你在線段的任意位置取點采樣,效果跟線性插值是一樣的。比如,如果你在采樣在圖中坐標1處取點采樣,你就會得到0.5的數值。

如果你創建了一條遞增下降的曲線,所獲得的返回值就會逐漸變小。Size By Life模塊所需要的就是這樣一條曲線。

現在,我們就要在Cascade系統里創建一條這樣的曲線。

修改模塊曲線

選中Size By Life並觀察Details面板,隨后,展開Life Multiplier\Distribution\Constant Curve\Points。在這里可以看到Life Multiplier曲線的坐標點列表。

In Val代表曲線點的位置,對於Size By Life來說,數值0代表粒子生命周期的開始,數值1代表粒子生命周期的結尾

為了逐步減小體積乘數,我們需要減小第二個點的Out Val值。將point 1Out Val改為(0,0,0)。這樣就能將粒子的體積逐漸改為0.

你可以使用曲線編輯器可視化查看Life Multiplier。具體做法是點擊Size By Lift模塊的圖表圖標.

這樣我們就能在曲線編輯器里添加Life Multiplier了,為了調整視圖畫面到適合大小,點擊編輯器里的Fix按鈕。

如你所見,在粒子生存周期里,體積乘數從1降低到0.

回到主編輯器,按下Play

這個粒子效果現在看起來就非常像噴射煙火了!我們最后還要做一件事就是增加粒子的顏色變化。

增加顏色變化

要用Casade設置粒子的顏色,我們需要正確地設置粒子材質,在Materials文件夾打開M_Particle

現在,可以看到材質已經設置了顏色。為了使用粒子系統的顏色設置,我們需要用上ParticleColor節點。

首先,刪除連接Emissive Color的節點。接着,添加ParticleColor節點並進入如下連接:

如果你還想控制粒子的可見性,如下圖一樣添加Multiply節點:

點擊Apply並關閉M_Particle

為了設置粒子顏色,我們要使用Initial Color模塊。

Initial Color模塊

打開PS_Thruster並添加Initial Color模塊。我們可以看到如下的Color二級列表。

要增加顏色變化,我們需要指定顏色范圍,要實現這點,就要用上Distribution設置。

選中Initial Color並打開Details面板,展開Start Color設置並將Distribution改為Distribution Vector Uniform。這樣我們就可以可視化指定顏色范圍了。

在本例中,顏色范圍應由橙色過渡到紅色,因此我們將Max設置為(1.0, 0.0, 0.0),將Min設置為(1.0, 0.35, 0.0)

如果我們觀察Viewport,會發現顏色變化非常異樣。

這是由於Color Over Life模塊恆定地把顏色設置為白色。為了解決這個問題,選中Color Over Life並按下Delete鍵。粒子模塊列表現在看起來應該是這樣的:

關閉PS_Thruster並在主編輯器按下Play運行游戲,看看這些噴射焰火!

接下來,我們要學習如何根據飛船移動與否來切換激活粒子系統。

切換激活粒子系統

要判讀飛船是否處於移動狀態,我們可以取而判斷玩家有沒有按下任何移動按鍵。

打開BP_Player並找到Event Tick節點,在節點末端做如下設置:

讓我們看看這些節點做了什么事情:

  1. 檢查了MoveUpMoveRight軸按鍵映射情況,如果兩者都為0,說明玩家目前沒有按任何移動按鍵。
  2. Branch分支返回true(玩家沒有按鍵),反激活ThrusterParticles
  3. Branch分支返回false(玩家有按鍵),激活ThrusterParticles

點擊Compile並關閉BP_Player,按下Play運行游戲在嘗試體會靜止,移動的特效差別。

現在有趣的部分來了:創建爆炸特效!

創建爆炸特效

與其重新創建新的粒子特效,我們直接復制噴射推進特效。在ParticleSystems文件夾,右鍵點擊PS_Thruster並選中Duplicate,將復制資源重命名為PS_Explosion並雙擊打開。

對於爆炸特效而言,所有的粒子都應該在同一時間生成,這被稱之為(爆破發射)burst-emitting

創建爆破

首先,我們需要將生成速率設置為0,因為我們不需要使用默認的生成效果,選中Spawn模塊並將Spawn\Rate\Distribution\Constant設置為0

接着,我們需要讓發射器知道我們想要一個爆破效果,滑動到Burst部分設置,點擊+號圖標給Burst List添加新元素。

每組元素都包含三個字段:

  1. Count:要生成的粒子數,將其設置為20
  2. Count Low:如果該值設置為大於等於0,所生成的粒子數量在Count LowCount之間,將其保留為-1
  3. Time:生成粒子的時機。數值為0表示在發射器生命周期的一開始就生成,數值為1表示在生命周期最后生成,將其保留為0.0

注意:你可以在Required模塊找到發射器的時長設置,具體通過Duration部分設置的Emitter Duration字段來設置。

這意味着發射器會在粒子特效伊始就生成20個粒子。

為了使其看起來更像爆炸,我們需要設置粒子的爆炸方向讓其四射散開。

粒子四散效果

由於本例是一個垂直視角游戲,我們只需要指定X和Y軸的速度。選中Initial Velocity模塊並展開Start Velocity\Distribution設置,將Max設置為(1000, 1000, 0),將Min設置為(-1000, -1000, 0)

通過指定一個負數到正數的范圍,粒子就會從發射器中間往四周四散飛去。

接着,我們需要設置發射器的播放循環次數。

設置發射器循環

發射器默認上會無限循環播放,這對於火焰或者煙霧效果而言非常適合,但爆炸特效卻只應該播放一次。

選中Required模塊並找到Duration設置,將Emitter Loops設置為1

現在,試試實現敵機死亡時的爆炸特效吧!

敵機死亡生成爆炸特效

回到主編輯器並打開Blueprints文件夾,打開BP_Enemy並找到OnDeath事件。

為了生成粒子特效,我們可以使用Spawn Emitter at Location節點。創建節點並連接Destroy Actor節點。

現在,將Emitter Template設置為PS_Explosion

最后,創建GetActorLocation節點並將其於Location引腳相連。

現在,當敵機死亡時,它會在敵機位置生成PS_Explosion實例。

點擊Compile並返回主編輯器。按下Play運行游戲射殺其他敵機吧。

看看這些爆炸效果!接着,我們要豐富細節,將爆炸特效顏色改成給敵機顏色一樣。

修改爆炸顏色為敵機顏色

為了使用敵機顏色,我們需要從藍圖中獲取該信息。幸運地是,Cascade有一個Distribution字段類型可以干這件事。

打開PS_Explosion並選中Initial Color模塊,將Start Color\Distribution設置為Distribution Vector Particle Parameter

這樣就能設置任何藍圖里有的參數,我們將Parameter Name設置為PrimaryColor

爆炸特效我們希望能用上敵機上的兩種顏色。為了使用第二種顏色,我們需要多一個發射器。右鍵點擊 Emitter面板的空白處,在彈出菜單中選擇Emitter\Duplicate and Share Emitter,這樣就能復制多一個發射器。

你可以留意到現在每個模塊旁邊都有一個+號設置。使用Duplicate and Share Emitter而非Duplicate,其效果就是在原有的發射器上進行鏈接,而非復制。你在一個發射器上做任意改動,都會連帶影響另一個發射器。當你想一同修改所有發射器的某個參數,比如說體積時,這個特性非常有用。

我們這個模塊唯一想單獨修改的屬性是Initial Color。然而,如果我們修改了其中一個發射器,另一個發射器也會受到影響。這種情況下,我們不希望某些參數收到鏈接影響,最簡單的實現方法就是刪除Initial Color模塊,並創建一個新模塊。

注意:截至目前,Unreal並沒有提供什么正式方法取消模塊間的鏈接。

選中新建的Initial Color並設置Start Color\DistributionDistribution Vector Particle Parameter。接着,設置Parameter NameSecondaryColor

截至目前,粒子特效已經設置好了。關閉PS_Explosion

接着,我們需要通過藍圖設置這兩個變量。

通過藍圖設置粒子特效參數變量

打開BP_Enemy並在Spawn Emitter at Location節點后添加如下高亮節點:

這樣就可以設置PS_Explosion里的兩個變量了。

現在,我們需要設置下這兩個參數名字。將第一個Set Color Parameter節點的Parameter Name字段設為PrimaryColor,將第二個Set Color Parameter節點的Parameter Name字段設為SecondaryColor

最后,我們需要設置具體的顏色數值。為了簡化教程步驟,我以提前將數值存儲在PrimaryColorSecondaryColor這兩個變量里了。如下圖進行變量連接:

最后我們就得到如下連接:

最后回顧下整個過程:

  1. 當敵機死亡時,它會在當前位置生成PS_Explosion實例
  2. 設置PS_ExplosionPrimaryColor參數
  3. 設置PS_ExplosionSecondaryColor參數

點擊Compile並關閉BP_Enemy。按下Play運行游戲開始射殺敵機,享受粒子盛宴吧!

看看這些養眼的粒子。看看你能不能給主角死亡加上爆炸效果吧!

  1. 打開BP_Player並找到OnDeath事件
  2. Sequence節點的Then 1引腳添加Spawn Emitter at Location節點,將Emitter Template設置為PS_Explosion
  3. 創建GetActorLocation節點並連接Spawn Emitter at Location節點的Location引腳
  4. 創建Set Color Parameter節點並連接Spawn Emitter at Location節點,將Parameter Name設置為PrimaryColor,並將PrimaryColor變量連接到Param引腳
  5. 創建Set Color Parameter節點並連接第一個Set Color Parameter節點,將Parameter Name設置為SecondaryColor,並將SecondaryColor變量連接到Param引腳

后續學習

你可以在這里下載完整項目。

你相信到目前為止你對Cascade系統的了解僅僅只是皮毛嗎?我們創建了一些有趣的特效,不過仍有很多模塊沒有嘗試過。我建議你學習更多有關TypeData模塊的內容。利用這個模塊,你可以創建諸如劍影拖尾,閃電甚至傾盆大雨的特效!

如果你還想繼續學習引擎其他內容,點擊下篇教程,將講解有如何上手使用AI。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM