原文:Unreal Engine 4 Particle Systems Tutorial
做者:Tommy Tran
譯者:Shuchang Liuhtml
在本篇教程中,你將學習如何建立粒子特效並使用藍圖進行更新。web
粒子特效是構成視覺效果的關鍵組件。它能讓開發者創造如爆炸,煙霧和雨水等特效。app
Unreal Engine 4有一個很是壯健,易於使用的粒子特效系統——Cascade。這個系統容許用戶建立模塊化特效,並能隨意地控制粒子行爲。編輯器
在本篇教程中,你將學習:ide
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:svg
下載示例項目並解壓。進入項目文件夾,雙擊SpaceshipBattle.uproject打開項目。模塊化
按下Play運行遊戲,長按左鍵射擊,使用W,A,S和D鍵進行移動。oop
在本篇教程中,咱們將建立兩個粒子特效,分別用於飛船推動噴射和飛船爆炸。咱們將使用粒子系統來建立特效。學習
顧名思義,粒子系統是用於建立並管理粒子的系統。一個粒子本質只是遊戲世界裏的一個點。經過粒子系統,咱們能夠控制粒子的出現和表現。動畫
粒子系統包含一個或多個所謂發射器的組件,它們負責生成粒子。
發射器一樣包含所謂模塊的組件,模塊控制發射器粒子的一組參數。好比,一個粒子的材質和初始速度。以下面動圖,是用了兩個模塊定義了紅色圓形材質和隨機速度作出了粒子效果。
咱們也能夠在粒子的生命週期裏修改其顏色。好比下面動圖,粒子的顏色會從紅色漸變成藍色:
如今你已瞭解什麼是粒子系統了,咱們先來建立飛船的推動噴射效果。
打開ParticleSystems文件夾,點擊Add New\Particle System,將新建資源命名爲PS_Thruster並雙擊打開編輯器。
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。
接着,設置ThrusterParticles的Location爲(-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設爲300,Max 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 1的Out 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模塊。
打開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節點,在節點末端作以下設置:
讓咱們看看這些節點作了什麼事情:
點擊Compile並關閉BP_Player,按下Play運行遊戲在嘗試體會靜止,移動的特效差異。
如今有趣的部分來了:建立爆炸特效!
與其從新建立新的粒子特效,咱們直接複製噴射推動特效。在ParticleSystems文件夾,右鍵點擊PS_Thruster並選中Duplicate,將複製資源重命名爲PS_Explosion並雙擊打開。
對於爆炸特效而言,全部的粒子都應該在同一時間生成,這被稱之爲(爆破發射)burst-emitting。
首先,咱們須要將生成速率設置爲0,由於咱們不須要使用默認的生成效果,選中Spawn模塊並將Spawn\Rate\Distribution\Constant設置爲0。
接着,咱們須要讓發射器知道咱們想要一個爆破效果,滑動到Burst部分設置,點擊+號圖標給Burst List添加新元素。
每組元素都包含三個字段:
注意:你能夠在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\Distribution爲Distribution Vector Particle Parameter。接着,設置Parameter Name爲SecondaryColor。
截至目前,粒子特效已經設置好了。關閉PS_Explosion。
接着,咱們須要經過藍圖設置這兩個變量。
打開BP_Enemy並在Spawn Emitter at Location節點後添加以下高亮節點:
這樣就能夠設置PS_Explosion裏的兩個變量了。
如今,咱們須要設置下這兩個參數名字。將第一個Set Color Parameter節點的Parameter Name字段設爲PrimaryColor,將第二個Set Color Parameter節點的Parameter Name字段設爲SecondaryColor。
最後,咱們須要設置具體的顏色數值。爲了簡化教程步驟,我以提早將數值存儲在PrimaryColor和SecondaryColor這兩個變量裏了。以下圖進行變量鏈接:
最後咱們就獲得以下鏈接:
最後回顧下整個過程:
點擊Compile並關閉BP_Enemy。按下Play運行遊戲開始射殺敵機,享受粒子盛宴吧!
看看這些養眼的粒子。看看你能不能給主角死亡加上爆炸效果吧!
- 打開BP_Player並找到OnDeath事件
- 在Sequence節點的Then 1引腳添加Spawn Emitter at Location節點,將Emitter Template設置爲PS_Explosion
- 建立GetActorLocation節點並鏈接Spawn Emitter at Location節點的Location引腳
- 建立Set Color Parameter節點並鏈接Spawn Emitter at Location節點,將Parameter Name設置爲PrimaryColor,並將PrimaryColor變量鏈接到Param引腳
- 建立Set Color Parameter節點並鏈接第一個Set Color Parameter節點,將Parameter Name設置爲SecondaryColor,並將SecondaryColor變量鏈接到Param引腳
你能夠在這裏下載完整項目。
你相信到目前爲止你對Cascade系統的瞭解僅僅只是皮毛嗎?咱們建立了一些有趣的特效,不過仍有不少模塊沒有嘗試過。我建議你學習更多有關TypeData模塊的內容。利用這個模塊,你能夠建立諸如劍影拖尾,閃電甚至傾盆大雨的特效!
若是你還想繼續學習引擎其餘內容,點擊下篇教程,將講解有如何上手使用AI。