そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】mocopiとMetaQuest2を併用したモーションをUnity内に記録する方法

要件

・mocopi アプリバージョン 2.0.0
・Unity 2021.3.18f1
・VirtualMotionCapture(通称ばもきゃ) 0.57r1
・EasyVirtualMotionCaptureForUnity(略してEVMC4U) v4_0a
・EasyMotionRecorder v1.1.6

前提

Windows PCであること
・UnityでHumanoid形式の3Dモデルを扱ったことがあること

はじめに

3Dモデルに適用するモーションはmixamoやアセットストアで入手できますが
理想とするモーションがなかったりします。

モーションがない場合自作を考えるわけですが、
専用のアセットを使用しても作成はなかなか大変な状況です。
そこで今回、mocopiとMetaQuest2を使用し
自分の動きをモーション化していきました。

mocopi単体でもモーション取得は可能ですが
mocopiに下半身集中モードというモードがあったため
MetaQuest2と併用してのモーション取得に挑戦してみた記事になります。

なかなかつまづきポイントが多かったため備忘録として残しておきます。

使用したもの

PC以外で物理的に使用したものは次の3つです。
・mocopi(ソニーが提供するモバイルモーションキャプチャー)
・MetaQuest2
・PCとMetaQuest2をつなぐケーブル
 純正品は高いためこちらを購入(今のところ問題なく使えています。)
 USB-A 3.0 & Type C ケーブル【PR】

モーションを記録する概要

複数のガジェットとアプリケーションを使用するため
先に全体の流れを書きます。

1.mocopiとMetaQuest2のモーション情報を
 VirtualMotionCapture(以下、ばもきゃ)で合成する
2.ばもきゃからモーション情報をUnityへ送る
3.Unityでモーション情報を受け取り記録する

前準備

モーション記録を実現するために下記において前準備が必要です。
・mocopi
・MetaQuest2
・ばもきゃ
・Unity

mocopiの前準備

VR向け下半身優先モードを使用するための設定をします。

詳細はこちらです。
www.sony.net

「高度な機能の有効化」の項目は
mocopiアプリを起動した直後の右上のボタンから設定できます。
センサーのキャリブレーション後には項目が出てこないため注意です。

まだ設定が残っていますがこのタイミングでは一旦終了です。

MetaQuest2の前準備

MetaQuest2はPCと連携し
MetaQuest2からSteamVRを起動することで
ラッキング情報をばもきゃに送ることができます。

これらを実現するために次の内容が必要です。
1.Oculusアプリの取得
2.MetaQuest2とPCをUSBケーブルで接続しQuest Linkする
3.Oculusアプリの設定変更
4.SteamVRをインストールする

1.Oculusアプリの取得

公式サイトで「ソフトウェアをダウンロード」からアプリケーションを取得します。
https://www.meta.com/jp/ja/quest/setup/

2.MetaQuest2とPCをUSBケーブルで接続しQuest Linkする

ダウンロードしたアプリケーションを起動し
MetaQuest2とPCをUSBケーブルで接続します。

3.Oculusアプリの設定変更

MetaQuest2からSteamVRを起動するための設定を行います。
Settings→一般→提供元不明にチェックをいれます。

4.SteamVRをインストールする

SteamVRをインストールします。(Steamのアカウントが必要です。)
store.steampowered.com

ばもきゃの前準備

VirtualMotionCapture(通称ばもきゃ)のモーション送信機能は
PIXIV FANBOXでの支援者がダウンロードできるバージョンになります。

支援者となりモーション送信機能が付いたバージョンを入手しましょう。
(最低300円です。開発者様に感謝) akira.fanbox.cc

Unityの前準備

Untiyでの前準備は次の3つです。
1.unitypackageのダウンロード/Unityへのインポート
2.VRMファイルのインポート
3.Untiyでの設定

1.unitypackageのダウンロード/Unityへのインポート

Unityで3Dプロジェクトを新規作成し次の2つのunitypackageをインポートします。

・EasyMotionRecorder
受信したモーションを保存するもの

github.com


・EasyVirtualMotionCaptureForUnity
ばもきゃとUnityをつなぐもの

入手先1
github.com 入手先2
booth.pm

EasyVirtualMotionCaptureForUnityをインポートすることで
UnityでVRMファイルを扱えるUniVRMも一緒にインポートされます。

2.VRMファイルのインポート

ニコニ立体やVRoid Studio、VRoid Hub等で入手した
動かしたいVRMファイルをUnityに入れます。

VRMのモデルデータにはVRM0とVRM1.0のバージョンがありますが
今回インポートに対応しているのはVRM0のみになります。

3.Untiyでの設定

以下をヒエラルキー上にセットしてください
・インポートしたVRMモデル

・EVMC4U>ExternalRecieverのプレハブ

・EasyMotionRecorder>Prefabs>EasyMotionRecorderのプレハブ

ヒエラルキー上にセットした2つのオブジェクトの設定を行います。

ExternalRecieverのインスペクター
VRMモデルのGameObject」欄に
VRMオブジェクトを割り当てます。

EasyMotionRecorderのインスペクター
「アニメーター」欄にVRMオブジェクトを割り当てます。

以上で前準備完了です。

モーション記録方法

モーション記録の一連の流れは以下となります。
1.前準備で設定したUnityのプロジェクトを開いておく
2.mocopiを下半身モードでキャリブレーションする
3.MetaQuest2を起動しQuest Linkを有効化する
4.Quest上でSteamVRを起動する
5.ばもきゃを起動する
6.mocopiとばもきゃの設定をする
7.Unityで実行する
8.モーションを録画する

1.前準備で設定したUnityのプロジェクトを開いておく

2.mocopiを下半身優先モードでキャリブレーションする

www.sony.net

3.MetaQuest2を起動しQuest Linkを有効化する

設定→システム→Quest Link→「Quest Linkを起動」のスイッチをON

参考 yuushablog.info

4.Quest上でSteamVRを起動する

Questメニューの「ディスプレイ」をでPCの画面を表示
→SteamVRを起動

SteamVRを起動できれば良いので起動方法は他の方法でも問題ありません。

5.ばもきゃを起動する

Quest上もしくはPCからばもきゃを起動する

6.mocopiとばもきゃの設定をする

下記の内容で設定します。

vmc.info

また、ばもきゃ側でOSCでモーション送信を有効にするにチェックをいれます。

7.Unityで実行する

Unityのヒエラルキー上に設置されている
ExternalReceiverのインスペクターの「ポート」が
ばもきゃ側と同じ数字になっているか確認する

ExternalReceiverのインスペクター

ばもきゃ

この状態で実行することで自分の動きがUnityのモデルに伝わります。

8.モーションを録画する

あとは録画するだけです。
ゲームビューが選択されている状態で
「R」キーを押すことで録画開始、
「X」キーを押すことで録画終了となります。

Xキーを押してもUnityの実行状態が終了するわけではないため注意してください。
また、Xキーを押して録画を終了しないと録画が完了しない点も注意です。

モーションのアニメーションデータ化

録画したモーションデータは
Unity上のAssets→Resourcesフォルダ内に入っています。
モーションデータのインスペクター右上のボタンを押し
「Export as Humanoid animation clips」を押してアニメーションのデータにします。

あとは編集が必要がであれば適宜アニメーション編集を実施してください。

mocopiとMetaQuest2を併用する メリットデメリット

mocopiとMetaQuest2を併用して感じたメリットデメリットは以下です。

メリット
・腕が上に真っ直ぐ上がるようになる
 mocopi単体では腕をまっすぐ上に上げても
 肘は曲がったままで手を上に上げた形になってしまいましたが
 腕が上に真っ直ぐ上がるようになりました。

・膝の曲げ伸ばしがより自然になる
 腕に付けていたmocopiのセンサーを膝上に移動するため精度が上がります。

デメリット
・遅延が発生した場合、動きを連動させるのが難しい
 mocopiはスマホorタブレットから送信するためか1秒程度遅れて反映されます。
 一方、MetaQuest2が担う頭、腕の動きは遅延は感じません。
 そのため、腕と下半身が連動する動きをすると下半身だけ遅れてしまいます。
 (接続の環境によると思います。)

 

おわりに

SteamVRを起動せずともトラッカーが反応してほしいところですね。
よくわからず進めたところもあるのでもっと簡単な方法がありましたら教えてください。

参考

note.com