虛幻引擎學習之路:動畫模塊之基礎篇

原文鏈接:虛幻引擎學習之路:動畫模塊之基礎篇 - UWA Blog

在之前的微信文章推送中,我們陸續為大家詳細介紹了Unreal 4引擎的渲染模塊(包括光照系統、材質系統、相機後處理和全局光照明),接下來我們將講解動畫模塊的基礎功能,並且將在後續文章中陸續推出該模塊中進階功能和特殊用途的介紹。

在此,特別感謝Unreal中國團隊對於本篇文章中Unreal引擎相關內容的審核,並在UWA團隊學習其引擎的道路上提供的大力支持。


前言

動畫模塊是遊戲引擎中的重要部分,是驅動遊戲中場景、角色能夠活靈活現地做出動作的基礎。UWA將分三塊內容介紹Unreal 4引擎中的動畫模塊功能,其中包括:基礎功能、進階功能以及特殊功能。在介紹基礎和進階功能時,UWA不僅會對其功能進行重點講解,同時也將結合Unity引擎中的相似功能進行類比,以求讓大家可以更明晰地掌握Unreal引擎動畫模塊的功能使用。在特殊功能中,UWA將對Unreal 4引擎中針對特殊用途提供的功能進行重點解讀。

本節主要介紹Unreal 4引擎動畫模塊中提供的基礎功能。其中主要包括以下幾個部分:

  • 蒙皮網格
  • 骨骼文件
  • 動畫文件
  • 加粗文字動畫邏輯

Unreal 4引擎的動畫模塊提供了四個編輯器:蒙皮網格編輯器、骨骼編輯器、動畫文件編輯器和動畫藍圖編輯器。上述基礎功能可以分別在這四個編輯器中完成。在接下來的內容中,本文將在介紹基礎功能的同時對相應編輯器的使用進行介紹。


一、 蒙皮網格

Unreal 4引擎支持從外部FBX文件中導入蒙皮網格和動畫。導入操作可通過Content Browser->Import按鈕完成。導入界面如下圖所示:

其中,包含了網格、動畫以及材質相關的導入設置。默認情況下Unreal 4引擎會為網格創建材質、物理以及骨骼文件。若選擇導入動畫,也會同時創建相應動畫文件。

蒙皮網格在Unreal 4引擎中被稱為Skeletal Mesh,其相當於Unity引擎中的Skinned Mesh,表示了帶有蒙皮信息的網格。雙擊Content Browser中的蒙皮網格文件,即可打開蒙皮網格編輯器,如下圖所示:

其中,左邊區域(1區)是Skeletal Mesh的參數設置,右邊區域(2區)是Morph Target(Blend Shape)以及預覽場景設置。在Skeletal Mesh參數設置中,可以設置模型的材質、LOD、Clothing、骨骼、物理(Rigidbody)、Capsule Shadow等相關參數。其中,Clothing支持Nvidia的apex文件。骨骼文件即為下文中將介紹的Skeleton Asset。Capsule Shadow是Unreal 4引擎中Skeletal Mesh特有的軟陰影。它使用形狀不同的Capsule對Mesh進行近似表示,在渲染陰影時則使用該近似表示進行渲染,從而節省了渲染開銷。右上角區域(3區)顯示了與當面Skeletal Mesh相關的文件,點擊即可快速打開相關文件。


二、骨骼文件

Unreal 4引擎中的骨骼文件被稱為Skeleton Asset,其相當於Unity引擎中的Avatar文件。雙擊Content Browser中的Skeleton Asset文件即可打開該文件,如下圖所示:

其中,左邊區域(1區)顯示了當前Skeletal Mesh的骨骼信息,可以選中其中某一骨骼進行編輯。同時,還可進行Retargeting的設置。右上角區域(2區)顯示了選中骨骼的詳細信息以及預覽場景設置。在骨骼詳細信息中可以設置其Transform和Name參數。右下角區域(3區)顯示了動畫事件和Animation Curve。其中,Animation Curve可以用於在動畫過程中修改模型材質以及修改Morph Target曲線。Animation Curve的具體修改過程需要在動畫編輯器中完成,此處只提供了預覽。

在Unity引擎中,查看骨骼信息的方式是將其拖入場景,即可在左邊Hierarchy頁面中看到骨骼信息,需要注意的是,FBX模型不要開啟Optimize GameObject選項。

在Unreal 4引擎中,共用Skeleton Asset的網格可以共享動畫文件,即動畫重定向(Animation Retargeting)。但要共享Skeleton Asset需要滿足一定條件,即兩個網格中的骨骼命名順序要保持一致,如下圖所示:

其中,骨骼(1,2,3)與骨骼(1,2,3,4)可以共用Skeleton Asset,但是與骨骼(1,3,2)無法共用。

在Unity引擎中,通過對Humanoid類型動畫網格的骨骼進行映射也可以支持動畫重定向。但是Unity中的動畫重定向只能支持骨骼長度相近的網格,對於骨骼相差較大的網格會出現穿插或者分離的現象。Unreal 4引擎提供了該問題的解決方案,我們將在後續文章的動畫重定向一節中進行介紹。


三、動畫文件

Unreal 4引擎中的動畫文件被稱為Animation Sequence,其相當於Unity引擎中的Animation Clip。雙擊Content Browser中的Animation Sequence文件即可打開該文件,如下圖所示:

其中,左邊區域(1區)顯示了動畫文件的相關參數和骨骼結構信息。右邊區域(2區)的上半部分顯示了選中骨骼的參數以及預覽場景設置,下半部分顯示了該模型的動畫文件列表。下部區域(3區)顯示了動畫事件、Animation Curve以及Animation Layers Track。其中,Animation Layers Track支持對動畫中單個骨骼的Transform進行修改,從而生成新的動畫序列。

Animation Curve以及Animation Layers Track的功能類似於Unity中創建Animation Clip的功能。在Unity中也可以通過對蒙皮網格創建Animation Clip來修改其材質以及單個骨骼的Transform,如下圖所示:


四、動畫邏輯

在引擎中播放動畫需要處理動畫邏輯。Unreal 4引擎提供了動畫專用的藍圖資源:Animation Blueprint。在Animation Blueprint中包含兩種節點圖:Event Graph和Anim Graph。兩者分別用於提供動畫數值計算邏輯以及動畫狀態機的功能。本節將介紹Unreal 4引擎中動畫邏輯的功能,主要包括:動畫數值計算,動畫狀態機,動畫事件以及動畫邏輯重用。

4.1 動畫數值計算

Event Graph節點圖用於計算播放動畫的邏輯中所需要的數值變數,並提供給後續狀態機使用。其中,Event Blueprint Update Animation節點會在每幀被調用。通過該節點可以在動畫播放期間每幀更新邏輯數值,如下圖所示:

其中,該節點圖每幀計算了兩個數值:IsInAir和Speed。IsInAir用於表示角色目前是否在空中,Speed表示當前角色的速度。IsInAir可以用於在空中切換角色動畫,而Speed則可用於切換角色Idle,Walk以及Run等動畫。

4.2 動畫狀態機

Anim Graph節點圖用於計算角色最後輸出的動作,其本質就是動畫狀態機,類似於Unity引擎中的Animator Controller資源,如下圖所示:

其中,該節點圖包含了一個狀態名字為Default的狀態機,並且將狀態機計算的角色Pose作為最終結果。雙擊State Machine節點,可查看其內容,如下圖所示:

其中,該節點圖包含了默認起始節點Entry以及角色的移動以及跳躍等狀態,在不同狀態之間根據不同的條件進行跳轉。這與Unity引擎中的Animator Controller動畫狀態機過渡頗為相似。由上圖可知從移動節點跳轉到起跳狀態的判定條件即為IsInAir變數值,該數值由Event Graph每幀更新。

雙擊Idle/Run節點可以看到其內容,如下圖所示:

該節點圖根據Speed變數的數值輸出不同的移動動作。其最終結果是通過Blend Space將Idle、Walk和Run三個動作進行插值的計算結果。Blend Space動畫融合將在本文接下來內容中進行介紹。

Unreal 4引擎動畫狀態機不僅提供了動畫狀態以及跳轉的功能,也在動畫跳轉過程中提供了狀態過渡時的動畫融合的功能,其融合時間和融合方式可設置。並且,其還提供了Conduits節點作為分支節點,支持對同一類型多個狀態的管理,如下圖所示:

上圖取自Unreal 4官方網站

其中,Killed為Conduits節點,連接了不同死亡方式的動畫節點。如果同一節點有多個跳轉條件可能同時滿足,通過設置跳轉條件的優先順序解決。

4.3 動畫事件

動畫邏輯中一個重要的功能就是動畫事件,在Unreal 4引擎中被稱為Animation Notification,其相當於Unity引擎中的Animation Event。其中一種動畫事件是在動畫狀態跳轉中觸發,可在轉移條件的詳細屬性中設置,如下圖所示:

其中,Custom Blueprint Event可以在Event Graph中定義。

另一種動畫事件是在動畫播放過程中觸發,可在動畫編輯器中設置。在動畫編輯器的Notifies軌道上點擊右鍵即可添加動畫該種事件,如下圖所示:

其中,這種動畫事件支持三種類型:Play Particle Effect,Play Sound以及Custom。其中,Play Particle Effect和Play Sound分別用於在動畫播放過程中觸發粒子系統和音頻的播放。Custom則可自定義功能。

此外,Unreal 4引擎還提供了Notify State功能。它分別在動畫播放的開始、播放中、結束觸發事件。在開始和結束時各觸發一次,在播放中每幀觸發一次。其添加方式如同Notification一樣,如下圖所示:

其中,Notify State包含三種類型:Timed Particle Effect、Trail和Custom。Timed Particle Effect支持在動畫播放中添加粒子特效,並且粒子特效的播放時長可設置。Trail支持在蒙皮網格上實現拖尾特效。Custom類型需要通過AnimNotifyState Blueprint實現。

4.4 動畫邏輯重用

對於行為相似的角色,有的時候只需要更換不同的動畫文件,而不需要重新製作類似的邏輯,或者可重用部分邏輯。Unreal 4引擎提供了動畫邏輯重用功能提高開發效率。接下來,本節將介紹兩種動畫邏輯重用的方式:Child Animation Blueprint和Sub Animation Blueprint Instance。

- Child Animation Blueprint 主要用於重用所有動畫邏輯,僅替換不同的動畫文件。其使用方式是通過原始Animation Blueprint創建Child Animation Blueprint,如下圖所示:

然後,雙擊打開Child Animation Blueprint,並打開Asset Override Editor窗口,即可在Asset一列對應原動畫位置的下拉菜單中選擇新的動畫文件,下圖則顯示了用BS_Jog替換原始Jog動畫文件的設置過程。

- Sub Animation Blueprint Instance 主要用於將動畫邏輯分解成模塊,然後方便重用。其使用方式是:首先將通用功能動畫邏輯編輯保存成Animation Blueprint,然後在需要引用的節點圖中添加Sub Anim Instance節點,並指向通用功能Animation Blueprint,如下圖所示:

其中,上圖顯示了在Animation Blueprint中引用Sub Anim Instance的過程。Sub Anim Instance的內部參數可以通過設置暴露給外部Animation Blueprint作為輸入,如上圖中的Effect Alpha參數。其設置在Sub Anim Instance節點的詳細信息頁面,如下圖所示:

外部的Pose數據可通過在Sub Anim Instance節點圖中添加Sub-Graph Input節點傳入,如上圖中的In Pose參數。其設置如下圖所示:

其中,上圖為上述例子中Sub Anim Instance的節點圖。Sub Graph Input節點為其提供了外部輸入Pose數據。


以上則為Unreal 4引擎動畫模塊的基礎篇介紹,我們重點講解了動畫模塊的主要編輯和視圖模塊,希望通過上述內容,可以讓您對Unreal引擎的動畫模塊產生明晰的感性認識。下周,UWA將為您帶來Unreal 4引擎更為高級的進階功能,歡迎關注!

推薦閱讀:

《少女終末旅行》畫風怪異的治癒之歌
如何看待與評價2017年國漫的發展?
(K)NoW_NAME 談動畫音樂製作:不管什麼動畫都能勝任的音樂團體

TAG:虚幻4游戏引擎 | 动画 | 游戏引擎 |