🗒️

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

詳細は公式サイトが参考になります。
https://developer.android.com/develop/xr/tools-technologies?hl=ja

今回はUnityでの開発を取り上げてみます。UnityではAndroid XR用のパッケージが提供されており、それを活用することでAndroid XRの機能に特化したコンテンツ開発が可能になります。
開発手順そのものは公式サイトにも書かれているので参考になりますよ。

https://developer.android.com/develop/xr/unity?hl=ja

現時点では2種類のパッケージが提供されている。

UnityでのAndroid XR開発に利用できるパッケージは2種類提供されています。Android XRの使いたい機能を元に選定する形でいずれか一方でも動作するように作られています。

  • Unity OpenXR Android XR
    Android XRの大部分のサポートを提供し、AR Foundationプロジェクトでのデバイス対応を実現します。

  • Android XR Extensions for Unity
    Unity OpenXR Android XR パッケージを補完するもので、没入感のあるエクスペリエンスの構築に役立つ追加機能が含まれています。ほとんどの機能が試験的な機能でより便利な機能が含まれています。例えば、顔のトラッキング等は拡張機能の方が計測部位が多い等です。

https://github.com/android/android-xr-unity-package

開発環境

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

  • 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

パッケージのインポート

最小構成

お約束のCubeを空間に出すだけの手順は以下の通りです。このほかに先ほど説明したプロジェクトの環境設定等を行った上でデプロイします。

  1. 空のシーン(URP)を作成
  2. Main Cameraを削除
  3. XR Origin (VR)を追加
  4. CameraのEnvironmentのBackgroundをsolid:黒(0,0,0,0)に設定
  5. position(0,0,2)にCubeを配置
  6. XR Plug-in Managementの設定
    1. OpenXRの以下をチェック
      • Android XR(Extentions): Session management
      • Composition Layers Support
      • Environment Blend Mode
      • Forveated Rendering
  7. デプロイ

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

https://youtu.be/rc7ZZfIiWRM

ボディトラッキングのサンプルです。全身の関節の動きを見たい場合は「BodyPrefab」をサンプルシーンに追加しておく必要があります。サンプルを動作させると上半身の動きをトラッキングできるように見えます。現在は下半身は特に動きはありません。
ボディトラッキングは実行時に権限利用を宣言する必要があります。AndroidXRではAndroidXRPermissionUtilコンポーネントを使用します。任意のGameObjectでこのコンポーネントと追加し、[Android XR Permissions]にBody Trackingを追加します。

Composition Layer Passthrough

https://youtu.be/UAAQzBLAdD0

空間の一部をパススルーするComposition Layer Passthrough機能です。

Environmen Blend Mode

https://youtu.be/MBUfGcW34Lk

いわゆるパススルー機能です。Galaxy XRではOpaqueとAlpha Blendに対応しています。Project Settingsの XR Plug-in Management - OpenXR - Environmen Blend Modeの詳細設定から変更できます。

Face Tracking

https://youtu.be/_T1wQu1uYao

Face Tracking機能です。この機能についてはUnity OpenXR Android XR、Extention両方で提供されています。機能的にはExtensionの方がより多く部位の情報を取得できるようになっています。
ボディトラッキング同様、AndroidXRPermissionUtilコンポーネントでFace Trackingの権限設定を行います。

Foveation

https://youtu.be/06YxN4iVPkk

注視点を中心として、周辺視野の解像度を落とすことで全体的なパフォーマンスを向上する機能です。この機能もOpenXR Android XR、Extention両方で提供されています。違いは注視点を何にするかという話で、アイトラッキングによる注視点ヘッドゲイズによる注視点の2種類が選択可能です。

Hand Mesh

https://youtu.be/t8ZmJQhh_3Q

ハンドトラッキング機能です。サンプルではハンドメッシュを表示しています。ハンドトラッキングもボディトラッキング同様、AndroidXRPermissionUtilコンポーネントでHand Trackingの権限設定を行います。

Image Tracking

https://youtu.be/pYjQpa-LZv4

画像やQRコードをトラッキングする機能です。あらかじめ実装としてトラッキングする画像やQRコードをリストに登録しておきます。サンプルではリストの中の画像やQRコードと照合し一致した地点にオブジェクトを表示しています。サンプル動画はQRコードのみ実施しているのですが、画像の方は私の設定が間違っているのかうまく動作しませんでした。
Image Tracking使う場合は権限の設定が必要です。AndroidXRPermissionUtilコンポーネントでScene Understanding Coarseの権限設定を行います。

Object Tracking

https://youtu.be/e7jWcVKA2_Y

オブジェクトトラッキングです。
Object Tracking使う場合は権限の設定が必要です。AndroidXRPermissionUtilコンポーネントでScene Understanding Coarseの権限設定を行います。

Scene Meshing

https://youtu.be/H1IlZ31CKGQ

空間メッシュの機能です。認識した領域を可視化して表示するサンプルになります。

Unbounded Reference Space


Unbounded Reference Space : OFF
https://youtu.be/xmsHL7iRN6w


Unbounded Reference Space : ON
https://youtu.be/HsSwTmawNuM


コンテンツを現実空間側に固定する機能のようです。この機能を有効にすると起動したときの原点位置と向きが現実空間に固定されます。これによりGalaxy XR側を操作し原点位置を向きをリセットしても、コンテンツの原点位置や軸の回転が変更されません。
逆の機能機能を切った状態で作ったアプリについては、センター調整を行うとコンテンツの原点と向きも調整の行った位置と方向に調整されます。

まとめ

今回はAndroid XR向けのコンテンツ開発をUnityで行う最小限の実装と、Android XR Extensions for Unityのサンプルの動作について整理しました。XRコンテンツ開発に必要な機能はそろっていると思います。また、ボディトラッキングが可能であったり、フェイストラッキンはかなり細かく情報を取ることができるようで様々なコンテンツ開発が可能になるのではないでしょうか。
引続きAndroid XRの開発については調査を進めていきたいと思います。

Discussion