一見、ただ普通にExportをするだけで済むように思えるかもしれませんが、実際にやってみるとmmd_toolsとRigifyを使用しているとある程度しっかりとしたワークフローを組まないと上手く出力されなかったので正しく動作するワークフローをまとめておきます。
> 前提情報
まずは前提情報から。まず今回の記事では以下のような目的を達成する事を前提とした作業中に確認したワークフローを載せています。
・MMDモデルをBlenderにmmd_toolsを用いてインポート
・mmd_uuunyaa_toolsを用いてインポートされたモデルをRigify(MMD互換優先モード)でコントローラーを生成
・生成されたRigifyコントローラーをベースにリファレンス映像を元にトレスアニメーションを制作
・制作し終えたアニメーションデータをUE5へ"アニメーションを正常に再生出来る状態"で持ち込む
注意事項として"UE5へ持ち込む"という点についてですが、あくまでも今回は「ゲーム用のアニメーションアセット利用ができる」状態ではなく「シネマ(レベル)シーケンスでアニメーションが正常に再生できるのみ」の状態を想定しており、スケルトン構造は"UE5のスケルトン構造規格"ではなく"MMDモデルに設定された構造"をそのまま使用するワークフローになります。この記事の情報を求めている方であれば後はお分かりですね?
> Blenderバージョン・前提プラグイン情報
・【3.0.0】Blender
・【5.3.1】Better FBX Importer & Exporter
・【2.3.0】blender_mmd_tools
・【1.6.0】mmd_uuunyaa_tools
> Workflow - 概略
*フロー開始ポイント
前述の前提情報にある"アニメーション制作"を終えている。
+ T/Aポーズのベースモデルデータ準備
アニメーションを含めずにT/AポーズのベースモデルとなるFBXを出力
インポート用アニメーションデータ準備
1、"Bake Action"を使用してRigifyコントローラーベースのアニメーションを元のMMDモデルリグ(IK/FKベースリグ)へBakeする
2、IK/FKベースリグとRigifyコントローラーとのリンク解除
3、Rigifyスケルトン構造+αを全削除
4、任意グラフエディタを使用してBake結果のクリーンアップ
5、FBX出力
> Workflow - 解説
T/Aポーズのベースモデルデータ準備
T/Aポーズはmmd_toolsでMMDモデルを読み込んだ時点でT/Aポーズになっているはずなので問題無いはずですが、念の為に0フレームにキーを打った状態でExportする事を勧めておきます。唯一注意すべき点はUE5へのFBXインポート段階で “Use T0As Ref PoseをTrue”にしておく事ぐらいでしょうか。
インポート用アニメーションデータ準備
1、 "Bake Action"を使用してRigifyコントローラーベースのアニメーションを元のMMDモデルリグ(IK/FKベースリグ)へBakeする
まずはベイクから。**“Bake Data"は"Pose"に設定。オプションはVisual Keying/Clear ConstraintsをON後はお好みでON/OFFを。**Clean CurvesはONの方が後のクリーニング工程で少し処理時間を短縮・プロジェクトデータの容量を節約できるかも。
注意するべきポイントは"対象となるボーンの選択"です。Action Editorで表示されているボーン名を見て選択されている事を確認するかOutlinerでボーン名の左側にある"骨アイコン"が選択状態になっているかどうかをしっかりと見る必要がある。(Mayaと違ってただ普通にOutlinerリスト項目を選択するだけではNG。骨アイコンが"選択状態"になっているかをチェックするべき。)
2、 IK/FKベースリグとRigifyコントローラーとのリンク解除
mmd_uuunyaa_toolsで生成されたRigifyはプラグインの連動機能を経由してMMDモデルに元々設定されているスケルトン構造("全ての親” といった)と連携する機能が設定されて動作しているのでベイク後にこの連動機能を解除する必要があります。設定箇所はViewport付近のItemタブからUuuNyaa MMD Rigify項目のMMD-Rigify: Bind/IK-FK: Arm.L Arm.Rといった数値を全て0.0に設定すれば連動が解除されます。
3、 Rigifyスケルトン構造+αを全削除
Better FBX側のOnly Selected Deform Bonesオプションでは正常に指定したボーン全てを出力できないケースがあるようなので出力対象のスケルトンを明示的にBetter FBXに渡す為にRigifyスケルトン郡とMMDモデル固有のボーン
・root
・MCH-xxxx 等のボーン
・"操作中心"ボーン
を全てを削除します。PMXモデルであれば共通だったはずですが"全ての親"ボーンにParentされている全てのボーンを残せばOKですね。
4、 任意グラフエディタを使用してBake結果のクリーンアップ
"Decimate"なり"Clean Keyframes"なりのクリーンアップをお好みで。
5、 FBX出力
Better FBXの出力設定で確認するべき項目は「Animationの出力有効化/unit = cm/FBX Axis = Unreal1 or Unreal2/Only Deform BonesはONにしておいて問題があるならOFFで出力」する事ぐらいでしょうか。
Q&A
Q: Better FBXを使用しているならこんな手順を踏まなくても正常に出力されるんだけど?
A: "全ての親"ボーンとRigifyの"root"ボーンを含めた状態で出力したデータをUE5に持っていくと確かに正常に読み込まれるケースがありますが、それはたまたま上手くいっただけに過ぎません。そもそもそのまま出力してしまうと複数のrootボーンをfbxに乗っけた状態で出力してしまう事やこれが原因でUE5のFBX Importerによる読み込みが複数ボーンを検出した段階で途中停止してしまい、一部モデルに含まれているオブジェクトが正常に読み込まれない問題が発生したのでこの記事を残しています。
※これに限らず別のツールに持ち込むなら出力先に合わせたデータ調整とBakeは必須でしょう
Q: T/Aポーズとアニメーションデータをわざわざ2つに分けて用意する必要ある?
A: アニメーションデータの0フレームがT/Aポーズから開始しているならT/Aポーズモデルを別に用意せずとも問題は起きないはずなのでそこは自身のプロジェクトの状況に合わせましょう。私は何かしらの設定ミスが無いかどうかを特定する意味でもあえてデータを分けているだけです。
Q: Better FBXプラグインの"Rigify Armature"オプションを使用してRigifyスケルトン(root)をベースにすることは出来ないのか?
A: こちらの環境ではそれで出力したデータはUE5のImport Allの段階でフリーズしていつまでもImportが開始されませんでした。恐らくmmd_uuunyaa_toolsを使用してRigifyを構築しているので本来のRigifyリグの手動セットアップ手順とは異なる何らかしらの独自設定が組まれているのが原因なのかもしれません。(あるいはIK/FK連動機能等の機能がuuunyaa_tools側で独立した動作になっていたりと本来のRigifyプラグインの管轄外の制御方法を用いているせいでBetter FBXが対応しきれていないとか?)
