MRが楽しい

MRやVRについて学習したことを書き残す

MRTKを使ってMeta Quest 2でハンドトラッキングを試し……たかった

本日は MRTK の小ネタ枠です。
MRTK を使ってMeta Quest 2でハンドトラッキングを利用可能なアプリの作成を試しました。

本作業で発生した問題

結論から述べると 2022/10/25 現在、以下のバージョンのライブラリで手順を実施しましたが本手順ではハンドトラッキングが認識しない問題が発生しています。
ハンドトラッキングは動作しませんが、コントローラでの操作が可能なアプリのデプロイまでは実施できたのでキャプチャと共に作業手順を記事に残しておきます。

公式マニュアル

MRTK を使ってMeta Quest 2でハンドトラッキング利用する手順は以下に公式マニュアルがあります。
learn.microsoft.com

本記事は 2022/10/25 時点で以下の環境にて手順を試しました。
・Unity 2020.3.25f1
・MRTK 2.8.2
・Oculus XR Plugin 1.11.2
・Oculus Integrator 39.0

事前準備

Unity から Quest アプリをビルドするには[Android Build Support]内の[Android SDK & NDK Tools]と[OpenJDK]モジュールが必要です。
以下の手順でモジュールを追加できます。
bluebirdofoz.hatenablog.com

プロジェクトの作成

[3D]テンプレートで新規 Unity プロジェクトを作成します。

Unity プロジェクトが作成出来たらメニューから[File -> Build Settings]を開き、ビルドプラットフォームを[Android]に変更しておきます。


MRTKのインポート

MixedRealityFeatureTool を使って MRTK をプロジェクトにインポートします。
FeatureTool の詳細なインストール・利用手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

今回は最小構成にするので Mixed Reality Toolkit Foundation のみ選択します。
最新バージョンの 2.8.2 をインポートしました。

MRTK のインポートが完了すると以下の Configurator ダイアログが表示されます。

Oculus XR Pluginのインポート

Configurator ダイアログで[Build-in Unity plugins (non-OpenXR)]を選択します。

Unity OpenXR plugin でもアプリ作成は可能ですが、
コントローラーの視覚化とハンドトラッキングがサポートされていません。

https://learn.microsoft.com/ja-jp/windows/mixed-reality/mrtk-unity/mrtk2/supported-devices/oculus-quest-mrtk より引用)

ダイアログが進むので[Show Settings]を選択して[XR Plug-in Management]の設定画面を開きます。

[Oculus]のプラグインを選択します。Oculus XR Plugin が未インポートの場合、自動でインポートされます。
ダイアログが進むので[Next]を選択して手順に従い MRTK 用プロジェクトの基本設定を行います。

手順を実施した後、Package Manager を確認すると以下の通り、[Oclus XR Plugin]がインポートされていることが確認できます。

Oculus Integrationのインポート

ハンドトラッキングを行うため、Oculus Integration をインポートします。
assetstore.unity.com

Oculus Integrationのバージョン

2022/10/25 現在 Oculus Integration の最新バージョンは 46.0 ですが、これは Oculus XR Plugin のバージョンが 3.2.1 未満の環境では動作しません。
MRTK の推奨環境である Unity 2020.3 では Oculus XR Plugin のバージョン 3.2.1 は利用できません。

よって Unity 2020.3 環境でアプリケーションを作成したい場合、以下のページから 39.0 の Oculus Integration を取得してくる必要があります。
Oculus Developer Center | Downloads

ダウンロードした OculusIntegration_v39.0.unitypackage をプロジェクトにインポートします。

インポート完了時に最新の OVRPlugin に更新する旨のダイアログが表示されます。

OVRPlugin を更新した場合は OpenXR バックエンドを利用するか確認する旨のダイアログが表示されます。

最後に立体音響プラグインの最新版へのアップグレードを行うかどうかのダイアログが表示されます。
今回は最新バージョンを利用したいので[Upgrade]を選択しました。

Unity の再起動を求められるので[Restart]をクリックします。

ハンドトラッキングが認識しない問題

筆者環境では上記の OVRPlugin、OpenXR の選択肢について全て選んでみましたが、どのケースでも違いはありませんでした。
全て Meta Quest 2 へのデプロイは成功しますが、どのケースにおいてもハンドトラッキングが認識しない問題が発生します。

Oculus Integration の統合とハンドトラッキングの設定

メニューから[Mixed Reality -> Utilities -> Oculus -> Integrate Oculus Integration Unity Modules]を実行します。
これにより、関連する Oculus Quest コードが機能するために必要な定義と参照で asmdef が更新されます。

次に Oculus Integration の設定を変更してハンドトラッキングを有効にします。
Assets/Oculus フォルダ配下にある OculusProjectConfig.asset ファイルを開き、[Hand Tracking Support]を[Controllers And Hands]に変更します。

Controllers And Hands の設定ではコントローラとハンドトラッキングの両方が有効になります。
コントローラと手が同時に検出された場合は、手の検出が優先されます。

シーンを作成する

Cube オブジェクトをポイントで掴んで動かすシーンを作成します。
メニューから[Mixed Reality -> Toolkit -> Add to Scene and Configure...]を実行して MRTK の基本構成をセットアップします。

バージョン 2.8.2 の MRTK ではデフォルトのプロファイルに既に[XR SDK Oculus Device Manager]の Data Provider が設定されています。
この Data Provider が Quest 環境での入力の制御を行うため、プロファイルの編集は特に不要です。

シーンに Cube オブジェクトを配置し、Object Manipulator コンポーネントを設定しました。

シーンを再生して動作を確認します。

ビルドとデバイスへのデプロイ

最後にアプリパッケージのビルドと Meta Quest 2 へのデプロイを行います。
メニューから[File -> Build Settings]を開きます。

Meta Quest 2側の準備

Meta Quest 2 に自作アプリをインストールする場合、事前に開発者モードを有効にして OS を最新版にアップデートしておきます。
開発者モードの変更方法は以下の記事を参考にしてください。
bluebirdofoz.hatenablog.com

ケーブルを使用して Meta Quest 2 を PC に接続します
[Run Device]から認識されている Meta Quest 2 デバイスを選択します。

[Build And Run]を実行するとアプリパッケージのビルドとデバイスへのデプロイが実行されます。

動作後にハンドトラッキングを認識しない

著者環境では Meta Quest 2 には問題なくデプロイでき、コントローラでは動作したものの、ハンドトラッキングが認識しない問題が発生しました。

Hand Tracking Suport の設定をハンド操作のみの[Hands Only]にしてもコントローラでのみ認識するため、Oculus Integration の設定回りに問題がありそうです。
原因が分かり次第、記事を追記します。