MRTK3 x Meta Quest3 でパススルー
やったこと
MRTK3とMeta XR SDKを使って、Quest3でパススルーができるか検証。
できたこと
MRTK3とMeta XR SDKでパススルーできた!
また、コントローラーを使ってオブジェクトを操作できることも確認。
できなかったこと
OpenXR PluginとOculus XR Pluginの嚙み合わせが悪いのか、ハンドトラッキングの動作が微妙。パススルーにすると、ハンドトラッキングはできてるようだが、ポインタがハンドモデルに追従しなくなった。
環境
OS | Windows 11 |
Unity | 2022.3.11f |
MRTK | 3.0.x |
Meta XR SDK | 57.0.0-pre |
補足
- Unityは、追加モジュールとしてAndroid Build Support一式が必要
- Quest3は、開発者モードにしておく
- 細かいツール/パッケージのバージョンは省略してますが、手順でなるべく確認できるようにしてます。
手順
1.新規プロジェクト作成
Unityの新規プロジェクトを作成。テンプレートは「3D」。
プロジェクトが開いたら、Build Settingsで AndroidにSwitch Platformしておく。
2.プロジェクトにMRTK3を導入
Windowsでは、Microsoftが提供している Mixed Reality Feature Tool(MRFT)を使う。
MRFTをダウンロード
以下サイトから、MRFTをダウンロード(MixedRealityFeatureTool.exe)。
本記事では、バージョン1.0.2209.0を使用。
プロジェクトにMRTK3のパッケージをインポート
ダウンロードしたMRTFを起動し、先ほど作成したプロジェクトに必要なパッケージをインポート。
-
起動してしばらく待つと、Startボタンがアクティブになるので、押して次へ
-
先ほど作ったプロジェクトフォルダを指定してDiscover Features
-
必要なパッケージをチェックして Get Features。
今回は、よく使いそうな以下をチェック。必須なのは太枠にしたやつだと思う。- MRTK3
- MRTK Core Definitions
- MRTK Input
- MRTK UX Components
- MRTK Standard Assets
- MRTK UX Components (Non-Canvas)
- Platform Support
-
Mixed Reality OpenXR Plugin
-
Mixed Reality OpenXR Plugin
- MRTK3
-
先ほどチェックしたパッケージがあるのを確認して Import。
また、依存関係があるパッケージも、自動でインポート対象にしてくれる(Required dependenciesの部分)。
-
Unityのmanifest.jsonの上書き確認。Approve押す。
その後、終了画面がでるので、ExitボタンでMRFTを終了
-
Unityに戻ると、MRTK3のインポートが始まる。
途中で以下の確認がでるので、「Yes」を選択。Unityが再起動される。
-
Unity再起動後、ConsoleにClearできないエラーが出てないならOK。
Package Managerで、インポートしたMRTK3のパッケージも確認できるはず。
3.プロジェクト設定 (MRTK3 x Quest3向け)
Player設定
Project Settings > Playerタブを開く。
Android の Other Settings で、以下の設定を変更。
-
Renderingの設定
- Color Space : Linear
- Auto Graphics API : チェックOFF
- Graphics API : OpenGLES3のみ (Vulukanでも良いかも)
-
Identification, Configrationの設定
- Minimum API Level : Android 10.0 (API level 29)
- Scripting Backend : IL2CPP
- Target Architectures > ARMv7 : チェックOFF
- Target Architectures > ARM64 : チェックON
MRTK Profileの設定
Project Settings > MRTK3 タブを開く。
Android と Stand Alone の Profile に、デフォルトプロファイルを設定。
なお、デフォルトプロファイルは、以下に格納されてる。
- Packages/MRTK Core Definitions/Configuration/Default Profiles/MRTKProfile.asset
XR Plugin Managementの設定
-
使用プラグインの設定
Project Settings > XR Plug-in Management タブを開く。
Android の Plug-in Providers で、「OpenXR」をチェックする。
-
OpenXRプラグインの設定
Project Settings > XR Plug-in Management > OpenXR タブを開く。
Android で、以下の設定を変更。- Interaction Profiles : Oculus Touch Controller Profile を追加
- OpenXR Feature Groups : 以下をチェックする
- Hand Tracking
- Meta Quest Support
4.シーン作成&MRTK3向けにセットアップ
シーン作成
- Unityで新規シーン作成して開く
- Main Camera を削除
- 以下に格納された、MRTK XR Rig プレハブをシーンに配置
/Packages/MRTK Input/Assets/Prefabs
- MRTK XR Rig > Camera Offset を以下の様に変更。
- Transform > Position > Y : 0
- XR Origin > Tracking Origin Mode : Device
- XR Origin > Tracking Origin Mode > Camera Y Offset : 0
コントローラ/ハンドで操作できるオブジェクトを追加
- シーン上に Cube を作成
- Cube の Transform を、下記スクショのように変更 (自身の前方に配置)
- Cube に Object Manipulator コンポーネントを追加。
これだけで、MRTK3のコントローラやハンドで移動/回転/拡縮できるようになる。
5.MRTK3の動作確認
いったん、ここまで上手くいってることを確認する。
作ったシーンをビルドして、Quest3にインストールして実行。以下のように、目の前にあるCubeをコントローラのポインタや、ハンドで操作できることができればOK。
6.Meta XR SDKを導入
Quest3のパススルーは、Meta XR SDK (旧Oculus Integration) の機能で実装するので、Asset Store からインポートする。
今回は、一番コアな機能をまとめた 「Meta XR Utilities SDK」をプロジェクトにインポートすればOK。
プロジェクトへインポート中に出るポップアップは、出現順に以下を選択。
- データ送る? : Don't Send (どっちでも良い)
- MR Feature をONにする? : Enabe
- 再起動が必要 : Restart
7.パススルー設定
Meta XR SDK の設定オブジェクトを作成
- シーンに空オブジェクト作成 (下記スクショのMetaXRSDK)
- 作成したオブジェクトに、以下のコンポーネントを追加
- OVR Manager
- OVR Passthrough Layer
OVR Managerコンポの設定
アタッチした OVR Manager コンポの設定を変更。
- Target Devices : Quest3にチェックON
- Quest Features > General : 以下を設定
- Hand Tracking Support : Controllers And Hands
- Passthrough Support : Required (Supportedでも良いかも)
- Insight Passthrough > Enable Passthrough : チェックON
OVR Passthrough Layerコンポの設定
アタッチした OVR Passthrough Layer コンポの設定を変更。
- Composition > Placement : Underlay
MRTK XR Rigのカメラ設定
シーン上の MRTK XR Rig > Camera Offset > Main Camera にアタッチされている、
Camera Settings Manager の設定を変更。
- Opaque Display : 以下を設定
- Clear Mode : Solid Color
- Clear Color > A : 0
- Transparent Display : 以下を設定
- Clear Color > A : 0
- Clear Color > A : 0
8.プロジェクト設定(Meta XR SDK x MRTK3 x Quest3向け)
Oculus XR Pluginの追加
Meta XR SDK は、Oculus XR Plugin で動くので、使用するプラグインに追加する必要がある。しかし、XR Plug-in Management を見ると、Oculus のチェック欄が非活性になってる。
上記については、(再現性は微妙だが)、以下の手順で解決できた。
-
Project Validation から Oculus XR Pluginをインストール
Project Settings > XR Plug-in Management > Project Validation タブを開く。
Android のチェック一覧で、"[Pakcages] The Oculus .... must be installed" の Issue に対し、Fix ボタンを押して修正。
-
Project Validation から プラグインをアクティブローダーに追加 ⇒ Unity再起動
修正後、新たに "[Packages] Oculus must be added ... active loaders" という Issue が出現するので、これも Fix。
Consoleに大量のエラーが出るが、無視して Unity を再起動する。
再起動後は、エラー出現が止まっており、Fixした Issue も Project Validation の一覧から消えていることを確認。
-
OculusのProject Setup Toolから プラグインをアクティブローダーに追加
Project Settings > Oculus タブを開く。
Android のチェック一覧で、"Oculus must be added ... active loaders" という Issue があるので、これを Fix。
-
XR Plug-in Management の Oculus がチェックONになっていることを確認。
Oculus XR Pluginの設定
XR Plug-in Management > Oculus タブを開く。
Android の、Target Devices で、「Quest 3」のチェックON。
9.ビルドして動作確認
上記までできたら、再度ビルドしてQuest3へインストールし、起動してみる。
パススルーな状態で Cube が見えるようになっているはず。
また、Cube はコントローラのポインタなら操作できる。
ただし、ハンドトラッキングは、ハンドの認識はできてるがポインタが追従しない&Cube に触れても操作できなかった。
参考
- https://learn.microsoft.com/ja-jp/windows/mixed-reality/mrtk-unity/mrtk3-overview/test-and-deploy/quest-deployment
- https://hatsune.hatenablog.jp/entry/2023/10/08/224243
- https://zenn.dev/miyaura/articles/be65665439f0d4
- https://localjoost.github.io/Full-underlay-passthrough-transparency-with-MRTK3-on-Quest-2Pro/
- https://github.com/microsoft/MixedRealityToolkit-Unity/discussions/11239
Discussion