TDPTから書き出したモーションデータをUnityのアニメーションにする方法
《 TDPT Tips!シリーズ 第2章》
カメラだけで全身モーションキャプチャーができるWindowsアプリ「ThreeDPoseTracker(3Dポーズトラッカー)=TDPT」
詳しくはこちら
このシリーズは、そのTDPTのバージョン0.6に関するTips!をご紹介します。
はじめに
今回はTDPTから書き出したモーションデータをUnityのアニメーションにする方法をご紹介します。
Unityのアニメーションは、アニメーションクリップ(.anim形式)のデータのことです。VTuberさんのPVや、ゲーム制作などに使えると思います。
他にもこんな使い方あるよ~とかあればぜひ教えてください。
今回の環境
TDPT v0.6
Blender4.0
Unity 2021.3.15f1
Unity内アセット UniVRM-0.113.0_0165
モーションキャプチャーする動画は30FPSと仮定します。
TDPT
モーションを書き出す
アバターを用意し、Skip on Dropを 外す。
(詳しくは第1章の手順2までを参照)
今回はBlenderへ書き出しするので、BVH書き出しの設定は画像1のようにします。
Blender
書き出したBVHをBlenderへ取り込み
Blender起動、新規プロジェクト作成。最初に配置されている四角のオブジェクトを消します。
ファイル>Import>BVH からデータをインポートします。
設定は画像2のとおりです。
補足:BlenderのForwardは本来-Yですが、TDPTの場合はYを前方に設定してインポートすると正面を向きます。(画像3)
Outlinerでモーションのオブジェクトを選択すると、ボーンがオレンジに光りますので、その状態でFBXに書き出します。
FBXに書き出し
File>Export>FBX
出力の設定は私の場合は画像4のように試しました。
ここは細かい設定までは確認していません。Transformの座標も恐らく気にしなくていいと思います。
Unity
UnityへFBXの取り込み
新規プロジェクトを3Dで作成します。
ProjectタブのAsset下に適当なフォルダを作り、先ほどのFBXデータをドラッグドロップします。
FBXデータを選択してInspectorタブに情報が表示されますので、RigタブのAnimationTypeをHumanoidに変更し、Applyします。(画像5)
Unity用アニメデータに変換
FBXの▶をクリックすると展開されるので、中にあるモーションデータをクリックし、Ctrl + Dで複製します。
そうすると、FBXの外側に出せますので、Unity用のアニメーションクリップとして扱うことができるようになります。(画像6)
VRMアバターの準備
アバターのVRMデータをUnityに読み込ませるにはuniVRMを使用します。
uniVRMの導入とVRMデータをUnityにインポートする方法は検索していただければ沢山出てくると思いますのでここでは割愛します。
VRMをインポートして作られたプレハブデータをProjectからHierarchyに入れます。(画像7)
Projectタブで、右クリック>Create>AnimatorControllerで、適当な名前を付けてアニメーターコントローラーを新規作成しておきます。(画像8)
アバターにアニメーションをアタッチ
Hierarchyでアバターを選択し、InspectorタブでアバターのAnimatorコンポーネントに作成したAnimatorControllerをアタッチします。(画像9)
このAnimatorControllerをダブルクリックして、Animatorタブを開きます。
ProjectタブからアニメーションデータをAnimatorタブの空白にドロップすると、オレンジのノードが出来て、Entryから矢印がつながります。(画像10)Entryから矢印がつながっている状態で、実行時にアニメーションが始まります。
実行する前に
実行ボタンを押してテストする前に、見やすいようにカメラの位置と回転をちょっと変えてアバターの正面に向くようにし(画像11)、右クリック>3D Object>Cubeを作成し、画像12のとおりにサイズを変更して床を設置しておきましょう。Game画面は画像12の右側のようになります。
実行してみましょう
それでは実行ボタンを押してみましょう。
このままでは動画の左のように、腰の位置を支点にして動いてしてしまいます。
少し修正して完了!
アニメーションによるアバター移動の許可をします。
Hierarchyタブでアバターを選択してInspectorを表示、AnimatorコンポーネントのApplyRootMotionにチェックを入れます。(画像13)
これで動画の右のようにアニメーションさせることができるようになりました。
TDPTのモーションと並べてみた動画がこちらです。
余談
アニメーションによるアバター移動の許可をすると、アバターのゲームオブジェクトのTransform位置回転がアニメーションに制御されてしまいます。それをしたくない場合は、AnimatorコンポーネントのApplyRootMotionはオフのままで、アニメーションクリップのインポート設定で調整します。
具体的にはProjectタブで、アニメーションクリップをクリックしてInspectorを開き、各RootTransformの設定を画像14のようにします。
ここの設定についての説明はUnity公式のドキュメントを参照してください。
また、使いやすいかどうかはさておき、アニメーションのドープシートやカーブなどを触って細かい調整をすることも可能です。Projectタブでアニメーションクリップをダブルクリックすると、このAnimationタブが開きます(画像15)。Blenderが得意な方はBlenderに取り込んだ時点で触っておいた方がいいかもしれません。
アニメーションの修正はまたの機会に。