【UE5】Mixamoのキャラと入れ替えて、アニメーション再生させる方法
🐱今回はMixamoのキャラクターに入れ替えてアニメーションを自然に再生させるという事を行っていきます。
この記事で実装すること
サードパーソンのキャラクターからMixamoのキャラクターに変更してできるだけ自然にアニメーションが行われるように実装していきます。
なおこの記事は元々UnrealEngine5の教科書第二巻のページでしたが、「Fabのキャラに入れ替えてみよう」のページに差し替えたので代わりに記事として掲載しておいたものになります。キャラを入れ替えたい場合はぜひそちらの本もチェックしてみてください!
①まずMixamoでキャラクターをダウンロードする
-
まずMixamoを開きます。CharactersからMichelleを今回はダウンロードします。他のモデルでも構いません。
-
設定そのままでダウンロードします
これでダウンロードはできました。
🐱そしてキャラクターをUnrealEngineにまだ追加しません。以下が理由です。
⚠️そのままUEで使用するとアニメーションが不自然になる!
仮にそのままUEに持ってきてリターゲットしたとしましょう。以下をご覧ください。
走る時にキャラクターが浮いていたり、ジャンプした際に体が傾いたりしています(着地した際の変形はUE内で修正できます)。
こうなる理由はMixamoのデフォルトボーン構成にはRootボーンが無いためです。
Rootボーンとはキャラクターの全体的な位置情報を管理するためのボーンの事です。Rootボーンがある事でアニメーションによってキャラクターが意図しない位置に移動することを防ぎやすくなります。Rootボーンが無くてもアニメーションは再生可能ですが、実際このようにアニメーションがおかしい挙動になってしまいます。
UE内でもなんとか微調整はできますが、完全に修正して自然なアニメーションにする事はかなり難しいと思います(自分なりに色々試しましたが結局Rootボーンなしだと自然なアニメーションにはなりませんでした)。
そこでRootボーンをBlenderで追加してUnrealEngineに持ってくる事で自然なアニメーションを実装できるという事です。
ちなみに今回MixamoのメッシュにはRootボーンがありませんでしたが、Rootボーンがあるかどうかはアセットによって違います。一度インポートしてUnrealEngineエディタで確認する必要があります。Rootボーンが無かった場合は、必須ではありませんがBlender等で追加した方が自然なアニメーションになるのでおすすめです。
②BlenderでRootボーンを追加しよう
ではBlenderでRootボーンを追加していきます。
-
まずBlender3.3をダウンロードします。なおバージョンは同じものを使用してください。最新のバージョンだとできない可能性があります。
-
そのまま対象のOSを選択して、適当なフォルダにダウンロードします。
-
Blenderを開きます。
-
そのままの設定でNextボタンを押していってInstallボタンを押します。
-
Blenderと検索して探します。違うバージョンがある方は注意してください。ファイルの場所を開いて確認する事もできます。
-
ファイルの場所を開いた場合 > ここからBlenderを開きます。
🐱さらにBlenderのMixamoConverterというプラグインが必要なので用意しておきます。
-
GitHubにあるMixamoConverter(https://github.com/enziop/mixamo_converter)をダウンロードしておきます。解凍(展開)はする必要ありません。
-
BlenderのEdit > Preferencesを開きます。
-
Addons > Install
-
先ほどダウンロードしたMixamoConverterのZipファイルを選択してInstall
-
AnimationMixamoConverterにチェックを入れます。そしたらPreferencesは閉じます。
-
Blenderのここを開きます。Nキーでもオッケーです。
-
Mixamoをクリックして問題なくインストールできてきるか確認します。
-
次にどこでも良いのでフォルダを二つ作成します。名前もなんでもよいですが「Original」「Converted」と命名します。
-
Originalの方にMixamoからダウンロードしたFBXのファイルを入れておきます。
-
そしてBlenderに戻って設定していきます。まずTransferRotationをオフに。AdvancedOptionを開いて、RemoveNameSpaceをオフにしてUseUnreal~をオンにします。InputPathにはOriginalフォルダ、OutPutにはConvertedフォルダを選択して最後にBatchConvertをクリックします。
BatchConvertをクリックした後はしばらく時間がかかる場合があります。 -
Convertedフォルダを見るとRootボーンが追加された3Dモデルのファイルがある事が確認できます。
③プロジェクトを用意してキャラクターをインポートする
-
サードパーソンのプロジェクトを作成して、MixamoCharacterと命名して作成します。
-
Mixamoフォルダを作成します。
-
Convertedフォルダにあるfbxファイルをドラッグで追加します。
なおここからversion5.4と5.5では方法が若干異なります。
バージョン5.5の方法は簡単に解説
-
まずインポート時の設定が異なります。
-
インポートしたらABP_Mannyでテンプレートアニメーションを作成
-
テンプレートアニメーションを作ったらアニメーションブループリントを作成
-
アニメーションブループリントの名前を変更しておく
-
MM_Landのアニメーションのsamplerateを変更すると治る
下記含むこのページはバージョン5.4の方法です。
-
設定そのままでインポートします。
-
スケルトンを開いてみます。
-
rootボーンが追加されているのがわかります。
-
ではマテリアルが無いので追加していきます。まずMixamoNotConvertフォルダを作成します。
-
Mixamoから直接ダウンロードした方のfbxファイル(Convertedフォルダにあるfbxではありません)をドラッグで追加します。設定はそのままです。
-
必要なのはマテリアルだけなのでMixamoNotConvertフォルダのメッシュ一式は削除します。
-
Mixamoフォルダに戻ってスケルタルメッシュを開きます。
-
マテリアルをCh03_Bodyに変更します。
-
スケルタルメッシュの名前を「Mixamo_Girl」にしておきます。
④リターゲットしてアニメーションを流用する
ではここからサードパーソンのキャラクターと入れ替えていきます。
-
まずCharactersフォルダにあるABP_Mannyを見つけます。今回Mannyの方をリターゲットしていきます(女性のQuinnでも良いのですがMannyの方が構成が若干シンプルなのでそちらを使用)
-
右クリック > RetargetAnimartionsをクリック
-
SKM_Mannyをセット > Mixamo_Girlをセット > ABP_Mannyを選択 > ExportAnimationsをクリック
-
Contentフォルダで右クリック > NewFolderで「MixamoRetarget」フォルダを作成 > そのフォルダを選択 > Exportします。
-
そのままExport
-
エクスポートできました。アニメーションブループリントの名前だけ「ABP_MixamoGirl」としておきます。
🐱後は入れ替えていく作業になります。
⑤キャラクターを入れ替えて、アニメーションを修正していこう
-
BP_ThirdPersonCharacterを開きます。
-
次にメッシュをMixamo_Girl > AnimClassをABP_MixamoGirlにします。
-
プレイしてみましょう。色々問題点があるので修正していきます。
まずは足がぐにゃっている問題を解決していきます。
足がぐにゃっとなって走るアニメーションが実行されない理由
これは足のIKのボーンが適切に設定されておらず、走る最中に足のIKが固定されておりこのようなアニメーションが再生されるという結果になっています。なのでIKボーンを適切に設定する必要があります。
-
まずアニメーションブループリントを開きます。
-
AnimGraphを開きます。
-
ControlRigを開きます。
ちなみに上記のControlRigを切り離してSlotからOutputPoseに直接つなげる事でも問題は解決します。しかしながらIK処理が行われなくなるので例えばちょっとした段差があった場合の足のアニメーションが自然に接地されなくなります。なのでIKの処理も行われるように設定しておきましょう。 -
Rig Hierarchyを開きます。
-
footと検索して「IK_foot_L」と「IK_foot_R」をドラッグで追加 > それぞれSetBoneで選択します。
-
さらに「foot_l」「foot_r」をGetBoneで追加します。
-
以下のようにワイヤーを接続します。コンパイルしておきます。
blueprintUEはでのブループリントのコピペはこちら↓
表示がバグっていますが、Copyから問題なくコピペできます。
-
これでプレイしてみましょう。まずは走るアニメーションが問題なく再生されて、段差があった時にIKの処理が行われているので足が曲がって自然に接地しているのがわかります。
-
次に着地した際に3Dモデルが変形する問題を解決していきます。ABP_MixamoGirlを開いてAnimGraphからLandアニメーションをダブルクリックで開きます。
-
ノードが以下のようになっています。原因はApplyAdditiveとMM_Landになります。
ApplyAdditiveとは?
ApplyAdditiveはアニメーションを加算するノードです。要するにアニメーションとアニメーションを混ぜるノードにないます。このノードの場合はLocolpmtionの中の歩いたり,走ったりするアニメーションに対して着地アニメーションを加算して(混ぜて)再生するという構成でした。
Baseがベースアニメーション,Additiveが加算する方のアニメーション,Alphaがどれぐらいの割合で加算するのかという値になります。Alphaは少なければ少ない程アニメーションが加算されなくなります。
アニメーションが変形してしまう原因は?
そして今回はApplyAdditiveノードに混ぜるMM_LandアニメーションのAdditiveSettingにアニメーションを混ぜる際の設定がされていない事が原因になります。本来であれば着地アニメーションは最初のフレームから再生されるのではなく、途中の着地寸前から再生される設定になっています。ところがAdditiveSettingが設定されていないので、浮遊中のアニメーションと待機,歩く,走るアニメーションが混ざってしまい、ボーンの位置がぐちゃぐちゃになりそのボーン構成に合わせてメッシュが適用しようとした結果、メッシュが伸びて巨大化したようになった事が原因かと思います。
🐱なのでAdditiveSettingとやらを設定していきましょう!
-
MM_Landを開きます。
-
AdditiveSettingsを開いて以下の設定にします。AnimTypeをLocalSpase > BasePoseTypeをFramefromthis~ > FrameIndexを26
AdditiveSettingsの設定項目
Additive Anim Typeは既存のアニメーションに対して追加の変形を重ねる際の設定を管理するオプションです。AnimTypeがLocalSpaceの場合はベースポーズのボーンを基準に、局所的な位置でアニメーションの変位を加算します。BasePoseTypeはFramefromthisanimationでこのアニメーション(MM_Land)のポーズを参照に設定しています。RefFrameIndexでこのアニメーション(MM_Land)の26フレーム目のポーズを参照しています
元のデフォルトキャラと同じ設定になります
なお今行ったのは元のデフォルトキャラのMM_Landアニメーションに既に設定されている項目と全く同じにしただけです。
- これで完成です。プレイしてみましょう。
着地アニメーションが再生されるようになりました。ただしジャンプして待機状態になった時に若干足が地面にめりこんでしまいます。おそらくリターゲットした際にちょっとしたボーンのずれとかが原因かもしれません。今回対応しませんが、気になる方はジャンプアニメーションを入れ替えたり、MixamoConverterでキャラクターを変換したりするとなる可能性があります。
また現在ControlRigのエラーが出ています。これはControlRigのスケルトンがデフォルトキャラになっており、スケルタルメッシュのスケルトンがMixamoGirlのものになっているので「各ボーンの親が違うよ!」という注意が出ています。これを解決するにはMixamoGirlのスケルトン構造とデフォルトキャラのスケルトンと一致させる必要あるようです。今回は必須でないのとめんどくさそうなので行いません。
という訳でこれで完成です!プレイしてみるとMixamoのキャラクターが問題なく再生されている事がわかります。
🐱では次にアニメーションを追加していきましょう。
次に実装すること
今回は入れ替えたMixamoのキャラクターにローリングするアニメーションを簡単に追加していきます。
⑥Mixamoでアニメーションをダウンロードする
-
まずMixamoにアクセスして、Charactersからメッシュを以下のMichelleにしておきます。(なおメッシュは何でも良いと思いますが念のため合わせておきます)
-
まずローリングするStanding Dive Forwardをダウンロードします。
-
設定はそのままでダウンロードします。
⑦MixamoConverterで変換する
そのままUE5にインポートして使用してもよいのですが、アニメーションが不自然になるケースがあるのでMixamoConverterを通してアニメーションを入れていきます。
🐱基本的にMixamoConverterを通してからUE5に持ってきた方が確実にアニメーションを再生できるのでおすすめです。
-
MixamoConverterを開きます。MixamoConverterが無い方はこちらに沿ってインストールしておきましょう。Enter~をクリックします。
-
Openthefolderを開きます。
-
開いたフォルダにStanding Dive Forwardを入れます。
-
Clickhereを押して変換 > Openthefolderを開きます。
-
これで変換が完了しました。
⑧UE5へ変換したアニメーションをインポートする
-
まずMixamoAnimationフォルダを作成しておきます。
-
MixamoAnimationフォルダに変換したStanding Dive Forwardをドラッグで入れます。設定は以下にしてインポートします。
-
アニメーションシーケンス「StandingDive~」を右クリック > RetargetAnimationsを行います。
-
TargetにMixamo_Girlを指定して、「StandingDive~mixamo_com」の方を選択 > Exportします。
-
MixamoAnimationフォルダで右クリック > Retargetフォルダを作成 > PrefixにRetarget_と命名 > Exportします。
リターゲットについて復習
リターゲットは異なるスケルトンでアニメーションを流用するための機能です。今回メッシュは同じでしたが、前のページでBlenderを使ってスケルトンを変更したものをキャラクターとして使用しているので見た目は同じでもスケルトンが違います。スケルトンが違う場合はアニメーションがそのままだと再生できないのでリターゲットを行います。
⑨アニメーションモンタージュで再生する
-
作成できた「Retarget_StandingDive~」を右クリック > Create > CreateAnimMontageをクリック
-
名前の先頭に「AM_」とつけておきます。
-
BP_ThirdPersonCharacterを開きます。
-
EventGraphを以下のノードを作成します。MontagetoplayにはAM_Retarget_StangingDive~を設定します。
-
プレイしてみましょう。Fキーを押すとアニメーションが再生されます。
アニメーションは再生できましたが戻ってしまいます。これはアニメーションでメッシュは移動しているのですが、アクタ本体が移動していないためこのような現象になります。 -
ルーとモーションを適用させましょう。Retarget_StandingDive~のアニメーションシーケンスのRootMotionを以下の設定にします。
-
プレイしてみましょう。問題なく再生されるようになりました。
-
ちょっとローリングが遅いのではやくします。アニメーションモンタージュの方のAM_Retarget_StandingDive~を開きます。RateScale(アニメーション速度)を1.5にします。
-
これで完成です!
🐱このようにしてアニメーションは追加していきます。攻撃とか特殊アクションはアニメーションモンタージュ、屈むアニメーションやキャラクターをカメラの視点に向かせるようなアニメーションはアニメーションブループリントの方で実装していきましょう!お疲れ様でした。
『PR』UnrealEngine5の教科書もぜひ読んでみてね~
UnrealEngine5の教科書というweb本を書いています! この記事も元々第二巻の方に追加する予定のものでしたが、「Fabのキャラに入れ替えてみよう」のページに差し替えたのでこちらに掲載しました。興味ある方は半分まで無料なのでぜひご覧ください! #unreal engine #ue4 #ue5
Discussion