UnityのAndroid XR向けパッケージを使ったコンテンツを開発の仕方を確認する(Galaxy XR)
Android XRは幾つか開発手段があります。今回はUnityで
Galaxy XRが登場しようやく実機を使ったAndroid XRでの開発が可能になりました。SDK等も先日の発表(youtube)の中でいくつかアップデートが入っています。大きなところではグラス向けの機能ですね。当初からXRヘッドセット向けの整備を先に進めているようで今回の発表でヘッドセット、グラス(2種)用のSDKが使えるようになっています。
開発方法も幾つか提示されています。
- Jetpack XR SDK
- Unity
- OpenXR
- Godot
- Unreal Engine
- WebXR
詳細は公式サイトが参考になります。
今回はUnityでの開発を取り上げてみます。UnityではAndroid XR用のパッケージが提供されており、それを活用することでAndroid XRの機能に特化したコンテンツ開発が可能になります。
開発手順そのものは公式サイトにも書かれているので参考になりますよ。
現時点では2種類のパッケージが提供されている。
UnityでのAndroid XR開発に利用できるパッケージは2種類提供されています。Android XRの使いたい機能を元に選定する形でいずれか一方でも動作するように作られています。
-
Unity OpenXR Android XR
Android XRの大部分のサポートを提供し、AR Foundationプロジェクトでのデバイス対応を実現します。 -
Android XR Extensions for Unity
Unity OpenXR Android XR パッケージを補完するもので、没入感のあるエクスペリエンスの構築に役立つ追加機能が含まれています。ほとんどの機能が試験的な機能でより便利な機能が含まれています。例えば、顔のトラッキング等は拡張機能の方が計測部位が多い等です。
開発環境
今回の開発環境は以下の通りです。
- Unity 6.0000.59f1(公式6.0000.58f2以降)
- Unity OpenXR Android XR 1.1.0
- Android XR Extensions for Unity 1.2.0
- API Level 34(Galaxy XRはAndroid 14ベース)
Unity プロジェクトの環境
ポイントになりそうな部分だけ整理しておきます。興味のある方は公式サイトをおとずれてください。
- Graphics API:Vulkan
- URP
- HDR(in UniversalRenderPipelineAsset):無効
- post processing(in UniversalRenderData):無効
- 最小 Android API Level : 24
- Application Entry Point(Edit > Project Settings > Player > Other Settings)
- GameActivity : On
- Activity : Off
- Pop-up Window(Edit > Project Settings > Player > Resolution and Presentation)
- Resizeable Activity : enable
パッケージのインポート
- Unity OpenXR Android XR
- Unity Registryからインポート
- Android XR Extensions for Unity
- Git URLからインポート
- URL : https://github.com/android/android-xr-unity-package.git
最小構成
お約束のCubeを空間に出すだけの手順は以下の通りです。このほかに先ほど説明したプロジェクトの環境設定等を行った上でデプロイします。
- 空のシーン(URP)を作成
- Main Cameraを削除
- XR Origin (VR)を追加
- CameraのEnvironmentのBackgroundをsolid:黒(0,0,0,0)に設定
- position(0,0,2)にCubeを配置
- XR Plug-in Managementの設定
- OpenXRの以下をチェック
- Android XR(Extentions): Session management
- Composition Layers Support
- Environment Blend Mode
- Forveated Rendering
- OpenXRの以下をチェック
- デプロイ
Android XRのサンプル
Android XR Extensions for Unityにはサンプルがある。
- Body Tracking
- Composition Layer Passthrough
- Environment Blend Mode
- Face Tracking
- Foveation
- Hand Mesh
- Image Tracking
- Object Tracking
- Scene Meshing
- Unbounded Reference Space
OpenXRの設定は各サンプル内のReadMe.mdに記載されています。
Body Tracking
ボディトラッキングのサンプルです。全身の関節の動きを見たい場合は「BodyPrefab」をサンプルシーンに追加しておく必要があります。サンプルを動作させると上半身の動きをトラッキングできるように見えます。現在は下半身は特に動きはありません。
ボディトラッキングは実行時に権限利用を宣言する必要があります。AndroidXRではAndroidXRPermissionUtilコンポーネントを使用します。任意のGameObjectでこのコンポーネントと追加し、[Android XR Permissions]にBody Trackingを追加します。
Composition Layer Passthrough
空間の一部をパススルーするComposition Layer Passthrough機能です。
Environmen Blend Mode
いわゆるパススルー機能です。Galaxy XRではOpaqueとAlpha Blendに対応しています。Project Settingsの XR Plug-in Management - OpenXR - Environmen Blend Modeの詳細設定から変更できます。
Face Tracking
Face Tracking機能です。この機能についてはUnity OpenXR Android XR、Extention両方で提供されています。機能的にはExtensionの方がより多く部位の情報を取得できるようになっています。
ボディトラッキング同様、AndroidXRPermissionUtilコンポーネントでFace Trackingの権限設定を行います。
Foveation
注視点を中心として、周辺視野の解像度を落とすことで全体的なパフォーマンスを向上する機能です。この機能もOpenXR Android XR、Extention両方で提供されています。違いは注視点を何にするかという話で、アイトラッキングによる注視点、ヘッドゲイズによる注視点の2種類が選択可能です。
Hand Mesh
ハンドトラッキング機能です。サンプルではハンドメッシュを表示しています。ハンドトラッキングもボディトラッキング同様、AndroidXRPermissionUtilコンポーネントでHand Trackingの権限設定を行います。
Image Tracking
画像やQRコードをトラッキングする機能です。あらかじめ実装としてトラッキングする画像やQRコードをリストに登録しておきます。サンプルではリストの中の画像やQRコードと照合し一致した地点にオブジェクトを表示しています。サンプル動画はQRコードのみ実施しているのですが、画像の方は私の設定が間違っているのかうまく動作しませんでした。
Image Tracking使う場合は権限の設定が必要です。AndroidXRPermissionUtilコンポーネントでScene Understanding Coarseの権限設定を行います。
Object Tracking
オブジェクトトラッキングです。
Object Tracking使う場合は権限の設定が必要です。AndroidXRPermissionUtilコンポーネントでScene Understanding Coarseの権限設定を行います。
Scene Meshing
空間メッシュの機能です。認識した領域を可視化して表示するサンプルになります。
Unbounded Reference Space
Unbounded Reference Space : OFF
Unbounded Reference Space : ON
コンテンツを現実空間側に固定する機能のようです。この機能を有効にすると起動したときの原点位置と向きが現実空間に固定されます。これによりGalaxy XR側を操作し原点位置を向きをリセットしても、コンテンツの原点位置や軸の回転が変更されません。
逆の機能機能を切った状態で作ったアプリについては、センター調整を行うとコンテンツの原点と向きも調整の行った位置と方向に調整されます。
まとめ
今回はAndroid XR向けのコンテンツ開発をUnityで行う最小限の実装と、Android XR Extensions for Unityのサンプルの動作について整理しました。XRコンテンツ開発に必要な機能はそろっていると思います。また、ボディトラッキングが可能であったり、フェイストラッキンはかなり細かく情報を取ることができるようで様々なコンテンツ開発が可能になるのではないでしょうか。
引続きAndroid XRの開発については調査を進めていきたいと思います。
Discussion