虚幻引擎学习之路:粒子系统篇(二)
生活随笔
收集整理的這篇文章主要介紹了
虚幻引擎学习之路:粒子系统篇(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在此,特別感謝Unreal中國團(tuán)隊(duì)對(duì)于本篇文章中Unreal引擎相關(guān)內(nèi)容的審核,并在UWA團(tuán)隊(duì)學(xué)習(xí)其引擎的道路上提供的大力支持。
Required Module是粒子系統(tǒng)Emitter中默認(rèn)添加且不能刪除的Module。它包含了Emitter以及時(shí)間、渲染相關(guān)的設(shè)置,例如:材質(zhì)、發(fā)射器的位置和朝向等,如下圖所示:
設(shè)置不同的粒子系統(tǒng)材質(zhì)能夠渲染出不同顏色以及紋理的粒子。通常粒子系統(tǒng)材質(zhì)采用的Blend Mode是Translucent。并且在編輯材質(zhì)時(shí),需要用到Particle Color節(jié)點(diǎn)來修改粒子顏色,如下圖所示:
其中,上圖紅色框顯示了材質(zhì)設(shè)置中Blend Mode的設(shè)置,綠色框顯示了使用Particle Color節(jié)點(diǎn)獲取并修改粒子顏色。最終渲染結(jié)果如下圖所示: 1.2 Light
類似于Unity引擎中粒子系統(tǒng)的Lights組件,Unreal 4引擎粒子系統(tǒng)同樣支持為粒子系統(tǒng)添加光源來照亮場景,如下圖所示:
其中,左圖紅框顯示了Unreal 4引擎中Light Module的設(shè)置,右圖紅框顯示Unity引擎中Light Module的設(shè)置。下圖顯示了具有光源屬性的粒子系統(tǒng)渲染結(jié)果圖:
需要說明的是,在Unreal 4引擎中,Light Module只能用于CPU粒子。GPU粒子暫時(shí)還不支持光源的功能。 1.3 Collision
類似于Unity引擎粒子系統(tǒng)中的Collision組件,Unreal 4引擎同樣支持粒子的碰撞檢測(cè),如下圖所示:
其中,左圖紅框顯示了Unreal 4引擎粒子系統(tǒng)的碰撞設(shè)置,右圖顯示了Unity引擎粒子系統(tǒng)的碰撞設(shè)置。下圖顯示了帶碰撞檢測(cè)的粒子渲染結(jié)果:
其中,綠色粒子被發(fā)射出之后碰撞到地面和Box后會(huì)產(chǎn)生反彈。 1.4 Event
類似于Unity引擎中的粒子系統(tǒng)事件處理,買二手手機(jī)號(hào)平臺(tái)Unreal 4引擎同樣支持觸發(fā)事件以及事件響應(yīng)的功能,如下圖所示:
其中,左圖紅色框顯示了Unreal 4引擎中粒子系統(tǒng)觸發(fā)事件的設(shè)置界面,右圖紅框顯示了Unity引擎中粒子系統(tǒng)觸發(fā)事件的設(shè)置界面。Unreal 4引擎支持不同類型的粒子事件,包括:粒子生成、發(fā)射、消失、碰撞時(shí)觸發(fā)以及在Blueprint腳本中響應(yīng)等,可以在左圖中Type參數(shù)中設(shè)置。并且,可以通過Custom Name參數(shù)設(shè)置事件名稱。在Event Receiver中可根據(jù)事件名稱對(duì)不同事件進(jìn)行處理。 左圖中綠色框顯示了粒子系統(tǒng)發(fā)射器中接收并處理事件的兩個(gè)Module。其中,Event Receiver Kill All是用于在接收到事件時(shí)刪除該Emitter的所有粒子,Event Receiver Spawn則是用于在接收到事件時(shí)生成新的粒子。其設(shè)置界面如下圖所示:
其中,在Source參數(shù)列表中可設(shè)置事件的類型和名稱,用于響應(yīng)指定類型和名稱的事件。一個(gè)Event Generator可以生成多個(gè)事件,一個(gè)Event Receiver只能處理一個(gè)事件。但一個(gè)Emitter支持添加多個(gè)Event Receiver來處理不同的事件,如下圖所示:
Unity引擎也同樣提供了三種事件響應(yīng)類型:Kill,Ignore,Callback。其中,Kill表示事件觸發(fā)時(shí)刪除粒子,Ignore表示忽略該事件,Callback表示在C#腳本中對(duì)該事件進(jìn)行處理。 1.5 Camera Offset
Unreal 4引擎中Camera Offset Module可以實(shí)現(xiàn)將粒子根據(jù)相機(jī)位置進(jìn)行位移的功能。其設(shè)置界面如下圖所示:
其渲染效果如下圖所示:
其中,紅色和綠色粒子大小相同,但紅色粒子距離相機(jī)距離增加了30個(gè)單位。 1.6 Vector Field
Unreal 4引擎支持使用向量場驅(qū)動(dòng)粒子運(yùn)動(dòng)。向量場由一組在空間中分布的向量表示粒子在該位置時(shí)的速度或加速度。Unreal 4引擎采用體素表示向量場,每個(gè)體素中保存了向量的x,y,z分量。引擎支持在Maya中制作向量場并導(dǎo)出成.FGA格式文件然后進(jìn)行導(dǎo)入。FGA文件為純文本文件,如果不想用Maya制作,僅僅做為測(cè)試使用,也可利用Github上的開源工具【1】自動(dòng)生成。下圖顯示了將向量場導(dǎo)入U(xiǎn)nreal 4引擎后的可視化結(jié)果:
其中,紅色細(xì)線表示了空間中向量的方向。 Unreal 4引擎中向量場僅支持GPU粒子,因此在創(chuàng)建粒子系統(tǒng)時(shí)需將Emitter的Type Data設(shè)置為GPU Sprites。向量場的類型有兩種,局部和全局。局部向量場只影響該Module所在的粒子系統(tǒng),而全局向量場則會(huì)影響空間中所有粒子系統(tǒng)。本文以局部向量場為例,可在Emitter中添加Local Vector Field Module,如下圖所示:
其中,上圖紅色框顯示了對(duì)向量場資源文件的設(shè)置。對(duì)于全局向量場,需要將資源作為Actor放入場景中。上圖綠色框中的兩個(gè)參數(shù):Intensity和Tightness分別用于控制向量場對(duì)粒子作用的強(qiáng)度和方式。其中,Tightness取值為[0, 1]之間。當(dāng)取值為0時(shí),向量場表示了對(duì)粒子施加的力,它會(huì)將其中保存的向量值累加到粒子速度。當(dāng)取值為1時(shí),向量場表示粒子的速度,它會(huì)將其中保存的向量值賦值給粒子速度。此外,還可通過VF Init Rotation、VF Rotation Rate、Vector Field Scale以及VF Scale/Life等Module對(duì)向量場的旋轉(zhuǎn)和縮放進(jìn)行調(diào)整。下圖顯示了向量場中粒子系統(tǒng)渲染結(jié)果:
其中,左圖為粒子系統(tǒng)LOD0設(shè)置及渲染結(jié)果,右圖為引擎自動(dòng)生成的LOD1設(shè)置及渲染結(jié)果。默認(rèn)情況下,LOD1中除了Spawn之外的其他Module都不能被修改。如果需要修改,則需通過右鍵->Duplicate from Higher菜單將其設(shè)置為可修改,然后即可進(jìn)行編輯,如下圖所示:
其中,紅框顯示了RequiredModule的Details面板為灰色不可編輯狀態(tài)。綠色框顯示了通過右鍵菜單可將其變?yōu)榭尚薷?。如果需要添加更多LOD層級(jí),可點(diǎn)擊工具欄Add LOD按鈕,引擎會(huì)在LOD0和已生成的最低級(jí)LOD(LOD1)之間生成新的LOD。新的LOD會(huì)復(fù)制LOD0的設(shè)置,但可通上述右鍵菜單進(jìn)行編輯。 然后,在粒子系統(tǒng)的LOD設(shè)置中,可設(shè)置不同距離使用不同的LOD,如下圖所示:
其中,上圖紅框顯示了LODDistance的設(shè)置,在距離相機(jī)[0, 500]范圍使用LOD0,距離相機(jī)500以上使用LOD1,渲染結(jié)果如下圖所示:
其中,場景中使用了兩個(gè)相同的粒子系統(tǒng)。近處的粒子系統(tǒng)渲染出紅色粒子表明其使用了LOD0進(jìn)行渲染,遠(yuǎn)處的粒子系統(tǒng)渲染出綠色粒子表明其使用了LOD1進(jìn)行渲染。 此外,Unreal4引擎對(duì)粒子系統(tǒng)半透明渲染的Overdraw做了優(yōu)化。在ProjectSetting->Rendering > Optimization中有一個(gè)渲染Enable Particle Cutouts by Default選項(xiàng),如下圖所示:
開啟該選項(xiàng)后,引擎會(huì)自動(dòng)根據(jù)粒子紋理可見部分生成相應(yīng)的幾何面片,從而減少透明度為0的像素浪費(fèi)情況,如下圖所示:
一、Module 功能
Required Module是粒子系統(tǒng)Emitter中默認(rèn)添加且不能刪除的Module。它包含了Emitter以及時(shí)間、渲染相關(guān)的設(shè)置,例如:材質(zhì)、發(fā)射器的位置和朝向等,如下圖所示:
設(shè)置不同的粒子系統(tǒng)材質(zhì)能夠渲染出不同顏色以及紋理的粒子。通常粒子系統(tǒng)材質(zhì)采用的Blend Mode是Translucent。并且在編輯材質(zhì)時(shí),需要用到Particle Color節(jié)點(diǎn)來修改粒子顏色,如下圖所示:
其中,上圖紅色框顯示了材質(zhì)設(shè)置中Blend Mode的設(shè)置,綠色框顯示了使用Particle Color節(jié)點(diǎn)獲取并修改粒子顏色。最終渲染結(jié)果如下圖所示: 1.2 Light
類似于Unity引擎中粒子系統(tǒng)的Lights組件,Unreal 4引擎粒子系統(tǒng)同樣支持為粒子系統(tǒng)添加光源來照亮場景,如下圖所示:
其中,左圖紅框顯示了Unreal 4引擎中Light Module的設(shè)置,右圖紅框顯示Unity引擎中Light Module的設(shè)置。下圖顯示了具有光源屬性的粒子系統(tǒng)渲染結(jié)果圖:
需要說明的是,在Unreal 4引擎中,Light Module只能用于CPU粒子。GPU粒子暫時(shí)還不支持光源的功能。 1.3 Collision
類似于Unity引擎粒子系統(tǒng)中的Collision組件,Unreal 4引擎同樣支持粒子的碰撞檢測(cè),如下圖所示:
其中,左圖紅框顯示了Unreal 4引擎粒子系統(tǒng)的碰撞設(shè)置,右圖顯示了Unity引擎粒子系統(tǒng)的碰撞設(shè)置。下圖顯示了帶碰撞檢測(cè)的粒子渲染結(jié)果:
其中,綠色粒子被發(fā)射出之后碰撞到地面和Box后會(huì)產(chǎn)生反彈。 1.4 Event
類似于Unity引擎中的粒子系統(tǒng)事件處理,買二手手機(jī)號(hào)平臺(tái)Unreal 4引擎同樣支持觸發(fā)事件以及事件響應(yīng)的功能,如下圖所示:
其中,左圖紅色框顯示了Unreal 4引擎中粒子系統(tǒng)觸發(fā)事件的設(shè)置界面,右圖紅框顯示了Unity引擎中粒子系統(tǒng)觸發(fā)事件的設(shè)置界面。Unreal 4引擎支持不同類型的粒子事件,包括:粒子生成、發(fā)射、消失、碰撞時(shí)觸發(fā)以及在Blueprint腳本中響應(yīng)等,可以在左圖中Type參數(shù)中設(shè)置。并且,可以通過Custom Name參數(shù)設(shè)置事件名稱。在Event Receiver中可根據(jù)事件名稱對(duì)不同事件進(jìn)行處理。 左圖中綠色框顯示了粒子系統(tǒng)發(fā)射器中接收并處理事件的兩個(gè)Module。其中,Event Receiver Kill All是用于在接收到事件時(shí)刪除該Emitter的所有粒子,Event Receiver Spawn則是用于在接收到事件時(shí)生成新的粒子。其設(shè)置界面如下圖所示:
其中,在Source參數(shù)列表中可設(shè)置事件的類型和名稱,用于響應(yīng)指定類型和名稱的事件。一個(gè)Event Generator可以生成多個(gè)事件,一個(gè)Event Receiver只能處理一個(gè)事件。但一個(gè)Emitter支持添加多個(gè)Event Receiver來處理不同的事件,如下圖所示:
Unity引擎也同樣提供了三種事件響應(yīng)類型:Kill,Ignore,Callback。其中,Kill表示事件觸發(fā)時(shí)刪除粒子,Ignore表示忽略該事件,Callback表示在C#腳本中對(duì)該事件進(jìn)行處理。 1.5 Camera Offset
Unreal 4引擎中Camera Offset Module可以實(shí)現(xiàn)將粒子根據(jù)相機(jī)位置進(jìn)行位移的功能。其設(shè)置界面如下圖所示:
其渲染效果如下圖所示:
?
其中,紅色和綠色粒子大小相同,但紅色粒子距離相機(jī)距離增加了30個(gè)單位。 1.6 Vector Field
Unreal 4引擎支持使用向量場驅(qū)動(dòng)粒子運(yùn)動(dòng)。向量場由一組在空間中分布的向量表示粒子在該位置時(shí)的速度或加速度。Unreal 4引擎采用體素表示向量場,每個(gè)體素中保存了向量的x,y,z分量。引擎支持在Maya中制作向量場并導(dǎo)出成.FGA格式文件然后進(jìn)行導(dǎo)入。FGA文件為純文本文件,如果不想用Maya制作,僅僅做為測(cè)試使用,也可利用Github上的開源工具【1】自動(dòng)生成。下圖顯示了將向量場導(dǎo)入U(xiǎn)nreal 4引擎后的可視化結(jié)果:
其中,紅色細(xì)線表示了空間中向量的方向。 Unreal 4引擎中向量場僅支持GPU粒子,因此在創(chuàng)建粒子系統(tǒng)時(shí)需將Emitter的Type Data設(shè)置為GPU Sprites。向量場的類型有兩種,局部和全局。局部向量場只影響該Module所在的粒子系統(tǒng),而全局向量場則會(huì)影響空間中所有粒子系統(tǒng)。本文以局部向量場為例,可在Emitter中添加Local Vector Field Module,如下圖所示:
其中,上圖紅色框顯示了對(duì)向量場資源文件的設(shè)置。對(duì)于全局向量場,需要將資源作為Actor放入場景中。上圖綠色框中的兩個(gè)參數(shù):Intensity和Tightness分別用于控制向量場對(duì)粒子作用的強(qiáng)度和方式。其中,Tightness取值為[0, 1]之間。當(dāng)取值為0時(shí),向量場表示了對(duì)粒子施加的力,它會(huì)將其中保存的向量值累加到粒子速度。當(dāng)取值為1時(shí),向量場表示粒子的速度,它會(huì)將其中保存的向量值賦值給粒子速度。此外,還可通過VF Init Rotation、VF Rotation Rate、Vector Field Scale以及VF Scale/Life等Module對(duì)向量場的旋轉(zhuǎn)和縮放進(jìn)行調(diào)整。下圖顯示了向量場中粒子系統(tǒng)渲染結(jié)果:
二、LOD 功能
?
其中,左圖為粒子系統(tǒng)LOD0設(shè)置及渲染結(jié)果,右圖為引擎自動(dòng)生成的LOD1設(shè)置及渲染結(jié)果。默認(rèn)情況下,LOD1中除了Spawn之外的其他Module都不能被修改。如果需要修改,則需通過右鍵->Duplicate from Higher菜單將其設(shè)置為可修改,然后即可進(jìn)行編輯,如下圖所示:
其中,紅框顯示了RequiredModule的Details面板為灰色不可編輯狀態(tài)。綠色框顯示了通過右鍵菜單可將其變?yōu)榭尚薷?。如果需要添加更多LOD層級(jí),可點(diǎn)擊工具欄Add LOD按鈕,引擎會(huì)在LOD0和已生成的最低級(jí)LOD(LOD1)之間生成新的LOD。新的LOD會(huì)復(fù)制LOD0的設(shè)置,但可通上述右鍵菜單進(jìn)行編輯。 然后,在粒子系統(tǒng)的LOD設(shè)置中,可設(shè)置不同距離使用不同的LOD,如下圖所示:
其中,上圖紅框顯示了LODDistance的設(shè)置,在距離相機(jī)[0, 500]范圍使用LOD0,距離相機(jī)500以上使用LOD1,渲染結(jié)果如下圖所示:
其中,場景中使用了兩個(gè)相同的粒子系統(tǒng)。近處的粒子系統(tǒng)渲染出紅色粒子表明其使用了LOD0進(jìn)行渲染,遠(yuǎn)處的粒子系統(tǒng)渲染出綠色粒子表明其使用了LOD1進(jìn)行渲染。 此外,Unreal4引擎對(duì)粒子系統(tǒng)半透明渲染的Overdraw做了優(yōu)化。在ProjectSetting->Rendering > Optimization中有一個(gè)渲染Enable Particle Cutouts by Default選項(xiàng),如下圖所示:
開啟該選項(xiàng)后,引擎會(huì)自動(dòng)根據(jù)粒子紋理可見部分生成相應(yīng)的幾何面片,從而減少透明度為0的像素浪費(fèi)情況,如下圖所示:
上圖取自Unreal 4引擎官方文檔【2】
?
三、小結(jié)
?
總結(jié)
以上是生活随笔為你收集整理的虚幻引擎学习之路:粒子系统篇(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏行业DDoS 6年谈:什么样的架构才
- 下一篇: Photon多人游戏开发教程