🎉

Snapdragon Spaces SDK V1.0.0(V1.0.1) with MRTK3 を使った開発環境構築(ハンドトラッキング)

2024/11/26に公開

Snapdragon SpacesとMRTK3を組合わせた開発

Snapdragon Spaces SDKを使ってコンテンツを開発する時にUI部分を手軽に作りたいことがあります。そんな時にはMixed Reality Toolkit 3(MRTK3)を利用することができます。手元のメニューやボタンなどのUIを作る際に利用できる豊富なテンプレートがあります。
様々なコンテンツを作る際の便利なライブラリとして活用することができます。

今回は、実際にMRTK3を利用する手順を紹介したいと思います。Snapdragon Spacesの公式にも手順はあるのですが、少し古いです。最新のMRTK3を使うともっと簡単に導入できるのでその話を紹介します。

このドキュメントの要約:MRTK3でXRHandsがサポートされたことで、Android系XRデバイスで暫定利用していたMicrosoft Mixed Reality OpenXR Plug-inを利用する必要がなくなった

MRTK3について

Mixed Reality Toolkit 3はもともとはHoloLens用のOSSライブラリとしてMicrosoftが手動で開発されていたものです。長い期間で様々な経緯をたどり、クロスプラットフォーム開発向けのライブラリとして現在は第3世代となっています。また、現在はMicrsoft,Qualcomm,Magic Leapの3社の独立した委員会の管理の元、開発が進められています。この辺りの詳細については別記事をまとめているので興味がある人はそちらもご参照ください。

https://qiita.com/miyaura/items/a36d89a8e708d1bcd722

最新版で何がかわったか

MRTK3はOSSとして継続的に開発が進められているのですが、最近の修正の中でハンドトラッキング機能の拡張があります。正確にはOpenXRのアップデートも影響しています。
MRTK3はGA当初から、HoloLens 2とMeta Questをサポートしていました。これらのデバイスではハンドトラッキングが利用可能なのですが、リリース当時はOpenXRのハンドトラッキング系は、各デバイス毎にインターフェース設計がされており、統合された機能として提供できていない状況がありました。
このため、MicrosoftではHoloLens 2とMeta Quest向けのハンドトラッキング機能を汎用的に扱えるように「Microsoft Mixed Reality OpenXR Plug-in」を提供しています。このプラグインは色々OpenXR系の便利機能を提供しているのですが、その中に以下の2つが含まれています。

  • HoloLens 2の詳細なハンドトラッキング制御
  • Meta Quest等Android向けのハンドトラッキングの汎用制御

Snapdragon SpacesのサイトでもMRTK3でハンドトラッキングを利用する際に「Microsoft Mixed Reality OpenXR Plug-in」を使っているのは2点目の機能を利用するためです。
ただ、このハンドトラッキングの機能はすでに非推奨となっており互換性のために残されている機能となっています。実際Microsoft Mixed Reality OpenXR Plug-in V1.8.0で一度この機能が削除されています。その後影響度の関係で復活させているという経緯もあります。
長い間、MRTK3ではこの問題に対して対応策がなかったのですが最近状況が変わりました。MRTK3でXRHandsがサポートされたことです。XRHandsはUnityが提供するOpenXR対応のハンドトラッキング用部品の1つです。MRTK3もこの機能を利用することができるようになりました。この結果、Snapdragon Spaces対応デバイスでMRTK3を利用する場合、「Microsoft Mixed Reality OpenXR Plug-in」は不要になりました。

ハンドトラッキングを使いたい場合は何を選択するか

Snapdragon Spaces上でハンドトラッキングを利用する場合にどうするべきかという話ですが、何を使って開発するかで選択することになります。

  1. QCHT APIを使わずにUnity(XRHands)のみで開発
  2. Snapdragon SpacesのQCHT APIを利用して開発
  3. MTRK3等ハンドトラッキング制御機能を持つライブラリを使用して開発

OpenXRのみで開発するというパターンは少ないと思うので、実際にはQCHT APIを使った開発を行うか、MRTK3等のライブラリを使うことになると思います。QCHT APIとMRTK3を同時使う機会は少ないと思います。基本的なハンドトラッキング系の機能はMRTK3とQCHT APIは重複しています。同時利用は、独自ジェスチャー等QCHT APIが必要でかつ、MRTK3と組合わせたい場合に限られれると思います。

Snapdragon Space でMRTK3のハンドトラッキングを利用する手順(改訂版)

最後に、Snapdragon SpacesでMRTK3でのハンドトラッキングを使う際の設定について紹介します。

開発環境

開発環境は以下の通りです。

  • Unity 2022.3.36f1
  • Mixed Reality Feature Tool
  • Snapdragon Spaces V1.0.1
  • Mixed Reality Toolkit 3
  • MRTK Core Definitions V3.2.2
  • MRTK Input V3.2.1
  • MRTK Spatial Manipulation V3.3.1
  • MRTK Standard Assets V3.2.0
  • MRTK UX Components V3.3.0
  • MRTK UX Core Scripts V3.2.2

Mixed Reality Feature ToolはMRTK3をセットアップするために使用します。今回の構成はボタン等のUX部品とハンドトラッキング、オブジェクトの操作に関するライブラリを追加しています。

ハンドトラッキング機能の設定まで

手順としては最初にSnapdragon Spaces SDKのセットアップをします。その後、MRTK3を導入します。Snapdragon Spaces SDK V1.0.1のセットアップは以下の記事を参考にしてください。

https://zenn.dev/miyaura/articles/snapdragonspaces-d43bffb5b60654

以降の作業はこの手順で作ったプロジェクトを変更していく形で進めていきます。

1.MRTK3のライブラリの導入

まずは、一度Unityプロジェクトを閉じます。その後Mixed Reality Feature Toolを起動します。
最初に先ほど作ったUnityプロジェクトフォルダを選択し、[Discover Features]を押して次へ進みます。

インポートできるUnityパッケージの一覧が表示されるので必要なものをチェックします。今回はMRTK3のノードの中にあるライブラリをチェックします。必要なライブラリは開発環境に書かれているものを選択してください。選択が終わったら[Get Features]を押して次へ進みます。

依存関係の検証が行われます。不測のライブラリは自動的に補完されるので全てチェックをいれて[Import]を押します。

確認画面が表示されます。修正後のmanifest.jsonとダウンロードされるパッケージが表示されます。[Approve]を押して設定を反映しアプリを閉じます。

2. ハンドトラッキングの有効化

先にOpenXRの設定を修正しMRTK3でハンドトラッキングを利用できるように修正します。[Edit]-[Project Settings...]-[XR Plug-in Management]-[OpenXR]を選択し、有効化する機能を選択する画面を表示します。Androidタブが選択されていることを確認し、一覧の中にあるHand Tracking Subsystemにチェックを入れます。合わせて、Enabled Interaction Profilesの設定を空にします。この設定を行っておかないと両手ハンドトラッキングができません。

最後にMRTK3の設定を行います。[Edit]-[Project Settings...]-[MRTK3]を選択します。Androidタブが選択されている状態で[Assign MRTK Defualt]ボタンを押してプロファイルを設定し、HandsSubsystemsの中にある「Subsystem for Unity Hands API」にチェックを入れておきます。

これでSnapdragon Spaces SDK + MRTK3のハンドトラッキングを利用することが可能です。

3.MRTK3の実装

実装についてはハンドトラッキング操作できるCubeと位置を戻すためのボタンを追加したシンプルなものを作成します。

3.1.Snapdragon Spaces SDk導入後の初期シーンをMRTK3用に変更する

最初にSnapdragon Spacesのシーンを開きます。次にXR Origin(XR RIg)とXR Interaction Managerを削除しMRTK XR Rigに変更します。

MRTK XR Rig はプロジェクトパネルの検索ボックスで絞込みするとすぐに見つかります。検索対象は[in Packages]にします。

3.2.ハンドトラッキング操作可能なCubeを作成する

次にハンドトラッキングを検証するためにオブジェクトを作成します。HierarchyにCubeを追加し、Posision(0,0,4),Scale(0.5,0.5,0.5)を設定します。加えて、[Object Manipulator]を追加します。このコンポーネントはMRTK3の機能で追加されたオブジェクトを操作可能(移動、回転、サイズ変更)にするためのコンポーネントです。Object Manipulatorの設定は特にしません。

3.3.Buttonを追加し押下してCubeの色を変える

次に動作検証用にButtonを追加します。適当なMaterialを作成し、Buttonが押されたらCubeの色を一度だけ変更するように実装します。
手順は以下の通りです。

  1. HierarchyにCanvasを追加
  2. CanvasのRender ModeをWorld Spaceに変更
  3. CanvasのPositionを(0,0,0)に変更
  4. Canvasの下にSimpleActionButtonを追加
  5. SimpleActionButtonのPositionを(-1.5,0,4),Scaleを(0.05,0.05,0.05)に変更
  6. SimpleActionButton下のContentのテキストをClick Meに変更
  7. SompleActionButtonのOnClickイベントでCubeのMaterialを変更する実装を入れる

3.4.実行してみる

後は通常通りビルドを実施して、デバイスにインストールします。その後実行すると両手ハンドトラッキングが利用可能です。

Discussion