はじめに
思いっきり遅刻しているんですが昨日(12/23)は私が担当のHoloLens アドヴェントカレンダー
今日のネタは XRKaigi 2023の中のネタから
Unityの高橋 忍さんのセッションの中でも紹介があったMR Templateを使ってHoloLens 2のデプロイしてみます。
https://www.xrkaigi.com/pages/session_detail?session_id=XRKG2023-S-023
Mixed Reailty Templateってなに?
Unity 2022から追加されているテンプレートで以下の機能を利用して「Oculus/Meta Quest」「HoloLens 2」「Magic Leap 2」のアプリ開発のベースを構築されています。Mixed Reailtyが示す通りパススルーや空間認識といった機能が最初から入ってる便利なテンプレートです。
使っている機能は以下のようなもの
- OpenXR
- AR Foundation
- XR Interaction Toolkit
OpenXRやAR Foundationでできる空間認識や入力系をサポートしていて、特に大きな変更なくMRデバイスでの対応が可能なテンプレートになっています。
これらは英語ですが、「Mixed Reality Template Quick Start Guide」に整理されています。今回はこれをHoloLens 2にそのままビルド&配置できるかやってみます。
開発環境
開発環境は以下の通りです。
- Unity 2022.3.16f1
- Universal Windows Platform Build Support
- Windows Build Support (IL2CPP)
- Visual Studio 2022
- Mixed Reality Feature Tool
個別にインポートが必要なパッケージ
- Microsoft Mixed Reality OpenXR Plugin V1.10.0
環境構築
MR Templateは基本的にそのままほぼ完成済みのサンプルがあるのでこれをそのままビルドします。
プロジェクトの作成
Unity 2022.3からMRテンプレートでプロジェクトを作成します。Unity Hubから新しいプロジェクトを作成します。この時にバージョンをUnity 2022.3.7f1を選択するとテンプレートが表示されます。この中に[Mixed Reality]がリストにあるのでこれを選択します。最初はテンプレートのダウンロードが必要になります。
一旦プロジェクトを作成したらUnity Editorを閉じてください。
不足のパッケージを追加する。
Mixed Reality テンプレートはサンプルシーンで基本的な実装が行われているサンプルになっています。
ただし、デバイスによってはパッケージなどは個別に入れる必要があります。Hololens 2にかんしてはHoloLens 2用のOpenXR用のプラグインの導入が必要になります。これはMixed Reailty Feature Toolから行います。
もしMixed Reailty Feature Toolを持っていない場合はMicrosoft 公式サイトからダウンロードできます。
アプリを起動して先ほど作ったUnityプロジェクトを選択し[Platform Support]-[Mixed Reality OpenXR Plugin]を選択します。バージョンは最新で問題ありません。
プロジェクトの設定を行う
Mixed Reailty OpenXR Pluginを導入したらプロジェクト設定を行っていきます。
まずPlatformをUniversal Windows Platformに変更します。
変更したら、メニューから[Edit]-[Project Settings]を選択し、プロジェクト設定を開きます。
プロジェクト設定から[XR Plug-in Management]を選択します。Build PlatformをUWPに変更しているとUWPタブが選択された状態になっています。Mixed Reailty OpenXR Pluginをインポートしていれば[Microsoft HoloLens feature Group]が選択可能になっているのでそれをチェックします。
チェックするとOpenXRの横に警告が表示されるので、[XR Plug-in Management]-[Project Validation]を選択し[Fix All]ボタンを押して必要な設定変更を反映させてください。
次にOpenXRの設定を行います。[XR Plug-in Management]-[OpenXR]で以下の設定を追加で行います。
- Depth Submission ModeをDepth 16Bit
- Microsoft HoloLensにチェックがある
- Hand Trackingにチェックがない
- Motion Controller Modelにチェックがない
これで設定完了です。
ビルドを行う。
最近のHoloLensのビルドはUnity上でUWPパッケージを直接デプロイして実行することができます。この方法を利用するためには以下のようにBuild SettingsでHoloLensのDevice Portalに関する設定を入力します。
もしHoloLensでDevice Portalを使う設定を行っていない場合は公式サイトのWindows デバイス ポータルを使用するを参照してください。
- Architectureを[ARM 64-bit]
- Build and Run on を[Remote Device(via Device Portal)]
- Build Configurationを[Release]
- Device Portal Addressを[https://(HoloLensのローカルIPアドレス)]
- Device Portal Usernameを[設定したユーザ名]
- Device Portal Passwordを[設定したパスワード]
実行
平面認識の機能がついているので、平面をタップすると何かがでてくる仕様です。
所感
動きます。そのままだと正直文字通りというレベルであまりHoloLens 2用とするのは難しいです。理由はいくつかあります。
URPのプロジェクトだから
現状HoloLens 2のアプリを作る際にはUnity 2022系のURPでパフォーマンス劣化します。この問題は既知の問題として取り上げられてはいるのですが発生日が2023/1なんですよね。。。
なので対処方法としては、このプロジェクトをURPから変更して使う必要があります。
ハンドトラッキングの動きも怪しい
HoloLensのハンドトラッキング(正確には全部のデバイスのハンドトラッキング)はこのサンプルについてはHand Tracking Subsystemを利用しています。このサブシステムはOpenXRで定義されているHand Tracking拡張機能をサポートする機能を提供しています。手の認識、などはちゃんとしているのですが、とりあえず動かした場合うまく動作しない部分があります。
- 手のひらを返してもメニューが表示されない
- ハンドレイが正しく動いていない。
おそらくハンドトラッキング周りはMixed Reality OpenXR Pluginのハンドトラッキングを使う方が安定すると思います。
この辺りもどうできるのか調査したいと思います。