對於獨立遊戲開發來說,為了要控制成本,通常人物動畫都會優先找現成的素材來使用,但這樣就很容易會遇到,不同來源的動畫檔,因為使用不同的骨架,所以無法相容的問題。

如果是在Unity中,可以使用Unity的Avatar系統來幫助我們統一人物的骨架,進而複用不同的動畫檔。
在Unreal中則可以使用Compatible Skeleton(相容骨架)或是Retargeting(重定位)等方式來完成,這篇文章就來記錄我學習Retargeting的過程。
本文使用的動畫素材來自Mixamo,人物模型則是我使用VRoid隨意拉的角色。

使用Retargeting的步驟

  1. 建立來源動畫檔骨架的IK Rig,並設置Bone Chain
  2. 建立目標角色骨架的IK Rig,並設置Bone Chain
  3. 建立IK Retargeter將前面兩個IK Rig映射起來,並統一來源與目標骨架的姿勢
  4. 選定要複用的動畫檔,使用剛建立好的IK Retargeter轉換成目標角色可以使用的新動畫檔

建立來源動畫檔骨架的IK Rig

首先我先建立從Mixamo上下載的動畫檔骨架的IK Rig,取名叫IK_Mixamo,然後將骨架放進Preview Mesh裡面。
接著在Hierarchy面板中,選擇骨盆,設置為Retarget Root,設置成功後,會看到在IK Retargeting面板顯示目前的Retarget Root是骨盆。

再來是在IK Retargeting面板中設定Bone Chain,Bone Chain就是指一組連接且會相互影響的關節,像是「手臂、手肘、手掌」,「大腿、小腿、腳掌」等等。
一般來說最基本需要設定7組Bone Chain:

  • Root
  • Spine
  • Head
  • LeftArm
  • RightArm
  • LeftLeg
  • RightLeg

其餘的像是手指頭等Bone Chain可以按需求增加。
我們只需要在Hierarchy面板中選擇幾個相連的關節,右鍵選擇New Retarget Chain就可以新增Bone Chain囉!此處也先不用設置IK Goal。
至於命名方式就建議預設的就可以了,到時候在IK Retargeter會透過名稱來自動映射兩組IK Rig的Bone Chain。

不過從Mixamo上下載的動畫骨架沒有Root,因此我只設置了6個,但不會影響最後的效果。

建立目標角色骨架的IK Rig

建立好來源骨架的IK Rig後,也要用同樣的方式建立目標骨架的IK Rig,而我使用VRM4U匯入VRoid的角色時,也自動幫我創建好角色骨架的IK Rig(插件也把其他Bone Chain一併設定好了,不過目前用不到),所以就不用自己建立了,如果大家是使用其他角色模型的話,只要按照製作來源骨架的IK Rig的方法再做一次,即可準備好目標骨架的IK Rig。

建立IK Retargeter將前面兩個IK Rig映射起來

最後我們再建立一個IK Retargeter將前面兩個IK Rig映射起來,取名叫RTG_Mixamo。

然後到Chain Mapping面板就可以看到Unreal自動將兩個IK Rig相同名稱的Bone Chain映射起來。
但因為Mixamo的骨架沒有Root,所以這裡的Root是None。

如果目標骨架預設的姿勢與來源骨架不一樣的話,也要在這裡調整成一樣的姿勢,不然就會出現動畫跑掉的問題,不過因為這裡很剛好我選擇的兩個骨架姿勢是一樣的,所以可以直接使用。
但如果遇到姿勢不一樣的情況時,我們可以到Hierarchy面板,選擇Target,然後新增一個姿勢(避免修改預設姿勢,說不定哪天會用到),並進入Edit Mode編輯成跟來源骨架一樣的姿勢。

接下來就可以到Asset Browser面板選擇要預覽的動畫檔,播放看看是否有什麼問題。

有的時候會因為兩個骨架的身材比例不一樣會讓動畫扭曲,這個時候可以到目標角色的骨架中,設定每個骨頭的Translation Retargeting。
可以先到目標骨架的Skeleton Tree面板中,開啟Show Retargeting Options選項,就可以看到每根骨頭後面出現Translation Retargeting選項可以調整。

我們只需要將Root設置為Animation,骨盆設置為Animation Scaled,其餘骨頭設置為Skeleton就可以了,如此一來我們的動畫就可以正常撥放囉。

複用動畫檔

最後一步就是要將我們的來源動畫檔,透過剛建立好的IK Retargeter轉換成目標角色可以使用的新動畫檔。
回到Content Browser中,選擇要轉換的來源動畫檔,右鍵找到以下選項

接著選擇RTG_Mixamo,然後指定新動畫檔的目標位置就可以Retarget囉!

參考資料:UE5 Animation 02: Retarget動作重訂目標

__END__