Virtual Body (VRM Body) Tracking Tools v0.3.0
(最新のソースを利用する場合の説明は、ReadMeUpdateブランチのReadmeを参照してください)
リアルのボディにトラッカーを付けてトラッキングするのではなく、VRMモデルの姿勢をトラッキングして、Virtual Motion Tracker(VMT)や OpenVR-OpenTrackに情報を渡して、SteamVR の仮想HMD/コントローラーとして利用しようとするものです。
VMCProtocol(VMCP) を受信できるので、VRigUnity、TDPT(ThreeD Pose Tracker)、VSeeFace、Webcam Motion Capture などのソフトでWebカメラの情報で手の動きをトラッキングしてVRMに反映し、VRChat等で頭と手を動かす3点トラッキングができ、指もうごかせます。位置情報を設定できるので、手首にVIVEトラッカーをつけたりする必要がありません。
使用例としては以下のようなものがあります。
現状、以下のHMD/コントローラー情報(VBTToolsから見ると出力)に対応しています。
また、JoyCon 利用時は、VRChat でのメニュー操作を補助する機能があります。
まだユーザーが少なく、運用された環境が偏っています。不便だなと思う部分も完全には修正できていません。既知の不便な部分としては
があります。
VRChatでWebCamとJoyConで3点トラッキングをする場合の説明もあり、あちらではVRigUnityを使って具体的に全ての設定を説明していますので、解りやすいかもしれません。 一方で、このReadMeのほうは汎用的な分、やや解りにくい説明になっています。
事前に VMT (Virtual Motion Tracker)と、使う場合はOpenTrackとOpenVR-OpenTrack を入れておきます。
OpenTrack は仮想HMD処理のために必要です。HMDを持っていない場合は最初にこれを設定してください。
逆に言えば、以下の場合は不要です。
OpenTrack は opentrack 2023.3.0 、OpenVR Driver は 1.1 で開発しています。
また、使う場合はマルチモニタが必要です。(仮想モニタでも使えます) OpenTrackを使用する場合の設定方法は、まず仮想モニタの設定方法を含め、こちら を参照して設定してください。
VMTは Skeletal Input対応仮想コントローラー処理のために必要です。 VMT設定はこちらの説明に従ってください。
VMTの注意点は以下の通りです。(リンク先にも書いてありますが、再掲しています)
続いて、VBTTools の Releases で公開している VBTTools の zip を解凍し、VBTTools.exe を起動します。 初回起動時はサーバーとして機能するためWindowsが確認ウィンドウを出すので通信許可をしてください。
VMCProtocol でポーズを送信できるアプリ(使う場合)。出力ポートは39544として送信開始してください。
(これがよくわからないという方は、入れないでTestUIを使うか、もしくはVRChatでWebCamとJoyConで3点トラッキングをする場合の説明でVRigUnityでの説明があるので、そちらを参考にしてください。)
HMD(リアルまたはOpenTrack等の仮想HMD)がある状態で SteamVR を起動します。Quest+VirtualDesktop(VD)の場合は、VDが認識するように起動してください。
OpenTrackを使っている場合、SteamVRドライバーがfreetrack版の場合は、OpenTrack.exe を起動して、入力を UDP over network、出力を freetrack 2.0 enhanced にします。(OpenTrackのSteamVRドライバーがUDP版の場合はOpenTrack.exeを終了させるか、入力/出力を UDP over network以外にします)
VBTTools を起動します。
VBTToolsは起動すると VMCProtocol の受信は即座に始まっていますので、手の位置等がVBTToolsのVRMモデルに反映されているはずです。VMCProtocolのソフトを入れてない場合は、左上のListen To VMCPのチェックを外すと、手のボーンを動かすためのTest UIが表示されます。
VBTTools の受信ポート等のネットワーク設定は左上または右上のSettingボタンの中で変更できます。
手や指の位置情報をVMTへの送信を開始する場合は右上のほうの Start Sending のHand Pos To VMT にチェックを入れます。送信先のIPアドレスやポート番号は Setting で設定できますが、通常変更不要です。Recvというところの赤い■が濃くなっていればHMDの位置情報を受信できています。できていない場合は色が薄くなってしまうので
を確認して、SteamVR、VBTTools の順番で起動しなおしてください。
下方の Use Button Panelを押すと画面でボタン等操作できます。左右いずれかのSystemボタンでダッシュボードを出したり消したりできます。(JoyCon等も使えますが、初期設定時の最低限としてはこちらで十分です)
SteamVRのダッシュボード画面で手の位置とコントローラーの位置が若干(数cm~10cm程度)ズレるのは仕様です(プレー画面と位置が変わります)。VMTのキューブ(コントローラー位置を示す)が頭・HMDと全然違う位置に出る場合(1m以上離れているような場合)はSteamVRとVMTのルームセットアップを確認してください。
実際にSkeletal Input対応アプリを起動して動作を確認します。 VRMモデルの手をうごかせない状態(webカメラトラッキング等を設定していない場合)でTestUIを使う場合は SkeletonPoseTester を使って指の動きをテストできます。
手をうごかせる場合は(VMCProtocol送信アプリを使っている場合等) v0.1.0 の Release ページで配布している SteamVRHandTest を使うと向きの調整もしやすいです。 これらのアプリはSteam のUIからは起動できないので、SteamVR起動中に .exe ファイルを直接起動してください。
手を動かせる場合は、VRChat や Moondust Knuckles Tech Demos などで動作を確認できます。
基本的に、VRアプリ側ではコントローラーをIndexコントローラーであると認識するように設定します。 SteamVRでのバインディング設定でIndexコントローラーのスケルトンの入力を無効化すると動かないので気を付けてください。
Quest + Virtual Desktop(VD) での利用の場合 VD での設定で Forward Tracking Data to PC はオフにします。 (オンにすると別の仮想コントローラーが認識されると思いますが、VMTの仮想コントローラーが優先されていればオンでも動作します)
VRChat で利用する場合は、設定画面で"Controls"(日本語だと「コントロール」) の項目の先頭にSteamVR とある部分で、以下の設定をします。
HMDをかぶって利用する場合、手の位置がおかしい場合は調整が必要です。(v0.1.0で、それ以前と設定値が変わっているため再調整が必要です) 設定方法はこちらを参照してください。
HMDレスで使う場合は必要性を感じることはほぼないと思いますので、必要なければ次に進んでください。
右上の Start Sending の所の Head Pos To OpenTrack にチェックを入れておけば、VRMの頭の位置と向きを OpenTrackに送信します。 うまくいかない場合は以下を確認します。
次項のようにJoyConを使っている場合は左のSRボタンでオンオフできます。
JoyConが無い場合は下方の Use Button Panelを押すと画面でボタン等操作できます。(JoyConがうまく動かない場合もこちらを使ってください) Systemボタン、A/Bボタン、トリガー、グリップ、サムスティックが扱えます。
こちらの通り設定・接続してください。
接続したJoyConを使う場合はVBTToolsの下方にある Use Joy Con (LR) にチェックを入れます。VBTTools起動後の初回チェック時は認識のため数秒固まります。認識時に長く(10秒以上等)固まった後に動かない場合、一度オフにしてオンにすると動く場合があります。(よくあります。PC再起動後には数秒で認識するように戻る事が多いです。)
基本的に、VRアプリ側ではコントローラーをIndexコントローラーであると認識するように設定します。JoyCon利用時にボタンと動作が異なる場合はここを確認してください。
JoyCon利用時は、通常のSteamVRのコントローラーとしての機能に加えて、Y/左◀ボタンでトラッキング(VMCP受信)の一時停止とスティックでの手の位置移動機能が使えます。 またA/右▶のボタンはトラッキングの停止と同時に、VRChatでのメニューが操作しやすい場所に手が移動します。メニューの呼び出しは、Y/左で一時停止した後に呼び出すこともできます。
一時停止中は、TestUIが表示されており、スライダーでも手の位置を変更できます。 一時停止はY/左ボタンで解除できます。解除すると位置補正もなくなり通常の手の位置に戻ります。(A/右は後からメニューを呼び出せる機能があるため、一時停止解除には使えません)
こちらを参照してください。
画面下方の OpenVRMボタンで異なるVRMモデルを読むことができます。(VRM1はv0.3.0で対応) 次回起動時は最後に読んだVRMが起動時に読み込まれますが、前回のファイルがなくなっている場合などはデフォルトモデルを読み込みます。
ネットワークの設定(UDP送信先アドレスや、送受信に使うポート番号)を設定できます。 左上と右上どちらから開いても同じです。 OKを押すと、それまでの通信と設定が変わっている部分は反映されます。Cancelの場合は変更はなかったことになります。
前回起動時の設定を保存するので、一時的変更をした場合はこの画面で戻す必要があります。
Unity 2022.3.22f1 で開発しています。 必要物を一式プロジェクトにインポートしてから後述のシーンを開いてBuildします。
テスト時バージョンと同じ unitypackage を入れるのが無難かと思います。全てMIT License で公開されているものです。
EVMCP4U (Eazy Virtual Motion Capture for Unity), External Receiver Pack
新規のプロジェクトに1~4を入れてから、こちらのリポジトリの内容を追加すれば Build できると思います。
参考のためURL書いておきますが、後から入れると改変が上書きされてしまうので入れないでください。
VBTTools.exe は Assets/SakuraShop_tbb/VBTTools/Samples/VBTSample.unity を buildしたものです。 PlayerSetting 等はウィンドウサイズ可変にする等していますが、特殊な設定は特にしていないので普通にbuildできるかと思います。
VBTTools.exe そのものがサンプルではありますが、OpenGlovesライクにVMTを使うための機能である OgLikeVMT だけのサンプルを別途用意してあります。
詳細説明は こちら