Snapdragon Spaces V0.9.0(Think Reality A3)向けMRTK3の開発環境と空シーンを構築する
2023/5時点での最新パッケージでのセットアップは以下の記事で公開しています。
Mixed Reality Toolkit 3が現在Public Preview版で公開中
Mixed Reality ToolkitはMicrosoftの公式OSSライブラリでXRコンテンツをクロスプラットフォームで開発することが可能です。現在利用可能なバージョンはMRTK V2.8.2ですが、現在Public Preview版としてMRTK3が公開されており評価することが可能です。
MRTK3含めた詳細については以前記事として整理したので興味がある方はそちらも参照ください。
今回はMRTK3を使うための開発環境とデバイス毎のデプロイ方法について紹介します。
Snapdragon Spaces(Think Reality A3)向けMRTK3環境
Snapdragon Spaces(Think Reality A3)向けにMRTK3を活用したコンテンツ開発に関する手順です。大まかな流れは以前書いたMeta Quest向けほぼ同じです。
Snapdragon SpacesでMRTK3を利用する手順は以下で公開されています。手順の中には以下の注意事項があるのでこの辺りを踏まえながらデプロイするまでを確認していきます。
基本的には上記手順に従って補足を入れながらデプロイをしてみたいと思います。
開発環境
今回は以下のバージョンで構成しています。
- Mixed Reality Feature Tool v1.0.2209.0 Preview(MRTK3セットアップ用)
- Unity Hub 3.3.0
- Unity 2020.3.38f1
- Android Build Support一式
- packages
* Snapdragon Spaces for Unity(0.9.0)- OpenXR Plugin
- Input System
- XR Management
- XR Interaction Toolkit
Snapdragon Spaces for Unityのダウンロード
Snapdragon Spaces for Unityはサイトからダウンロード可能です。
ダウンロードサイトへ行くとUnity向けとUnreal向けがダウンロードできます。Unity用のものをダウンロードしてください。
空プロジェクトの作成
Unity Hubを起動し、新しいプロジェクトを作成します。
設定値は以下の通りです。バージョンの設定に注意してください。
- Editor Version : 2020.3.38f1
- template : 3D
- Project name : 任意
- Location : 任意
空プロジェクトの作成が完了しUnity Editorが立ち上がったら一度終了します。
次にMixed Reality Feature Toolを使って最低限必要なパッケージを導入します。
Mixed Reality Feature ToolによるMRTK3の導入
一番初めにツールの環境設定の確認を行います。MRTK3は現在public Previewなので、これらのパッケージが扱えるようにツールの設定変更が必要です。まずはMixed Reality Feature Toolを起動し、歯車のアイコンから設定を開きます。
次に、設定タブ[Feature]を選択し、項目の中の[Show preview releases]にチェックがあることを確認します。チェックがされていれば、[OK]をクリックして設定を閉じます。
タイトルに戻ってStartボタンを押します。パッケージを設定するプロジェクトフォルダの選択する画面になりますので先ほど作った[空のUnityプロジェクト]を指定します。
次に、実際に導入するパッケージを選択してきます。今回は以下のパッケージを設定します。選択後、[Get Features]を押すとダウンロードが始まり依存関係のチェックが行われます。
- MRTK Input(3.0.0-pre.12)
- MRTK Standard Assets(3.0.0-pre.12)
- MRTK UX Conpoments(3.0.0-pre.12)
- MRTK UX Conpoments(Non-Canvas)(3.0.0-pre.12)
インポートする機能とその依存関係から追加で設定が必要なパッケージの候補が表示されます。必須の依存関係になっているので、すべてチェックされていることを確認してImportを押します。
最後に変更後のパッケージリスト(Packages/manifest.json)と今回インポートするパッケージのリストが表示されます。Approveを押して変更を確定しましょう。なお、Mixed Reality Feature Toolではこの操作を行うとPackages内に変更前のmanifest.jsonをバックアップするようになっています。万が一動作に不具合を感じた場合でも元に戻すことが可能です(逆にGithubなどを使っている場合はバックアップはゴミになるので注意してください)
問題がなければ次のような画面になるので終了します。これでMixed Reality Feature Toolでの設定は完了です。この時点でUnity Editorを開いたままにしていると自動的にインポートの作業が実施されます。
次にプロジェクトの初期設定を行っていきます。プロジェクトの初期設定としては以下の手順の実施が必要です。
プロジェクト初回起動時の注意点
Mixed Reality Feature Toolで必要なパッケージをインポートすると初回起動時にはいくつかのメッセージダイアログが表示されます。
まず最初にInput Sysytemについての警告が表示されます。Unityではネイティブデバイス用の古いInput Systemがデフォルトとなっています。MRTK3はUnityの新しい方のInput Systemを利用するようになっているため、プロジェクトの設定を変更するか確認を求められる形になります。
ここでは[Yes]を選択し次へ進めます。
一度Unity Editorが再起動され引き続きパッケージのインポートが進みます。そしてEditorが開くと次に以下のような警告が表示されます。
これはXRIに関係するもので、MRTK3内で利用しているXRIの一部が非推奨のメソッドを含んでいるという警告です。このメッセージはこの非推奨機能を自動的に修復を試みるかどうかの確認ダイアログになっています。MRTK3内の設定が勝手に書き換わるのはまずいので、ここでは[No Thanks]を選択します。すると、再度Unity Editorが再起動され、てパッケージの導入が完了します。
プロジェクトの設定
次のUnityプロジェクトをHoloLens用に設定していきます。まずは[File]-[Build Settings...]を選択し[Build Settings]を開きます。最低限必要な作業として、[Platform]を[Android]に変更し、[Switch Platform]ボタンを押してプラットフォームを変更します。
また、[Add Open Scenes]ボタンをおして現在開いている[SampleScene]を[Scenes In Build]に追加します。
Player設定
Meta Quest Pro用に[Project Settings]の[Player]タブの設定を見直します。
[Player]-[Resolution and Presentation]タブの[Android]が選択状態であることを確認して以下の設定を行います。
- [Orientation]-[Default Orientation]に[Landscape Left]を設定
次に、[Player]-[Other Settings]タブの[Android]が選択状態であることを確認して以下の設定を行います。
- [Rendering]-[Color Space]に[Linear]を設定
- [Rendering]-[Auto Graphics API]のチェックを外して[Graphics API]に[OpenGLES3]を設定。
- [Rendering]-[Multithreaded Rendering]をチェックをはずす
- [Identification]-[Minimum API Level]に[Android 10.0 (API level 29)]を設定
- [Identification]-[Target API Level]に[Automatic (highest installed)]を設定
- [Configuration]-[Install Location]に[Automatic]を設定
- [Configuration]-[Scripting Backend]に[IL2CPP]を設定
- [Configuration]-[Target Architectures]に[ARM64]を設定
必要パッケージのインポート
次に、Snapdragon Spaces for Unityのインポートを行います。
Snapdragon Spaces for Unityのインポート
ダウンロードしたファイルはサンプル含めたZipファイルになっています。まずはこのzipファイルを展開します。
D:.
│ NOTICE.txt
│ README.txt
│ SnapdragonSpacesServices_0_9_0.apk
│
├─Custom Controller Package
│ Controller_Android_Project_0_9_0.zip
│
└─Unity Package
│ ** SnapdragonSpaces_Package_0_9_0.tgz **
│ SnapdragonSpaces_Unity_Samples_0_9_0.apk
│
└─Hand Tracking
QCHT_Core_Package_3_2_5.tgz
QCHT_Interactions_Package_3_4_2.tgz
QCHT_Interaction_Samples_0_9_0.apk
インポートは[Window]-[Package Manager]を選択しPackage Managerウィンドウを開きます。左上の[+]ボタンを押して、[Add package from taball...]を選択し先ほど展開したZipの中にある[SnapdragonSpaces_Package_0_9_0.tgz]をインポートします。
インポート後は一度Editorを再起動します。
Snapdragon Spaces for Unityのサンプルのインポート(一部)
Snapdragon Spacesを利用するためには現段階ではController系を自分で用意する必要があります。このためこれに必要な情報をSamplesから取得します。[Windows]-[Package Manager]を選択し[Package Manager]を起動して[Snapdragon Spaces]を選択し、サンプルをインポートします。
OpenXRの設定(カスタムコントローラを使用)
[Edit]-[Project Settings]を開き[XR Plug-in Management]を選択します。タブがAndoroidになっていることを確認の上OpenXRを有効化します。サブ項目として[Snapdragon Spaces feature group]が追加されるのでここにもチェックをします。この際エラーが出ます。OpenXRはARM64にしか対応していないため、ビルド時の設定でArm64を対象にビルドする必要があります。
[Project Settings]-[Player]から変更可能ですが、さきほど使った[Project Validation]で修正することも可能です。
次に[XR Plug-in Management]-[OpenXR]を選択します。[Interaction Profile]については[Khronos Simple Controller Profile]を追加します。また、[OpenXR Feature Groups]の設定で[Snapdragon Spaces]がチェックされていることを確認してください。
MRTK3のプロファイルの設定
次にMRTK3のプロファイル設定を行います。この設定も先ほどのValidationツールを使用することでデフォルトのプロファイルが適用済みになりますが、Snapdragon Spacesと組み合わせる場合は、設定変更が必要です。
Adnroidタブの変更
まず空の[MRTK Profile]を作成します。[Project]タブで[Assets]を選択状態で右クリックを押し[Create]-[MRTK]-[MRTKProfile]を選択します。
次に[Edit]-[Project Settings...]を選択しウィンドウを開きます。[MRTK3]を選び、Android用のProfileとして先ほど作成した[Assets\MRTKProfile.asset]を設定します。変更は不要ですが、以下のチェックが外れていることを確認してください。
- MRTK Hands Aggregator Subsystem
- Subsystem for Hand Synthesis
Unity Edtitorでのデバック時のための設定
[Windows,Mac,Linux Settings(コンピュータのアイコン)]タブのMRTK3プロファイル設定しなければデバッグ実行時にInput Simulationが動作しないので注意
[Edit]-[Project Settings]を開き[MRTK3]を選択します。初期状態ではProfileの設定がないためエラーになっています。まずはprofile右のボタンから検索ウィンドウを開きデフォルトのprofileを設定しましょう。ウィンドウの検索結果に[MRTKProfile]が含まれていない場合はPackagesの中がフィルターで除外されているので、右の目玉アイコンをクリックして表示させてください。なお、デバッグ実行時にInput Simulationを利用する場合は[Windows,Mac,Linux Settings(コンピュータのアイコン)]タブの設定も必要です。
補足
なお、MRTKProfileやsubsystemのプロファイルはProjectタブの中で右クリックでメニューを表示し[Create]-[MRTK]-[MRTKProfile]を選択すると新規に作成することができます。
TextMesh Proのインポート
次にTextMesh Proのリソースをインポートします。MRTK3のテキストはTextMesh Proを利用しているためインポートが必要です。
なお、インポートせずにMRTK3のコンポーネントを使うとTextMesh Proを利用する段階で以下のようなダイアログが表示されてインポートを即されます。どちらにせよ必ず必要なのでインポートを忘れずに。
最後にMRTK3のコンポーネントをシーンに追加して、コンテンツ開発が可能な最小限の状態を構築します。
シーンの設定
次にSampleScene内を修正し、MRTK3が利用できるようにいくつかのコンポーネントを設定します。
シーンのカメラを削除
最初にシーンの中にあるMain Cameraを削除します。次の手順で行うprefabの中にカメラの設定などが含まれているため既存のMain Cameraが不要なためです。
MRTK XR Rigの追加とSnapdragon Spaces関連の設定変更
MRTK3ではカメラやコントローラ等をPrefabで提供しています。名前がMRTK XR Rigとなっていますが、これはUnity XR Interaction Toolkit(XRI)でも同じ実装方法です。XRIではXR Rigとなっています。Prefabは[Project]タブの検索項目に[MRTK XR Rig]と入力すると候補に出てきます。**この時、検索対象を[all]か[In Packages]のいずれかに設定して検索を行ってください。**検索結果に表示されたPrefabをHierarchyにコピーしてください。
展開すると以下のようにカメラ、コントローラ用のオブジェクトが設定されているのがわかります。
次にSnapdragon Spacesを利用するためのいくつかの設定を変更を行います。
最初にCamera関連の設定を変更します。先ほど追加した[MRTK XR Rig]配下のCameraオブジェクト([MRTK XR Rig]-[Camera Offset]-[Main Camera])を選択し[Inspector]タブからコンポーネントを変更します。
- TrackedPoseDriver コンポーネントの削除
- AR Camera Background コンポーネントの追加
- AR Pose Driver コンポーネントの追加
- パラメータは初期設定のままで問題ないです。
Snapdragon SpacesではMRTKが用意しているHand Controllerや Gaze Controllerが使えないので専用のものを用意します。まずは、既存の以下のオブジェクトのを不使用に設定します。
- MRTK RightHand Controller
- MRTK LeftHand Controller
- MRTK Gaze Controller
次に、必要なオブジェクトの設定を進めていきます。まずは、Snapdragon Spaces用のXRIの設定を行います。[Hierarchy]タブの中から[MRTK XR Rig]を選択します。[Inspector]タブ内に[MRTK XR Rig]に関するコンポーネントが表示されるので[Input Action Manager]の中の[Action Assets]に以下のActionsを追加します。この設定はSnapdragon Spaces用のActionリストになります。
- Samples/Snapdragon Spaces/0.9.0/Core Samples/Shared Assets/Input Actions
次に[Device Pointer]を追加します。[Device Pointer]はサンプルの中の以下の場所にprefabで用意されています。これをシーン直下に追加します。
追加後、該当のオブジェクトを選択し[Inspector]タブの中から[XR Interactor Line Visual]-[Line Width]を0.005に変更します。
Camera Offset関連の変更
Camera関連の設定を行います。現状MRTK3ではカメラのオフセット位置の調整を自分でする必要あります。HoloLens 2はデバイス基準で原点(0,0,0)となる仕様のためこの設定に合うように調整します。
[Hierarchy]内の[MRTK XR Rig]-[Camera Offset]を選択します。次にPositionを(0,0,0)に変更します。さらに[XR Origin]コンポーネント内の以下の2つのパラメータを変更します。
- Tracking Origin Mode : Device
- Camera Y Offset : 0
AR Sessionの追加
次にAR Sessionを追加します。[Hierarchy]タブで右クリックを押しポップアップメニューを表示し[XR]-[AR Session]を選択して[AR Session]を追加します。
- Attempt Updateにチェック
- Match Frame Rateにチェック
- Tracking Mode: Position and Rotation
Input Simulatorの追加
次にEditor上でデバッグする際のキーボード操作で入力をシミュレーションする機能を追加します。先ほどと同様に[Project]タブの検索項目に[MRTKInputSimulator]と入力しPrefabの候補を表示します。先ほどと同じようにHierarchyのコピーしてください。
以上で必要最小限のプロジェクトとシーンが構成されます。ここでEditor上でデバッグ実行を行い、左Shiftキーを押すといつもの手が出てくるようになります。
簡単なコンテンツの作成(おまけ)
次に簡単なコンテンツを追加していきます。MRTK3には依然と同様ButtonなどのUX部品が提供されているのでこれを利用してコンテンツを作ってみましょう。
まずは、先ほどと同様に[Project]タブの検索項目で[PressableButton_128x32mm_TextOnly]入力しHierarchyに追加します。positionは(0.1,0,1)に設定します。
Buttonのテキスト変更などはPublic Previewの段階では階層をたどってテキストTextMesh Proコンポーネントを直接変更する必要があります。簡単にButton等の文字列に変更しておきましょう。
次にボタンを押したときに反応がわかるようにテキストを追加します。[Project]タブからSlateを検索しHierarchyにコピーします。positionは(-0.2,0,1)に設定します。
そしてSlateの下にTextを追加します。[Rect Transform]の[Scale]を(0.01,0.01,0.01)、[Position]を(0,0,-0.01)に設定します。また[Font Size]を25、[Text]を"Button State"に変更します。
最後にボタンを押したらテキストが変わる実装を加えます。[Hierarchy]の中から[PressableButton_128x32mm_TextOnly]を選択します。[Inspector]タブから[PressableButton]コンポーネントの中の[On Clicked()]のイベントを追加します。
追加したイベントのオブジェクトに先ほど追加した[Text]を設定し、[Function]に[TextMesh Pro]-[string text]を選択します。値は"Button Clicked"にします。
デバッグ実行し、ボタンをクリックするとSlate内のテキストが変化します。
デプロイ
デバッグ実行で問題なく動作していたら、デプロイしてみましょう。Unityでビルドを実行しAPKを作成してインストールします。
まとめ
今回はSnapdragon Spacesを利用してLenovo Think Reality A3でMRTK3を利用するために必要な最低限の環境構築と空プロジェクトの作成方法を紹介しました。今回の手順ではスマホをコントローラに設定するパターンで構築しています。MRTK3もそうですがSnapdragon Spaces、Think Reality A3も
参考リンク
- Github - Mixed Reality Toolkit 3
- MTRK3ドキュメント
- MRTK3 Tutorial : "Zappy's Playground"
- Mixed Reality Dev Days 2022
- 再生リスト(Youtube)
-
Introducing MRTK3 – Shaping the future of the MR Developer Experience.
→過去のMRTKの取組みから振返り、MRTK3がどういったコンセプトで今回作られたのか -
Getting started with your first MRTK3 project
→MRTK3動かしてみようぜ -
MRTK3 Interaction building blocks
→MRTK3の入力系についての設計や構造 -
Building Rich UI for MR in MRTK3
→MRTK3の素敵なUIをどう構築しているか -
Working with Dynamic Data and Theming in MRTK3
→データバインディングとテーマ制御について -
Deploy Everywhere with OpenXR and MRTK3
→MRTK3のOpenXR対応で色々デバイスで動く話
Discussion