虛幻引擎學習之路:粒子系統篇(二)
原文鏈接:虛幻引擎學習之路:粒子系統篇(二) - UWA Blog
在上一篇虛幻引擎學習之路:粒子系統篇(一)中,UWA介紹了粒子系統的結構以及Type Data類型的Module。本文將繼續介紹其他類型的Module以及LOD和Vector Field功能。
在此,特別感謝Unreal中國團隊對於本篇文章中Unreal引擎相關內容的審核,並在UWA團隊學習其引擎的道路上提供的大力支持。
一、Module 功能
1.1 Required
Required Module是粒子系統Emitter中默認添加且不能刪除的Module。它包含了Emitter以及時間、渲染相關的設置,例如:材質、發射器的位置和朝向等,如下圖所示:設置不同的粒子系統材質能夠渲染出不同顏色以及紋理的粒子。通常粒子系統材質採用的Blend Mode是Translucent。並且在編輯材質時,需要用到Particle Color節點來修改粒子顏色,如下圖所示:
其中,上圖紅色框顯示了材質設置中Blend Mode的設置,綠色框顯示了使用Particle Color節點獲取並修改粒子顏色。最終渲染結果如下圖所示:
1.2 Light
類似於Unity引擎中粒子系統的Lights組件,Unreal 4引擎粒子系統同樣支持為粒子系統添加光源來照亮場景,如下圖所示:其中,左圖紅框顯示了Unreal 4引擎中Light Module的設置,右圖紅框顯示Unity引擎中Light Module的設置。下圖顯示了具有光源屬性的粒子系統渲染結果圖:
需要說明的是,在Unreal 4引擎中,Light Module只能用於CPU粒子。GPU粒子暫時還不支持光源的功能。
1.3 Collision
類似於Unity引擎粒子系統中的Collision組件,Unreal 4引擎同樣支持粒子的碰撞檢測,如下圖所示:其中,左圖紅框顯示了Unreal 4引擎粒子系統的碰撞設置,右圖顯示了Unity引擎粒子系統的碰撞設置。下圖顯示了帶碰撞檢測的粒子渲染結果:
其中,綠色粒子被發射出之後碰撞到地面和Box後會產生反彈。
1.4 Event
類似於Unity引擎中的粒子系統事件處理,Unreal 4引擎同樣支持觸發事件以及事件響應的功能,如下圖所示:其中,左圖紅色框顯示了Unreal 4引擎中粒子系統觸發事件的設置界面,右圖紅框顯示了Unity引擎中粒子系統觸發事件的設置界面。Unreal 4引擎支持不同類型的粒子事件,包括:粒子生成、發射、消失、碰撞時觸發以及在Blueprint腳本中響應等,可以在左圖中Type參數中設置。並且,可以通過Custom Name參數設置事件名稱。在Event Receiver中可根據事件名稱對不同事件進行處理。
左圖中綠色框顯示了粒子系統發射器中接收並處理事件的兩個Module。其中,Event Receiver Kill All是用於在接收到事件時刪除該Emitter的所有粒子,Event Receiver Spawn則是用於在接收到事件時生成新的粒子。其設置界面如下圖所示:
其中,在Source參數列表中可設置事件的類型和名稱,用於響應指定類型和名稱的事件。一個Event Generator可以生成多個事件,一個Event Receiver只能處理一個事件。但一個Emitter支持添加多個Event Receiver來處理不同的事件,如下圖所示:
Unity引擎也同樣提供了三種事件響應類型:Kill,Ignore,Callback。其中,Kill表示事件觸發時刪除粒子,Ignore表示忽略該事件,Callback表示在C#腳本中對該事件進行處理。
1.5 Camera Offset
Unreal 4引擎中Camera Offset Module可以實現將粒子根據相機位置進行位移的功能。其設置界面如下圖所示:其渲染效果如下圖所示:
其中,紅色和綠色粒子大小相同,但紅色粒子距離相機距離增加了30個單位。
1.6 Vector Field
Unreal 4引擎支持使用向量場驅動粒子運動。向量場由一組在空間中分布的向量表示粒子在該位置時的速度或加速度。Unreal 4引擎採用體素表示向量場,每個體素中保存了向量的x,y,z分量。引擎支持在Maya中製作向量場並導出成.FGA格式文件然後進行導入。FGA文件為純文本文件,如果不想用Maya製作,僅僅做為測試使用,也可利用Github上的開源工具【1】自動生成。下圖顯示了將向量場導入Unreal 4引擎後的可視化結果:其中,紅色細線表示了空間中向量的方向。
Unreal 4引擎中向量場僅支持GPU粒子,因此在創建粒子系統時需將Emitter的Type Data設置為GPU Sprites。向量場的類型有兩種,局部和全局。局部向量場隻影響該Module所在的粒子系統,而全局向量場則會影響空間中所有粒子系統。本文以局部向量場為例,可在Emitter中添加Local Vector Field Module,如下圖所示:
其中,上圖紅色框顯示了對向量場資源文件的設置。對於全局向量場,需要將資源作為Actor放入場景中。上圖綠色框中的兩個參數:Intensity和Tightness分別用於控制向量場對粒子作用的強度和方式。其中,Tightness取值為[0, 1]之間。當取值為0時,向量場表示了對粒子施加的力,它會將其中保存的向量值累加到粒子速度。當取值為1時,向量場表示粒子的速度,它會將其中保存的向量值賦值給粒子速度。此外,還可通過VF Init Rotation、VF Rotation Rate、Vector Field Scale以及VF Scale/Life等Module對向量場的旋轉和縮放進行調整。下圖顯示了向量場中粒子系統渲染結果:
二、LOD 功能
Unreal 4引擎粒子系統提供了LOD功能。當粒子系統距離相機較遠時,可通過LOD降低渲染的開銷。在Unreal 4引擎中創建粒子系統的LOD比較方便,只需先將LOD0的粒子系統製作好,然後點擊工具欄中的Regenerate Lowest LOD,引擎便會自動創建最低級的粒子系統。默認情況下創建的LOD1粒子系統的所有設置都繼承自LOD0,但發射粒子個數被降低到1/10,如下圖所示:
其中,左圖為粒子系統LOD0設置及渲染結果,右圖為引擎自動生成的LOD1設置及渲染結果。默認情況下,LOD1中除了Spawn之外的其他Module都不能被修改。如果需要修改,則需通過右鍵->Duplicate from Higher菜單將其設置為可修改,然後即可進行編輯,如下圖所示:
其中,紅框顯示了RequiredModule的Details面板為灰色不可編輯狀態。綠色框顯示了通過右鍵菜單可將其變為可修改。如果需要添加更多LOD層級,可點擊工具欄Add LOD按鈕,引擎會在LOD0和已生成的最低級LOD(LOD1)之間生成新的LOD。新的LOD會複製LOD0的設置,但可通上述右鍵菜單進行編輯。
然後,在粒子系統的LOD設置中,可設置不同距離使用不同的LOD,如下圖所示:
其中,上圖紅框顯示了LODDistance的設置,在距離相機[0, 500]範圍使用LOD0,距離相機500以上使用LOD1,渲染結果如下圖所示:
其中,場景中使用了兩個相同的粒子系統。近處的粒子系統渲染出紅色粒子表明其使用了LOD0進行渲染,遠處的粒子系統渲染出綠色粒子表明其使用了LOD1進行渲染。
此外,Unreal4引擎對粒子系統半透明渲染的Overdraw做了優化。在ProjectSetting->Rendering > Optimization中有一個渲染Enable Particle Cutouts by Default選項,如下圖所示:
開啟該選項後,引擎會自動根據粒子紋理可見部分生成相應的幾何面片,從而減少透明度為0的像素浪費情況,如下圖所示:
上圖取自Unreal 4引擎官方文檔【2】
其中,上圖左圖紅線為粒子系統原始面片,右圖紅線為開啟優化選項後的面片。
三、小結
以上,則為Unreal 4引擎粒子系統學習系列中的第二部分,重點介紹了Unreal 4引擎中粒子系統的重點模塊和高級功能。在後續的文章中,我們就Unreal 4引擎中的新粒子系統Niagara進行詳細的介紹。
參考文獻
【1】 https://github.com/LuggLD/EasyVectorFields/releases
【2】https://docs.unrealengine.com/latest/INT/Support/Builds/ReleaseNotes/2016/4_11/index.html推薦閱讀: