👓

MRTK3 x Meta Quest3 でパススルー

2023/10/29に公開

やったこと

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)を使う。
https://learn.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool

MRFTをダウンロード

以下サイトから、MRFTをダウンロード(MixedRealityFeatureTool.exe)。
本記事では、バージョン1.0.2209.0を使用。
https://www.microsoft.com/en-us/download/details.aspx?id=102778

プロジェクトにMRTK3のパッケージをインポート

ダウンロードしたMRTFを起動し、先ほど作成したプロジェクトに必要なパッケージをインポート。

  1. 起動してしばらく待つと、Startボタンがアクティブになるので、押して次へ

  2. 先ほど作ったプロジェクトフォルダを指定してDiscover Features

  3. 必要なパッケージをチェックして 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
  4. 先ほどチェックしたパッケージがあるのを確認して Import。
    また、依存関係があるパッケージも、自動でインポート対象にしてくれる(Required dependenciesの部分)。

  5. Unityのmanifest.jsonの上書き確認。Approve押す。
    その後、終了画面がでるので、ExitボタンでMRFTを終了

  6. Unityに戻ると、MRTK3のインポートが始まる。
    途中で以下の確認がでるので、「Yes」を選択。Unityが再起動される。

  7. Unity再起動後、ConsoleにClearできないエラーが出てないならOK。  
    Package Managerで、インポートしたMRTK3のパッケージも確認できるはず。

3.プロジェクト設定 (MRTK3 x Quest3向け)

Player設定

Project Settings > Playerタブを開く。
Android の Other Settings で、以下の設定を変更。

  1. Renderingの設定

    • Color Space : Linear
    • Auto Graphics API : チェックOFF
    • Graphics API : OpenGLES3のみ (Vulukanでも良いかも)
  2. 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の設定

  1. 使用プラグインの設定
    Project Settings > XR Plug-in Management タブを開く。
    Android の Plug-in Providers で、「OpenXR」をチェックする。

  2. 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向けにセットアップ

シーン作成

  1. Unityで新規シーン作成して開く
  2. Main Camera を削除
  3. 以下に格納された、MRTK XR Rig プレハブをシーンに配置
    /Packages/MRTK Input/Assets/Prefabs
  4. MRTK XR Rig > Camera Offset を以下の様に変更。
    • Transform > Position > Y : 0
    • XR Origin > Tracking Origin Mode : Device
    • XR Origin > Tracking Origin Mode > Camera Y Offset : 0

コントローラ/ハンドで操作できるオブジェクトを追加

  1. シーン上に Cube を作成
  2. Cube の Transform を、下記スクショのように変更 (自身の前方に配置)
  3. Cube に Object Manipulator コンポーネントを追加。
    これだけで、MRTK3のコントローラやハンドで移動/回転/拡縮できるようになる。

5.MRTK3の動作確認

いったん、ここまで上手くいってることを確認する。
作ったシーンをビルドして、Quest3にインストールして実行。以下のように、目の前にあるCubeをコントローラのポインタや、ハンドで操作できることができればOK。

https://youtube.com/shorts/54kwHE0gWdc

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

https://assetstore.unity.com/packages/tools/integration/meta-xr-utilities-sdk-261898?locale=ja-JP

7.パススルー設定

Meta XR SDK の設定オブジェクトを作成

  1. シーンに空オブジェクト作成 (下記スクショのMetaXRSDK)
  2. 作成したオブジェクトに、以下のコンポーネントを追加
    • 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

8.プロジェクト設定(Meta XR SDK x MRTK3 x Quest3向け)

Oculus XR Pluginの追加

Meta XR SDK は、Oculus XR Plugin で動くので、使用するプラグインに追加する必要がある。しかし、XR Plug-in Management を見ると、Oculus のチェック欄が非活性になってる。

上記については、(再現性は微妙だが)、以下の手順で解決できた。

  1. Project Validation から Oculus XR Pluginをインストール
    Project Settings > XR Plug-in Management > Project Validation タブを開く。
    Android のチェック一覧で、"[Pakcages] The Oculus .... must be installed" の Issue に対し、Fix ボタンを押して修正。

  2. Project Validation から プラグインをアクティブローダーに追加 ⇒ Unity再起動
    修正後、新たに "[Packages] Oculus must be added ... active loaders" という Issue が出現するので、これも Fix。
    Consoleに大量のエラーが出るが、無視して Unity を再起動する。
    再起動後は、エラー出現が止まっており、Fixした Issue も Project Validation の一覧から消えていることを確認。

  3. OculusのProject Setup Toolから プラグインをアクティブローダーに追加
    Project Settings > Oculus タブを開く。
    Android のチェック一覧で、"Oculus must be added ... active loaders" という Issue があるので、これを Fix。

  4. 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://youtube.com/shorts/-aKn0wLFyvs

参考

Discussion