這篇文章主要是要記錄自己怎麼把Mixamo中的動畫導出來給Unreal中的Mannequin用,以及除何修正中途遇到的一些坑。
使用版本:5.1
第一步當然是先從Mixamo下載看中想使用的動畫。
由於Mixamo的骨架跟Unreal不相容,主要原因Mixamo是少了一個root,這會造成root motion沒辦法正常運作。我們可以下載 mixamo_convert這個Blender Addons來幫我們加上一個root bone。
如下圖,右邊加上root的是我們希望的狀態:
這邊要注意的是,Blender Addons的安裝要使用zip才認的到。
https://github.com/enziop/mixamo_converter
下載完zip之後,從preference選Add-ons安裝,然後把功能打開
接著從右上方打開選單
可以看到Mixamo Rootbaker
可以選擇把bone轉成UnrealEngine公版的bone Name,但我這邊不勾,之後自己再使用UE內建的IK Rig以及IK Retargeter來做map,詳細步驟後面會記錄。另外他的OutputPath目錄不會自己建,所以要自己先開:
之後我們就可以先匯入轉換過後的Mixamo的模型(X Bot.fbx)
接著匯入其他的動畫,記得Import Mesh勾掉,Skeleton選擇剛剛匯入的。
然後就可以開始建立IK Rig,這個檔案的目的是建出組Bone Chain,讓我們可以可以在IK Retargeter中指定Source IK Rig跟Target IK Rig做map。
Source就是剛剛匯進來的Mixamo,我們必須要手動建一個出來(右鍵Animation -> IK Rig 下可以找到),Target則是Unreal內建的Mannequin,路徑是/Game/Characters/Mannequins/Rigs/IK_Mannequin。
我們的IK Rig需要哪些Bone Chain可以參考IK_Mannequin裡面的定義,不過Mixamo的骨架裡並沒有定義Twist跟IK相關的骨架,因此這邊可以先無視。建完的BoneChain如下圖:
接下來在同個IK Rig檔中,把Hips bone設成Retarget Root。
然後就可以建出IK Retargeter來做map了,Copy Animation From選我們剛剛建的IKRig,
Target IKRig則選擇IK_Mannequin,Preview Setting可以調整Mesh offset,讓他們不會疊在一起。只是,這時候我們會發現會發現UE的角色的A-Pose,但Mixamo卻是T-Pose。
在Unreal中它提供了Edit Mode可以讓我們針對Pose的調整,調整完之後可以匯出成Pose Asset,之後就可以重覆利用。不過但可以想見,我們頂多對upperarm_l跟upperarm_r之類比較上層的bone做粗細略的調整,下面的手指還要一個一個調的話實在是太累了,而且會非常難調到完全一模一樣。
這個時候一個想法是,如果是不是有外部工具來幫我們把A-Pose的模型自動轉成T-Pose?研究了一下,發現Mixamo提供上傳自製模型fbx的功能:
下載的時候可以選擇是不是要用T-Pose.:
把這個FBX匯入,裡面會有一個{FileName}_Anim_mixamo_com Animation檔案,會幫我們的骨架調整成T-Pose。
確認完是T-Pose之後,就可以按上方的Create PoseAsset另外存成PoseAsset,如下圖:
接下來打開剛剛創出來的PoseAsset:
調整Pose_0的Weight,看看是不是能從A-Pose過渡到T-Pose
回到Retargeter,就可以套用剛剛建好的Pose Asset,然後就可以完美的把我們的Target調整成T-Pose了。嗯,總算可以不用慢慢的每個bone都去調整,想到就頭暈。
接著做完mapping之後,在把Animation導出之前,記得把Root Bone Chain的translation move設成Globally Scaled,不然retargeter之後的動畫檔,在開root motion時不會正常運作。
按下圖中的Export Selected Animation,就可以把想要的mixamo動畫retarget給unreal中的角色用了。
總結
試了好多種流程,以上的流程大致上可以幫我解決目前自己遇到的幾個坑:
- Mixamo進來是T-Pose,但Unreal是A-Pose,可以靠create pose asset的方式幫我們修正而不用每個bone自己細調
- 若打開RootMotion後發現retarget後的動畫壞掉,有以下幾個原因: 第一個原因是Mixamo沒有RootBone造成我們在map的時候對不上,可以使用mixamo_converter這個blender addon來幫我們加上去;第二個原因則是Root Bone Chain的translation move要設成Globally Scaled。
Leave a Reply