HaritoraXを使用してUnityでフルトラをアバターに反映させる方法(一人称視点対応)
この記事はIwaken Lab. Advent Calendar 2024の21日目の記事です。
前の記事はふぁゔさん、次の記事は土鍋さんが担当します。
ぜひ読んでみてね!
はじめに
こんにちは。
ジョジョ好きなXRクリエイターの もふるね です。
先日、HaritoraX Wireless(ハリトラ)というモーショントラッキング機材を購入しました。
これを使って、Unityの自作アプリでフルトラ情報をアバターに反映させたいと考えました。
先駆者はいないかと調べてみたところ・・・
・・・うーん、見つからないですね。
じゃ、自分で方法を見つけますかーっ!
そんなこんなで「Unityでフルトラ情報をアバターに反映させる方法(一人称視点)」ができました。
この記事ではその方法を書き記していきます。
Unityでフルトラを実現するまでの全ステップ
使用デバイス
- パソコン
- Meta Quest3
- HaritoraX Wireless
- 専用通信ドングル GX6
使用ソフト
- Unity 2022.3.25f1
- SteamVR
- HaritoraConfigrator
- VirtualMotionCaptureの有料版
使用ライブラリ・パッケージ
流れ
- ハリトラでフルトラ情報を得る
- ドングルGX6でフルトラ情報を受信し、パソコンに伝える
- HaritoraConfigratorでフルトラ情報をSteamVRに伝える
- VirtualMotionCaptureでフルトラ情報をVRMアバターのボーン情報に変換する
- EVMC4UでVRMアバターのボーン情報をUnityに伝える
- XR Interaction ToolKitで一人称視点を実装する
説明
ハリトラでフルトラ情報を取得する方法
フルトラ情報をどのように取得するかを解説します。
今回はトラッキング機材としてハリトラを用いました。
ハリトラでは胸・腰・右腿・左腿・右足首・左足首の6点トラッキングが出来ます。
(追加パーツでさらに増やせる)
ハリトラのセンサーは加速度・ジャイロ・地磁気を読み取り、BlueToothでパソコンに送信します。
ですが、私のパソコンにはBlueTooth受信機能がありませんでした。
そこで、ハリトラの追加オプション品である専用通信ドングル GX6を追加購入しました。
パソコンにこのドングルをUSB接続すると、トラッカー情報を受信できるようになります。
ハリトラとドングルのお値段合わせて4.5万円!安い!
(他にはrebocapという3万円の15点トラッキングがあるっぽい。フレンドに教えてもらった。)
また、ハリトラのトラッカー情報をSteamVRに伝えるソフトHaritoraConfigratorがあります。こちらは無料です。
フルトラ情報の取得方法をまとめると
- 体の動きをハリトラのトラッカーが読み取る
- トラッカー情報をBlueToothかドングルを介してパソコンに送る
- HaritoraConfigratorでトラッカー情報をSteamVRに送る
といった感じです。
フルトラ情報をUnityに伝達する仕組み
フルトラ情報をUnityにどのように伝えるかを解説します。
まずはソフトとライブラリの紹介をします。
-
VirtualMotionCaptureの有料版
フルトラ情報をVRMアバターのボーン情報に変換するソフトです。有料版ではOSC通信が可能になります。 -
EVMC4U
VirtualMotionCaptureからOSCで姿勢情報を受信してUnityシーンに反映するスクリプト群です。
フルトラ情報をUnityに伝達する仕組みを解説すると
(この時点でフルトラ情報をSteamVRで認識できてるものとします。)
- VirtualMotionCaptureを用いてVRMアバターのボーン情報に変換する。
- ボーン情報をVirtualMotionCaptureの有料版の機能であるOSC通信で送る。
- EVMC4UでOSCでボーン情報を受信してUnityシーンのVRMアバターに反映する。
といった感じです。
Unityでフルトラをアバターに反映させる手順
必要なソフトウェアの準備
-
HaritoraConfigratorをダウンロードします。
これはハリトラのフルトラ情報をSteamVRに伝えるアプリです。 -
VirtualMotionCaptureの有料版をダウンロードします。
作者のアキラさんのfanboxに加入するとダウンロード出来ます。
Unityシーンの構築
-
Unity2022.3.25f1でプロジェクトを作成します。
-
VRMアバターを導入します。今回はVRoidのAvatarSample_Aを用います。
-
使いたいシーンにAssets\EVMC4U\ExternalReceiver(Prefab)を置きます。
-
同じくAvatarSample_Aを置きます。
-
ExternalReceiverのインスペクターからExternal Receiver(Script)のVRMモデルのGameObjectにシーンに置いたAvatarSample_Aを指定します。
フルトラのセッティング
- ハリトラを体に装着して、電源を付けます。
- Quest3を起動し、パソコンと接続します。
私はVirtual Desktopを使って接続しました。Quest Linkなど他の方法で接続してもよいです。 - SteamVRを起動します。
- HaritoraConfigratorを起動します。
- キャリブレーションを行い、ハリトラのトラッカーが認識されてることを確認します。
キャリブレーションがうまくできないとき(体に対して首が180度曲がるなど)はHaritoraConfigratorを再起動すると直ります。
これでフルトラ情報がHaritoraConfigratorを介してSteamVRで認識されます。
- VirtualMotionCaptureを起動します。
- 「VRM読込」をクリックし、AvatarSample_A(vrmファイル)を選択して読み込みます。
- 「詳細設定」をクリックし、「OSCでモーション送信を有効にする」にチェックを付けます。
- 詳細設定の「使用トラッカー設定」をクリックし、左右の手に対してQuestコントローラーを正しく設定します。
- 「キャリブレーション」をクリックし、キャリブレーションを行います。
このとき、Questコントローラーの∞ボタンを長押しして、正面をリセットするとよいです。
これでフルトラ情報がVRMアバターのボーン情報に変換され、OSC通信で送信できるようになります。
- この状態でUnityを再生してみましょう。
フルトラ情報がUnity上のアバターに反映されていますね!
・・・しかし、Questから見える光景は固定されたカメラからの視点になっています。
これでは不自然なので、一人称視点を実装していきましょう。
Unityでの一人称視点の実装
- XR Interaction ToolKitをインストールしてセットアップします。
セットアップはこりんさんの記事「Unity VR開発メモ(XR Interaction Toolkit)」を参考にしました。 - ヒエラルキー上のMain Cameraを削除します。
- Assets\Samples\XR Interaction Toolkit\2.5.4\Starter Assets\Prefabs\XR Interaction Setup(Prefab)をシーンに設置します。
- ではUnityを再生してみましょう。
一人称視点になりました!
これでかんs・・・(上を向く)
うわぁ!!!???
びっくりしました。
顔の裏側が見えちゃってますね・・・
見たくないものはカメラのレイヤーを指定して除外しましょう。 - ヒエラルキー上のAvatarSample_A\Faceを選択して、Layerをクリックし、Add Layerをクリックします
- Layersの適当な場所に『Head』レイヤーを追加します
- AvatarSample_AのFaceとHairのLayerで「Head」を指定します。
- ヒエラルキー上のXR Interaction Setup\XR Origin(XR Rig)\Camera Offset\Main Cameraを選択して、CameraコンポーネントのCulling MaskでHeadを除外します。
- ではUnityを再生してみましょう。
上を向いても顔の裏側が見えなくなりました!
完成です!
終わりに
Unityでフルトラ情報をアバターに反映させる方法の実現で悩んでいた際に助言をくれた霧雨なのはさんとサックーさんに感謝します!
Discussion