RebocapとUnity間でモーションデータを送れるようにする
安価なモーキャプを使ってオリジナルのモーションデータの録画がしたいけど、調べても全然情報が出てこない!!ということで、作成したモーキャプ環境(システム面)の備忘録を書いておきます。誰かの参考になったら嬉しいです。
以下の画像の様に、Rebocapでモーションキャプチャ→VMCプロトコル→Unityにてモーション録画するシステムを目指します。
ちなみに今回録画したモーションデータを利用して、YouTubeで小夜/SAYOというキャラクターのライブを行いました.こんな感じのモーションが記録できるんだな~というサンプルとしてご覧いただければ幸いです。
はじめに
今回は
- 値段が安いことと(購入時点で2.5万円ほど)
- トラッキングできる点が多いこと(15点トラッキング)
- PC(+トラッカー)のみでモーキャプが完結できること
からRebocapを採用しました。
対抗馬としてソニーさんのmocopiが上がっていましたが、検討時点ではモーキャプをするのにスマホが必須だったのでRebocapに軍配が上がりました。
セットアップ
公式様の使い方ページを参考にセットアップを進めます。
使い方 / How to use
Rebocapのセットアップについては別途終わらせているものとします!
今回はRebocapの初回セットアップ方法やキャリブレーション方法については触れません。
プロジェクト作成
まずはUnityのプロジェクトを作成します。
UnityのバージョンはEVMC4Uの公式ページを参照してください。
現在(2024/08)はUnity2019.4.29f1 (v3.8~)以上対応
パイプラインはビルトイン(標準)のものを選択します。
EVMC4Uのインポート
続いてモーションデータを受け取るためのUnitypackageをダウンロードします。
EVMC4U - EasyVirtualMotionCaptureForUnity
バージョンが2種類ありますが、今回は安定版をダウンロードします。
ダウンロード・解凍したら、フォルダ内にあるExternalReceiverPack_v4_1.unitypackage
をUnityのprojecタブにドラッグ&ドロップして
すべてにチェックが入っていることを確認してインポートします。
インポートできたら、シーンExternalReceiver
を開きます。
VRMのインポート
ご自身で用意した(動かしたい)VRMファイルを用意します。
今回は小夜/SAYO公式MMDモデルをVRM形式に変換したものをサンプル画像として使用していますが、各自使用したいVRMモデルを読み込んでください.
VRMファイルの利用規約はしっかりと確認しましょう!!
Projectの表層にVRMファイルをドラッグ&ドロップすると、色々なファイルが展開されて見づらくなってしまうので、あらかじめ新規ファイルを作成して、その中にドラッグ&ドロップします。
VRMファイルを読み込めたら、Prehabをhierarchyタブにドラッグ&ドロップします。
続いてExternalReceiverを選択し、先ほどhierarchyタブに置いたPrehabをVRMモデルのGameObject
にアタッチします。
さらにモーションデータ受信の際に受け取った値を調整する設定もしておきます。
VRMモデルとリアルアバター(あなた)の体格が異なる場合、ボーン位置の厳密な同期をオフにすると自然なモーションを保ったままモデルが動いてくれるのでオススメです。その他の項目は目的に応じて調整してください。
VMCProtocolを利用してモーションを受信する
RebocapとUnity間でVMCProtocolを利用してモーションデータを送信します。
まずはRebocap側で何番のポートにモーションデータを出力しているのかを確認します。
もしポート番号を変えたい場合は、一旦VMC出力をオフにすると番号を変更することができるようになります。
つぎにUnity側で、Rebocapで設定されているポート番号と同じ番号を指定します。
モーション受信テスト
これでUnityでRebocapからモーションデータを受け取るセットアップは完了です!
Rebocapでモーショントラッキングをスタートしてキャリブレーションを行ったあとに、UnityのPlayボタンを押してシーンを再生してみましょう!
モーションデータを録画する
EasyMotionRecorder を利用してモーションデータを記録できるようにします。
EasyMotionRecorderの導入
EasyMotionRecorderの配布ページから、最新バージョンのUnitypackageをダウンロードします。
EasyMotionRecorder - Releases
ダウンロードしてきたUnitypackageを、Projectタブにドラッグ&ドロップします。
すべての項目にチェックが入っていることを確認して、インポートします。
インポートが完了したら、Assets\EasyMotionRecorder\Prefabs
の中にあるEasyMotionRecorder
Prehabをhierarchyタブにドラッグ&ドロップします。
hierarchyタブに配置したEasyMotionRecorder
Prehabを選択して、MotionDataPlayer
とMotionDataRecorder
コンポーネントのAnimator
にそれぞれモデルの親オブジェクト(Animatorコンポーネントを持っているオブジェクト)をセットします。
モーションデータの録画
これでモーション録画の準備は完了です!!
Unityで再生ボタンを押して、MotionDataRecorder
コンポーネントのRecoredStartKey
とRecordStopKey
にセットされているキーを押すと録画が開始・停止されます。
完成!
お疲れ様でした!これでモーション録画システムの構築は完了です!
このままだとキャラクタの表情などは記録されていないので、目的に応じてアニメーションタブから表情付けを行ったりするとよりイイ感じのモーションデータになります。
アニメーションの編集には、ちょっとお高いですがUnity Assetstoreで販売されているVery Animationがおすすめです。