天天看點

Unreal Engine 4 —— Ghost Mesh Plugin的開發日志

這篇部落格講述了我為UE4建構Ghost Mesh Plugin的開發過程。

Ghost Mesh Plugin已經在Github上開源,傳送門。

我已經制作了一個視訊用于講解該插件的使用方法,傳送門。

開發背景及成果

在許多動作(ACT)遊戲或者角色扮演(RPG)遊戲中,為了視覺效果,有時會讓角色生成殘影(Ghost Mesh),例如:

Unreal Engine 4 —— Ghost Mesh Plugin的開發日志

(以上截圖來源自真三國無雙7·猛将傳)

殘影效果有若幹種方法可以實作:

  • 一種方法是在後期進行中加入前一段時間的

    RenderTarget

    ,主要通過Shader來實作。這種方法的優點在于可以生成很密集的殘影而不用太擔心效能,缺點則在于生成的殘影不夠真實(殘影無法與場景中的光進行互動)。
  • 另一種方法則是簡單粗暴的直接在場景中生成一個與目前的Skeletal Mesh同樣姿勢的模型。這種方法的優點在于簡單粗暴并且真實,缺點則在于對效能有要求,無法大量生成。

Ghost Mesh Plugin使用的是上述第二種方法,在使用插件時,開發者需要提供一個目前的

Skeletal Mesh Component

作為參數傳入,然後就會在場景中生成一個同樣姿勢的Ghost Mesh,效果如下:

Unreal Engine 4 —— Ghost Mesh Plugin的開發日志

GhostMeshActor

在建構插件的最初始階段,原本是為了便宜從事,是以一開始打算的實作方法是在Actor裡添加

PoseableMeshComponent

來實作殘影。但是由于UE4中的

UComponent

裡面無法添加

TimeLine

以及

LifeSpan

等屬性,是以最後還是選擇生成一個Actor。

在生成GhostMeshAcor後,需要調用其

MakePoseBySkeletalMesh()

函數(在Blueprint中的FriendlyName為”

Pose Mesh Actor

“),傳入一個

SkeletalMeshComponent

作為參數。在執行這個函數後,生成的

GhostMeshActor

就會擁有和該

SkeletalMeshComponent

一樣的Pose。

Unreal Engine 4 —— Ghost Mesh Plugin的開發日志

OnSpawned

事件

在開發中遇到的另一個問題是殘影的材質。殘影通常要有自己的材質,并且經常伴随着淡入淡出的表現。

是以考慮到這種的開發情況,以及需要适配所有的

Skeletal Mesh

GhostMeshActor

裡面設定了一個

OnSpawn()

函數,類型是

BlueprintImplementableEvent

,可以在BP中進行重寫。

在項目中,可以建構一個繼承自GhostMeshActor的BP,選擇重寫OnSpawn函數,便可以進行Ghost Mesh Actor出生後的邏輯。

下圖是GhostMesh淡出的邏輯:

Unreal Engine 4 —— Ghost Mesh Plugin的開發日志

後續開發展望

目前的插件已經可以實作針對于殘影的大部分功能,但是有不足的地方就在于性能。日後估計有可能添加一個生成一個StaticMesh的功能。

但是如果生成StaticMesh,那麼無法照顧到殘影的布料細節,是以還在糾結。

各位有興趣,可以直接下載下傳該Plugin使用。

<全文完>

繼續閱讀