💨

【MotionBuilderチュートリアル】第14回Unityへのインポート・動作確認

2023/01/20に公開

こんにちは、株式会社GUNCY’Sの岡崎です。

ついにUnityで動かす工程ですね。今までの成果が実を結ぶ瞬間です。大げさな言い方ではありますが、自分で手を動かして編集したものが実際のシーンで見られるのは嬉しいのではないかと思います。

今回ではMotionBuilderからUnityへモーションデータをインポートしてUnityのシーンで再生するまでを実践します。


© 2020 Unity Technologies

これまで編集をしていたモデルはこちらのUnityプロジェクトのProjectKayaで使用されているものです。

https://github.com/UnityKorea/ProjectKaya

初めはMotionBuilderで使用するために3Dモデルのファイルを持ってくるだけでしたが、今回はこのプロジェクトをUnityで開きます。シーン内で使われているモデルに今まで編集をしてきたモーションを適用して動かしていきます。

上記のリンクからプロジェクトをダウンロードしてUnityで開ける状態にしておいてください。

今回使用するUnityのバージョンは2021.3.2f1です。
https://unity.com/releases/editor/whats-new/2021.3.2

モデルごと置き換えるのではなく、Unityの内のモデルにモーションを置き換えるやり方で進めていきます。
MotionBuilderで編集していたモデルがもともとあったのであれば、そのままFBXファイルをシーンに入れる方法でやればいいと思うかもしれませんが、それは次回での紹介といたします。

モーションのエクスポート

まずはMotionBuidlerからファイルを書き出す方法です。

MotionBuilderで前回保存したKaya_Offset.fbxを開きましょう。

スケマティックビューで見てみるとKayaの3Dモデル以外にコントロールリグや黄色のモーションデータのボーンが見えると思います。

Unityで書き出したいのは画像の赤枠で囲ったKayaのモデルのみなので、これに限定して書き出します。

まずはさきほどの画像で赤枠の箇所を選択します。

その状態で画面左上のFileからSave Selection…を選択します。

Unityにインポートするファイルの名前をつけて保存ボタンをクリックします。

こちらでは”Kaya_MBExport.fbx”としています。

Save Selection Optionsでは書き出すテイクを選択することができます。

今回使用するテイクは”dataset-1_bye_musical_001”のみなので、それ以外のチェックを外します。

そのままSaveボタンをクリックでファイルを書き出します。

これで選択したオブジェクトのみを書き出すことができます。

Unityにインポート

ダウンロードして解凍したプロジェクトファイルをUnityで開きます。

UnityのProjectタブからAssets/Scenes/UTKTemplate_Lobbyをクリックします。

すると以下の画像のようにシーンが切り替わります。

こちらのシーンを使用してモーションを動かしていきます。

まず、Assets直下にフォルダを作成します。名前は”TutorialFiles”とします。

さきほど書き出したKaya_MBExport.fbxを作成したTutorialFilesフォルダにドラッグ&ドロップでインポートします。

無事インポートされるとTutorialFilesフォルダ内に以下のように表示が追加されます。

アイコンの右端にある三角ボタンを押すとテイクが入っている事を確認できます。

Unityでの設定

ここからはUnityでの設定について解説します。

FBX Import Settingsを確認

インポートできたら、次はファイルの設定を変更します。

ProjectタブからKaya_MBExport.fbxをクリック
InspectorからRigタブを表示します。

Avatar Definitionの項目をCreate From This Modelに切り替えます。

切り替えたら右下のApplyボタンを押して変更を確定させます。

この操作によって、Avatarがこのファイルから作成されます。つまり、Kaya_MBExport.fbxのモーションでシーン内にあるKayaの3Dモデルを動かせるようになります。

Animator Controllerを用意

次にKaya_MBExport.fbxのモーションを再生するためのAnimator Controllerを用意します。

Projectタブで右クリック→Create→Animator Controllerを選択

すると以下のようなアイコンのファイルが追加されます。

名前を設定できるのでこちらは”MBTutorial”という名前にします。

MBTutorialをダブルクリックすると以下のように画面が変わります。

このAnimator Controllerを選択している状態で、Kaya_MBExport.fbxのテイクをドラッグ&ドロップします。

テイクを追加できると以下のようにテイク名のついたノードが追加されます。

Animatorコンポーネントの設定

設定したAvatarとAnimator Controllerをシーン内にあるKayaの3Dモデルに設定します。

Hierarchyタブから”UTK_Template_Kaya”を選択します。

選択するとInspectorにこのような表示がされます。

この中のAnimatorコンポーネントを設定します。

まず、Avatarを変更します。
Avatarという項目の右端にある◎をクリックして、さきほど作成した”Kaya_MBExport”を選択します。

その次にAnimator Controllerを変更します。
Controllerという項目で、Avatar同様に作成した“MBTutorial”を選択します。

設定が完了したら以下のようになっていることを確認しましょう。

剣のオブジェクトは使用しないのでチェックを外して非表示にします。

ここまで設定ができたら、画面上の再生ボタンを押してみましょう。

MotionBuilderで編集したアニメーションが再生されると思います。

ただ、シーン内にあったKayaの3DモデルにはMotionBuilderで作成した棒は含まれていないため、このままでは棒がない状態です。

棒を追加

今回は棒だけを抽出してKayaの3Dモデルに重ねることで棒をシーン内に追加します。

そのために一度MotionBuilderのKaya_Offset.fbxの編集に戻ります。

コンストレイント結果をプロットする

前回、MotionBuilderでコントロールリグをプロットしたと思いますが、その時点で棒の方はプロットされていない状態です。また、シーン内にあるKayaの3Dモデルと追加する棒は別ファイルとなっているため、MotionBuilderのコンストレイントをUnityに適用できません。そのため、結果をプロットしてアニメーションカーブの情報をUnityにインポートします。

コンストレイントのインポートについて

今回のケースでは棒の部分のみ元モデルとの差異があるため、棒のモデルのコンストレイントをプロットしています。

しかし、ボーンや小物の構成が元モデルと一致している場合であれば、インポート時にMotionBuilderで設定したコンストレイントをそのままUnityのコンストレイントに変換できます。この場合、棒はアニメーションカーブではなくコンストレイントの処理によって動くようになります。

https://docs.unity.cn/ja/2021.2/Manual/Constraints.html

まず、棒のオブジェクトの中で、コンストレイントが設定されているattachノードを選択

Key Controlsウィンドウの左上のAnimationボタンをクリック

メニューが展開されるのでPlot Selected(All Properties)…をクリック

Plotボタンをクリック

この操作によって、棒のattachノードにプロットをしてキーを打つことができます。

Kayaのモーションと同様にroot以下のオブジェクトを選択した状態でSave Selectionで棒のオブジェクトを書き出します。

Unityでの設定

Unityに棒のファイルをインポートをしてAnimation Controlerを作成し、Kayaのモーション同様にテイクを追加します。

アニメーションを追加したら、Kaya_MBExport_propをドラッグ&ドロップでシーンに配置します。

さらに、MBTutorialを追加したKaya_MBExport_propにドラッグ&ドロップします。

InspectorにAnimatorコンポーネントが配置されます。

最後にTransformの値をKayaのモーションと揃えます。

これで再生をすると、棒が持てていることが確認できます。

これでUnityへのインポートは完了です!お疲れ様でした!

今回はモーションを既存のモデルへ移すやり方での実践をさせていただきました。棒のモデルを入れ直す形になりましたが、MotionBuilderからUnityへのインポートという目的が達成できたかと思います。

次回

Unityへのインポートができましたが、今回で最後ではなく、次回が本当の最終回となります。

次回の内容はMotionBuilderからのストリーミングについて触れます。こちらについては収録されたテイクをインポートするのではなく、リアルタイムにMotionBuilderからUnityへ動きが反映されるものとなっています。リアルタイムでモーションを取得できれば、MotionBuilderとUnityの間の連携がしやすくなるかもしれません。それではまた次回、よろしくお願いします!

モーションキャプチャーでお悩みの方は

株式会社GUNCY’Sではモーションキャプチャーの総合支援サービス"Mocap SOS"を開始しました。
モーションキャプチャーについてのご相談はぜひ弊社へお問い合わせください。
https://guncys.com/news/news-1983/
メールでのお問い合わせ:mocap_contact*guncys.com
(※記号「*」を「@」に置き換えてください。)


免責事項

  • 当記事のコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性、最新性を保証するものではありません。
  • 理由の如何に関わらず、本記事に掲載されている情報の変更・削除、および本記事の更新の中断・中止によって生じるいかなる損害についても、当社は責任を負わないものとします。
  • リンク先へのアクセス、リンク先からのダウンロード、その他の方法を通じて取得したコンテンツは、自身の裁量とリスクをもって使用されるものとします。
  • 当記事から移動された先のサイトは、当社が管理、運営するものではございません。移動先サイトで提供される情報の真偽、サービス等につきましても責任を負いませんのでご了承ください。なお、予告なしに内容が変更または廃止される場合がございます。

Discussion