Motiveで撮られたFbxモーションをAutoRigPro(Blender)経由でUEへインポートした手順メモ

この記事は約7分で読めます。

OptiTrackというモーションキャプチャで取得されたモーションがFbxで保存されているときに,UnrealEngineでこれを利用する手順ののメモ.

Unityの場合はモーションのみで取り込めるので無問題だが,UEではメッシュのないアニメーションデータをうまく取り込めなかった.(私の誤りならすみません)

そこでBlenderのアドオンであるAutoRigProのRemap機能を使うことで,Blenderでモーションデータをリターゲットし,Unreal Engineで利用した.その手順を書き留めておく.

Unityで使用したものの流用なのでFBX形式だけど,本当はBVHで出力しておいたもののほうが良かったのかもしれない.

前提

今回使用したモーションは,OptiTrack Motive 2.3を用いて作成されたもの.

スケルトンアセットは(たぶん)Tポーズで作成されている.

MotiveからのExportはFbxのbinary形式.

追記:(2022/06/28)UE5ならIKRetargetが楽そう

この記事は2022年頭のイベントに使った手順のメモだったのですが,Unreal Engine5で新たにIKRigを用いたIKRetargetterが登場したことにより,IKRigを使った手順のほうが楽にリターゲッティングできそうな気がします.

(2024/05/10追記)最新のBlender4.1系において,下記手順ではオブジェクトにウェイトが載らず,エクスポートがうまくいかないことがあることを確認しています.

手順としてはまずBlenderにFBXアニメーションを読み込み,アニメーション範囲を正しく設定します.
そして適当なオブジェクトを追加します(今回はISO球を選択).これをスキニング(アーマチュア親子づけ)してFBXでエクスポートすればBlenderでの下準備は終わり.

この手順ではUE5にて元のスケルトンツリーの情報を扱い,メッシュは一切使わなくてよい.UEはメッシュなしスケルタルメッシュはスケルトン指定なしでのインポートができないようなので,メッシュを適当に割り当ててあげることで,スケルトンをインポートアセットから生成できるようにしている.

IKRigRetargetの公式ドキュメントは次の通り.

IKRig を新規作成しスケルトンにインポートしたアニメーションのものを指定.理ターゲッティングに必要なものは右のリターゲティングチェーンと左上のリターゲティングルート.左下のソルバについては設定しなくても問題ない.

ルートに関してはHipsのジョイントを右クリックしてリターゲティングルートを設定すればよい.設定を忘れると足の設置が保証されず,腰を基準に足が浮くようになってしまう.

チェーンのほうが左が上,真ん中に下の階層となるように各部位のジョイントを設定してあげればよい.

リターゲット先のスケルトンも同様に設定したら,次にIKRetargeterをソースのIKRigをベースに作成する.

TargetIKRigにリターゲット先となるIKRigをセットする.チェーンの対応が正しいことを確認する.

またリファレンスポーズが異なる場合はポーズの編集またはポーズの新規作成により正していく.
今回は肩を50度,脚部を5度回転することで姿勢を合わせることにした.
またソースのスケルトンツリーが見えない場合は「表示」のところで調整できる.

あとはアセットブラウザタブに移り,リターゲットしたいアニメーションを選択してリターゲットするだけ.

下の動画はIKリターゲットしたモーションの様子.
参考までに一番左のものは後述のAutoRigを経由したもの.

参考文献

このインポート作業では,上記の記事を参考にさせていただきました.

手順

まず,先にポーズの補正をしないで流し込んでしまったものを置いておく.画像のようにグレイマンのほうは腕を下げている(A側)のに対して,リターゲット元(腰から生えてる腕)は腕を上にあげている.

分かりやすいのは腕を下げているときで,この時は腕が体にめり込んで明らかにモーションが破綻してしまう.このめり込みを見たら初期ポーズの違いが原因の可能性を疑うことにする.

当然,UE4に取り込んでもめり込んだままである.なぜ胸の部分が赤くなるのかはよくわからないが,プロジェクト内のマネキンにUE内でリターゲットすれば問題はなさそう.

それでは実際の手順に移る.まずUE4のマネキンを適切な方法でfbxとしてエクスポートし,Blenderにインポートする.私は今回事前に用意してあったものを用いたが,UE4内で右クリックすればエクスポート項目があるはず.インポータにはbetter fbx(有償アドオン)を利用したが,スケールや回転を適切に入出力すれば大丈夫そう.

ただしリターゲットのアニメーションにスケールが入ってしまうことがあるので,スケルトンの倍率は1倍である方がよさそうだ.スケルトンとメッシュが合わないときもスケールを調整.

ここからポーズモードで腕を上げる.左右とも肩と上腕部分をメインに回転させて対称な感じに.

ここでアーマチュアモディファイアを複製してそれを適用.このマネキンはオブジェクトがたくさん分かれているのですべてのメッシュオブジェクトに対してこの作業を行う.

その後スケルトンがTポーズ,メッシュがYポーズの状態でApplyRestPoseするとメッシュがスケルトンと同じTポーズになりTポーズ基準のアニメーションが流せるようになる.

ここで流し込みたいアニメーションを持つfbxをインポート.先ほどと同様だが,背景が緑になっているキーが打たれているので,スケールや位置をその場で調整しても次のキーには反映されていないので,調整がうまくいかないことがある.リターゲット先のほうを調整して何とかしたほうがよさげ.

ここからがAutoRigのRemap機能の出番で,アニメーションのリターゲット作業に入っていく.

まずリターゲット前後のアーマチュアをそれぞれ選択する.

その後BuildBonesListを開いてリターゲット元のボーンに対応する,アニメーションを流し込むボーンを選択していく.

Motiveから出力されたデータには原点にRootの点がなかったので,Hipsボーンに対してSet As Root を適用している.

セットし終わったらリターゲットを実行する.1~2分,場合によってはしばらく待たされるがリターゲットが完了すると,関節角が正しい期待通りのアニメーションを流し込むことができている.

あとはこれをUE4に戻すだけ.AutoRigにエクスポート機能があるので,これを用いてFBXでエクスポートする.UE4でのインポートは通常のFBXと同様で,アニメーションにチェックが入っているかは一応確認しておく.

このままインポートしたものを利用しても良いのだが,入出力の際にマテリアルなどの一部設定が欠落してしまっている可能性がある.リターゲットマネージャを適切に設定して,元のMannequinにUE内で再リターゲッティングした方が無難だろうか.

無事SK_Mannequinにアニメーションを流し込むことができた.

結果

今回はぷちコン映像編にモーションを使用したかったのでこの手順でUEに取り込み,無事作品に取り入れることができました.

コメント

タイトルとURLをコピーしました