Snapdragon Spaces SDK V1.0.0(V1.0.1) with MRTK3 - ARグラス向け機能検証用デモアプリ解説
ARグラス向けの複数機能を含むデモ用アプリを作成しました。
Snapdragon Spaces向けのデバイスとして最近はいくつかのデバイスに触れることができます。個人的にもLenovo ThinkReality A3, Lenovo VRX, QONOQ MiRZA を所有しているのですが、各デバイスの特性やSDKの機能検証のためにアプリが欲しくなり作成しました。Snapdragon Spacesの動作検証用として整備しているもので現状はARグラス向けのみ対応しています。
コンテンツとしては以下のようなアプリになります。
UnityプロジェクトなどはGithubで公開しています。
本記事はデモ用に作ったこのサンプル機能概要と実装について紹介したいと思います。
デモサンプルアプリの概要
デモサンプルアプリは、ARグラスで利用するSnapdragon Spacesの機能検証を目的に作成したアプリです。Dual Render Fusionをベースとしているためスマホ単体のアプリとしても動作します。
スマホ上の機能(コントローラ)
スマホは情報表示とコントローラを兼ねています。コントローラはよくあるスマホゲームのタッチスクリーン上でのスティック操作になります。スマホ上で表示されている情報のほとんどはARグラス側には表示されません。ARグラス側は鳥(のような)キャラクタのみが表示されます。
- キャラクタ用コントローラスティック
- カメラ視点操作用スティック
- ジャンプボタン
- 設定の表示/非表示
設定
スマホ画面上の歯車アイコンをタップすると設定を開くことができます。設定については永続化されます。
- OpenXR系の設定
Snapdragon Spaces SDKの機能の1つ[Dynamic OpenXR Loader]の設定をアプリ上で行えます。[Auto Srat On Display Connect]をオンにすると、ARグラスをつなぐと自動的にOpenXRが有効になりARグラス側にコンテンツが表示されます。オフの場合は、その下部にある[Start][Stop]によって手動で操作することが可能です。
- Hand Tracking設定
ハンドトラッキングの有効/無効を設定します。左右それぞれ変更可能です。ハンドトラッキングはSnapdragon Spacesの機能ではなくMRTK3を経由してUnityのXRHandsを利用しています。
- 各種デバッグ情報の表示
Dynamic OpenXR LoaderによるARグラスの状態、スマホの解像度、スマホカメラのTransform等の情報表示が可能です。
アプリの動作
アプリケーションは大きく2つの動きをします。1つはスマホ単体のアプリとしての動作と、ARグラスをつないでARコンテンツとして体験する場合の2つです。
- スマホアプリとしての動作
キャラクタをスティック操作で浮島上を歩かせることができます。Dual Render Fusionの機能により普通のスマホアプリとして動作するフェーズです。
- ARアプリとしての動作
ARグラスを接続し、Dynamic OpenXR Loaderを利用してOpenXRを開始状態にするとARコンテンツとして起動します。Spatial Mesh機能により現実空間にキャラクターが干渉するように作っています。つまり床や机の上をキャラクターが移動できるというコンテンツです。操作はスマホのスティックコントローラで行います。また、ハンドトラッキング機能を有効にしている場合はキャラクタを移動させることも可能です。
スマホの画面には空間認識したメッシュの情報を可視化して表示します。合わせてARグラス視点の映像も表示しています。
実装済みSnapdragon Spaces機能
このコンテンツでは主に以下のSnapdragon Spacesの機能を利用しています。
- Dual Render Fusion
- Spatial Meshing
- Camera Frame Access
- Dynamic OpenXR Loader
実装解説
Githubに公開しているUnityプロジェクトについて簡単に解説します。実装方法の詳細については随時必要に応じて追加予定です。
開発環境
- Unity 2022.3.36f1
- Snapdragon Spaces SDk V1.0.1
- Mixed Reality Toolkit 3
- org.mixedrealitytoolkit.core: 3.2.2
- org.mixedrealitytoolkit.input: 3.2.2
- org.mixedrealitytoolkit.spatialmanipulation: 3.3.1
- org.mixedrealitytoolkit.standardassets: 3.2.0
- org.mixedrealitytoolkit.uxcomponents: 3.3.0
- org.mixedrealitytoolkit.uxcore: 3.2.2
- MRTK Graphics Tools 0.7.1
Unityプロジェクト
以下がサンプルのUnityプロジェクトの構成になっています。Snapdragon Spacesの機能を制御するためにいくつか実装や部品を構築しています。
- CameraFrameAccesses
ARグラスのカメラ映像をRawImageとして書き出します。この実装はSnapdragon SpacesのCamera Frame Accessのサンプルとほぼ同じ実装です。 - Controllers
スマホ上のスクリーンコントローラの部品群です。これらの機能はXRIをベースに構築しています。定義可能なアクション定義については[Canvas Controller Input Actions]で行っています。 - SpatialMapping
空間メッシュに関する部品です。ARMeshManagerを使っているだけなのでこの中にはメッシュとして張り付けるオブジェクトをPrefabで定義しています。
シーン
シーンについては以下通りです。今回のサンプルはMRTK3をUIフレームワークとして利用しています。純粋なSnapdragon Spacesとは少し異なる面があります。
1. MRTK XR Rig For Snapdragon Spaces
MRTK3で提供されるXR Rigです。基本的は機能はXRIのXR Originと同じです。いくつかSnapdragon Spaces用にカスタマイズしています。1つは空間認識の機能を利用する為にARMeshManagerをCameraOffsetオブジェクト配下に追加しています。また、ハンドトラッキングとスマホのタッチスクリーンを同時に使うためにCanvasProxyInteractorをカスタマイズしています。
2. PlayArea
ARとスマホ両方で表示されるコンテンツの表示に関するオブジェクトです。今回のコンテンツはキャラクターと床のみ作成しています。
3. Features
コンテンツやSnapdragon Spacesに関する機能群です。Snapdragon Spaces以外の機能としては、メニュー制御、AR側の映像等を作っています。
4. HostView
スマホの画面のみに表示するオブジェクトをまとめています。今回はDual Render Fusionによってスマホ画面にコントローラや各種情報を表示しています。ほとんどの情報はUGUIで作成しScreen Overlayを利用しています。
最後に
今回はSnapdragon Spacesの検証用に作ったデモアプリの紹介でした。デモアプリの内容や解説については引続き追加していきたいと思います。
Discussion