|

2024-10-16

研究開発

JsonファイルでMetaHumanのアニメーションを制御する方法

3DCGUnreal EngineMetaHuman

MetaHumanのキャラクターアニメーションを制御する

以前の記事ではMetaHumanに顔のアニメーションを適用する方法をご紹介しました!

顔だけではなく体も動かせたら…と思われた方もいらっしゃることと思います。

 

そこで今回はJsonファイルを使って、MixamoからダウンロードしたキャラクターアニメーションをMetaHumanに適用し、制御する方法をご紹介します!

 

 

動作環境

  • OS : Windows11

  • CPU : Intel Core i9-13900KF

  • GPU : NVIDIA GeForce RTX 4070 Ti

  • Unreal Engine 5.3.2

 

 

MixamoのアニメーションをMetaHumanに適用する

今回はキャラクターのアニメーションをMixamoから用意します。Mixamoとは、Adobeが提供している3Dキャラクターアニメーションを作成することができるツールです。Adobeアカウントを作成するだけで無料で使用することができます!

 

3Dキャラクターやアニメーションをそのままダウンロードして使用することも可能ですが、UE5.3にそのまま持ち込むとスケルトンの規格の違いで思ったような動きにならないため、MIXAMO CONVERTERというサービスを利用します。

 

MIXAMO CONVERTERをダウンロードする

MIXAMO CONVERTERのサイトで右上あたりの「EXCLUSIVELY ~ LAUNCHER」(青い部分)をクリックします image

 

TERRIBILIS STUDIO LAUNCHER 上で MIXAMO CONVERTER は動作するようなので LAUNCHER をダウンロードします(右上の黄色い部分) image

 

ダウンロードしたZipファイルを解凍し、「Terribilis Srudio Launcher.exe」を開きます image image

上部の「STORE」を押し、次の画面で「MIXAMO CONVERTER」をクリックします

 

MIXAMO CONVERTER の画面になりました!

右上の「PLAY」をクリックして早速開いてみましょう image

 

起動したら以下の画面が表示されます

「LEFT CLICK TO CONTINUE」とあるので左クリックします image

 

右側の MAIN MENU から「Enter the conversion process」をクリックします image

 

キャラクター選択画面が出てくるので「UNREAL ENGINE MANNEQUINS」内の「Manny」を選択します image

(下の方に「METAHUMAN CHARACTERS」という項目もありますが、今回は見なかったことにしましょう…。)

 

エクスプローラーが開かれるので「_SKM_Manny_Simple.FBX」を選択しておきましょう!

 

 

Mixamoからキャラクターアニメーションをダウンロードする

Mixamoにアクセスします

 

画面右側の「UPLOAD CHARACTER」から先ほどの「_SKM_Manny_Simple.FBX」をアップロードします

これで画面右側のキャラクターがMannyになりました! image

 

使いたいアニメーションを選択します

アニメーションをクリックするとMannyさんが動きをプレビューしてくれます! image

 

ダウンロードしたいアニメーションを選択して「DOWNLOAD」をクリックします

設定を以下のようにしてダウンロードします image

 

 

MIXAMO CONVERTERでUE用にコンバートする

MIXAMO CONVERTERに戻り、下にスクロールします

 

「Convert the animations > Open the folder with original animations」をクリックします image

 

エクスプローラーが開くので、そのフォルダ直下に先ほどDLしたFBXを入れます

 

MIXAMO CONVERTER に戻り、「Click here to convert the annimations」 をクリックします

 

右側の「Open the folder with converted animations」 を押すと、フォルダに変換されたFBXが保存されています! image

 

次に Unreal Engine 上でアニメーションをキャラクターに割り当ててみましょう!

 

Unreal Engineにインポートする

ここからはUnreal Engineでの操作になります!

まずはこちらの記事の 「Unreal EngineにMetaHumanを読み込む」と同じ手順でプロジェクトを作成し、MetaHuman を読み込みます

 

続いて、先ほど変換したFBXファイルを Unreal Engine のコンテンツブラウザにドラッグ&ドロップしてインポートします

 

以下の画像のようなFBXのインポートオプションが開きます image

 

インポートオプションを以下のように変更します

  1. 「デフォルトにリセット」 を押す

  2. 「メッシュ > Skeleton」を 「SK_Mannequin」にする

  3. Animation > 詳細設定 > Use Default Sample Rate」のチェックを入れる

  4. Animation > 詳細設定 > Import Attributes as Curves or Animation Attributes」のチェックを外す

  5. Animation > 詳細設定 > Import Bone Tracks」のチェックを入れる

  6. Animation > 詳細設定 > Do not import curves with only 0 values」のチェックを外す

  7. 「インポート」 を押す

 

 

アニメーションをMetaHuman用にリターゲットする

ここでインポートしたアニメーションもそのまま使うことはできないので、リターゲティングという作業を行います

 

先ほどインポートした「アニメーションシーケンス」と書かれたファイルを右クリックし、「アニメーションアセットのリターゲティング > アニメーションアセット/ブループリントを複製してリターゲティング」をクリックします image

 

 

新しくウィンドウが開かれるので設定を以下のように変更します

  • IKリターゲッタ: RTG_metahuman

  • ソーススケルタルメッシュ: SKM_Manny

  • ターゲット:(自動で画像のものになる) image

 

リターゲットをクリックすると新しくアニメーションシーケンスが作成されます

今回は待機モーションを含めて4つのアニメーションを用意しました image

 

これをレベルシーケンス上で操作すればアニメーションが再生できるようになっていると思います!

続いてJsonファイルでアニメーションを制御する方法を見ていきましょう

 

Json Blueprint Utilities プラグインを有効化する

編集 > プラグイン > 「json」で検索し、Json Blueprint Utilitiesプラグインを有効化します image

 

ここでプロジェクトの再起動を要求されるので再起動しましょう

 

その間にJsonファイルを用意します

今回は以下のようなJsonファイルを作成しました

{ "sad": "00", "happy": "00", "angry": "00" }

 

これでJsonの準備は完了です!

 

 

アニメーションブループリントを作成する

続いてキャラクターを動かすためにアニメーションブループリントを作成します

 

コンテンツブラウザで右クリックし、「アニメーション > アニメーションブループリント」をクリックします

 

スケルトンを選択する画面が表示されるので「metahuman_base_skel」を選択します image

 

作成したブループリントをダブルクリックして開いてみると、以下のような画面になっていると思います

なっていない場合は画面左側のAnimGraphをクリックしてください image

 

ここに用意されている「Output Pose」にアニメーションを接続すると、そのアニメーションが再生される仕組みになっています

右クリック(もしくはtabキー)で 「state machine」ノードを追加し、「Output Pose」に接続します image

 

続いてアニメーションとその条件分岐について設定していきましょう!

 

アニメーションと条件分岐の作成

まずは条件分岐用にUnreal Engine内で変数を用意します

今回は以下のように感情に応じた変数を用意しました image

 

待機モーションを「idle」にしたいため、デフォルト値を「10」に設定しておきます image

 

先ほど作成した 「state machine」ノードをダブルクリックして開きます

すると以下のように「Entry」ノードが用意されています image

 

ここにMixamoから変換した「idle_UE」をドラッグ&ドロップして追加し、「Entry」と接続してみます image

ここでコンパイルすると、アニメーションが1回だけ再生されます

 

もしループさせたいのであれば、先ほど追加したアニメーション(idle_UE)をダブルクリックし、画面右側の 「LoopAnimation」にチェックを入れます image

 

ここから条件分岐を作成していきます

 

新しくアニメーションをドラッグ&ドロップし、相互にトランジションを接続します image

 

 

ここからIdleからSadへの遷移条件について設定していきます

IdleからSadへのトランジション(矢印上部の🔁マーク)をダブルクリックして開きます

 

以下のように設定をします

  1. 先ほど作成した変数「Sad」をドラッグアンドドロップして「get Sad」を追加します

  2. 同様に変数「Idle」と「get Idle」を追加します

  3. 「Sad」の値が大きくなって「Idle」以上になったときにアニメーションを遷移させたいので、画像のように「greater Equal」を接続します image

これでSadの値が大きくなった際に、「Idle_UE」から「Sad_UE」にアニメーションが遷移する条件ができました!

 

続いて「Sad_UE」から「Idle_UE」に戻る設定をしていきましょう

今度はSadからIdleへのトランジション(矢印下部の🔁マーク)をダブルクリックして開きます

 

「Sad」より「Idle」の値が大きくなった際にアニメーションをIdleに戻したいので、先ほど設定したトランジション同様変数を追加し、「Less」を接続します image

 

今回は「Idle」から「Sad」「Angry」「Happy」にアニメーションを変化させたいので、「Angry」と「Happy」も同様に設定していきます image

 

ここまでで条件は作成できたのでJsonファイルの値を変数に入れる設定をします!

 

 

Jsonファイルでアニメーションを制御する

続いて画面上部のタブから「イベントグラフ」に移動します image

 

以下の画像のようにブループリントを設定します image

処理は以下のように設定されています

  1. 「Load Json from File」でJsonファイルを読み込みます

    1. その際、「Make FilePath」でJsonファイルのパスを設定します
  2. 「Sad」「Happy」「Angry」の値を取得したいので、「Sequence」で3つの値を順に取得するシーケンスを作成します

  3. 「Get Field」で値を取得します

    1. 「Field Name」で取得したいキーの名前を必ず設定します
  4. 「Set Sad」 , 「Set Happy」 , 「Set Angry」 を作成しそれぞれの変数に値を代入します

 

 

動作デモ

レベルを実行して、Jsonファイルを変更してみましょう!

 

 

まとめ

今回は、JsonファイルでMetaHumanのアニメーションを制御する方法をご紹介しました!自分でモデリングやアニメーション作成をせずとも、ここまでできてしまうなんて便利な世の中になったものだな…としみじみ感じます。

 

使用するモーション次第では関節が変な方向に曲がったりすることもあるので、その際は別のモーションにすることやアニメーションの微調整もご検討いただければと思います。

 

今回は手作業でJsonファイルを更新しましたが、特定のボタンでファイルを書き換えたり、生成AIでJsonファイルを書き換えたりと、拡張する可能性はまだまだあるのではないかと思います!

 

今後はAudio2Faceと組み合わせて体全体でアニメーションさせることに挑戦してみたいと思います!!(宣言)

 


この記事の著者

プロフィール画像

野﨑 光

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 R&Dチーム

CG関連の研究開発、視聴データ・動画配信データ等のデータ利活用業務を担当。 ロゴ・動画・3DCGなどのデザイン関連から、TouchDesignerを使用した展示システム構築など幅広く取り組んでいる。