Unreal Engineでは、モーションマッチングを使用したアニメーションのサンプルプロジェクトとして『Game Animation サンプル』が配布されています。
これはキャラクターを自然なアニメーションで操作できるプロジェクトで、さらに操作キャラを任意のモデルに変更することも出来ます。自作モデルの動作確認や配布されているモデルの鑑賞などに役立ちそうですね。
という訳で、本記事はこのプロジェクトでvrmファイルを動かすまでの手順をまとめたものになります。vrmと銘打ってはいますが、VRM4Uのなんでもインポート機能によりpmxファイル等でも動作します。ありがたい…!
前提
上記リンクからGame Animation サンプルをライブラリに追加し、それを元にプロジェクトを作成。作成したプロジェクトにVRM4Uを導入して有効化した状態を本記事のスタート地点とさせて頂きます。
手順
プロジェクト内容の確認
作業を始める前にGame Animation サンプルの内容を確認しておきます。
レベルを開始するとキャラクターが表示され、WASD形式で操作できます。試しにその辺を走らせてみるといい感じに障害物を乗り越えたりしてくれますね。
また、足元に配置されているボタンを押すと障害物コースへ移動したり、操作方法の確認ウィンドウなどが表示されます。
特に重要なのが開始地点の右にある「Game Animation Widget」で、FPSの設定や入力の可視化に加え、操作キャラの変更もここで行うことが出来ます。本記事ではこのウィジェットに任意のモデルを登録し、変更することを目標とします。
それでは、次項から作業に移ります。
vrmファイルの読み込み
まずはvrmファイルのインポートから。
VRM4Uプラグインの導入と有効化が済んでいればそのまま読み込めます。本記事ではテスト用としてVRoid Studioの「Avater Sample_B」をVRM1.0形式で出力して使わせて頂きました。
vrmをインポートすると複数のファイルが生成されますので、本記事では「Custom/TestCharacter」フォルダを作成してそこに読み込みます。モデル名は「TestCharacter」としました。この辺は各自お好きな名前や配置でどうぞ。
また、初期設定のUnlitから見た目を変えたい場合はMaterial Typeも指定しておきましょう。ここでは「Substance Profile」を指定しました。
リターゲッタシステムへの登録
インポートしたモデルとサンプルのモデルでは使用するスケルトン(ボーン構造)が異なるため、公式チュートリアルではここでアニメーション共有に必要なIKリターゲッタを作成する手順が入ります。
しかし、VRM4Uはインポート時に必要なリターゲッタを生成してくれるため、次は手順を一つ飛ばして生成されたIKリターゲッタをGame Animation サンプルのリターゲットシステムに登録します。(手動でIKリターゲッタを作成したい場合はおまけ2を参照)
コンテンツドロワーを開き、「コンテンツ→BluePrints→RetargetedCharacters」フォルダ内の「ABP_GenericRetarget」を開きます。
「クラスのデフォルト」を選択し、右側の詳細タブ内の「IKRetargeter Map」を展開します。ここにIKリターゲッタの登録を行います。
+ボタンを押して新しい項目を追加し、右側に生成されたIKリターゲッタ「RTG_UEFN_インポートしたモデル名」を、左側にタグを指定します。タグの名前は任意ですが、次項で同じものを指定する必要があるため、記入した名前は覚えておいてください。ここでは公式の表記に則り「RTG_UEFN_to_TestCharacter」とします。
以上の設定を終えましたら、忘れずに保存してコンパイルしておきましょう。これでリターゲッタの登録は完了です。
キャラクターブループリントの用意
次に、実際に動かすためのキャラクターを用意します。
コンテンツドロワーを開き、先ほどと同じフォルダ(BluePrints→RetargetedCharacters)内にある「CBP_SandboxCharacter_Manny」を複製して名前を変更します。ここでは「CBP_TestCharacter」としました。
早速、複製したブループリントクラスを開いてビューポート画面に切り替えます。
最初に注意点として、この項目で編集を行うのは「Mesh (CharacterMesh0)」内にある「Manny」のみです。うっかり他のMeshを編集しないよう注意しましょう。下手に設定をイジるとエディタがクラッシュします。
このMannyの名前は変えても問題ないため、本記事では「TestCharacter」に変更しました。
Manny改めTestCharacterを選択し、画面右側の詳細タブ内にあるメッシュ項目の「Skeletal Mesh Asset」にインポートしたモデルのスケルタルメッシュを指定します。変更後も見た目が変わらない場合はファイルを保存して開きなおすと反映されます。(開きなおした際は編集対象がルートに戻っている点に注意)
最後にタグ項目の「Component Tags」に、先ほどのABP_GenericRetargetで登録したタグを指定します。本記事では「RTG_UEFN_to_TestCharacter」を指定しましたので、同様の指定を行います。
設定後、キャラクターが待機モーションを取っていれば成功です。もし初期ポーズから変化していない場合はABP_GenericRetargetのコンパイルを済ませ、タグの名前や、タグを指定するコンポーネントが間違っていないかを確認してみてください。
ウィジェットへの登録
最後に作成したキャラクターをウィジェットに登録してプレイ時に変更できるようにします。
コンテンツドロワーで「コンテンツ→Widgets」フォルダ内にある「GameAnimationWidget」を開いて編集画面に入ります。
ウィジェット内にキャラクターのサムネイルが並んだ列がありますので、そのうちの一つを複製して項目を追加します。今回は最後尾のものを複製しました。
追加したアイコンを選択し、詳細タブのデフォルト項目にある「Object」に先ほど作成したブループリントクラスを指定します。作業は以上で完了です。楽!
動作確認
最後に動作確認を行います。レベルを開始してGame Animation Widgetsを開き、登録したキャラクターを選んで変更してみましょう。
キャラクターが変更されて問題なく動けたら成功です。お疲れ様でした。
おまけ1:ブループリントでアウトラインを適用する
最初からレベル上に存在するアクターに関してはVRM4Uのマニュアル通りの手順でアウトラインを適用できますが、今回のようにアクターが後から追加される場合はブループリントで対応する必要があるようです。
先ほど作成した「CBP_TestCharacter」のEvent BeginPlayノードにMToon Attach Actorを生成してセットする処理を追加してみます。
無事アウトラインがつきました。(ついでに描画クオリティも低からEpicにしてみました)
おまけ2:手動によるリターゲッタの作成と調整
今回の手順では不要ですが、IKリターゲッタを自分で作成する方法もまとめておきます。
コンテンツドロワーを開き、追加or右クリックから「アニメーション→リターゲティング→IKリターゲッタ」を選択してIKリターゲッタを作成します。
作成したリターゲッタを開き、右上の編集項目が「アセット設定」になっていることを確認したら以下の設定を行います。
- 「Source IKRig Asset」に「IK_UEFN_Mannequin」を指定
- 「Target IKRig Asset」に「IK_UEFN_インポートしたモデル名_Mannequin」を指定
- プレビューが重なって見づらいため「Preview Settings→Target Mesh Offset」のX値を変更して適度に距離を取る
以上の設定を終えると、UEが自動的に両者のボーン構造からマッピングを作成してくれます。各ボーンがソースのどのボーンに割り当てられているかは、画面右下の「チェーンマッピング」タブから確認、編集することが出来ます。
これでリターゲット完了…と思いきや、インポートしたモデルのポーズが変です。これはマネキンがAポーズなのに対し、vrm側がTポーズを取っていることが原因です。
これを修正するために、画面左上の「Runnning Retarget」を押して一旦ポーズ編集モードに切り替えます。この編集モードではビューポートのフチが青色になり、リターゲットのプレビューも解除されます。
続いて画面左上、ボーン階層タブの編集対象が「ターゲット」になっているのを確認し、作成ボタンを押して「ポーズアセットをインポート」を選択します。メニューがグレーアウトしている場合はプレビューモードになっている可能性がありますのでご確認ください。
インポートするポーズを指定するウィンドウが表示されますので、「POSE_retarget_インポートしたモデル名」を選択し、ウィンドウ右下のポーズ指定を「POSE_T」から「POSE_A」に変更して決定します。
これでvrm側のポーズをマネキンと同じAポーズに出来ました。試しに画面右下の「アセット ブラウザ」タブから適当なアニメーションをダブルクリックで再生してみましょう。マネキンと同じように動いていれば成功です。
まとめ
以上、Game Animation サンプルでvrmファイルを動かす手順でした。
こうして手順にまとめると簡単な作業ですが、UEもVRMも素人なせいで初回のセットアップは結構苦労しました。さらにVRM4Uがリターゲッタを生成してくれることに気づかず遠回りまで…
なお冒頭に述べた通り、vrmだけでなくpmxファイルなども読み込んでくれるため、気軽に配布モデルの動作チェックが出来て楽しいのでオススメです。
余談ですが、以前制作したローポリキャラクターをやっつけでvrm化して読み込んでも一応動作しました。流石に動きはダバダバしてて変でしたが。次はきちんとvrm対応のモデルを作って動かしてみたいですね。