MRTK3の空間認識の技術調査

目次

はじめに

こんにちは。HoloLensチームの野元です。
本記事では、MRTK3で空間認識を行い、空間メッシュのデータをハンドリングする方法について調査・検証した結果を紹介します。

調査

MRTKv2とMRTK3ではどのような違いがあるのか調査した結果が次の通りです。

MRTKv2

Microsoft.MixedReality.Toolkit.SpatialAwareness.IMixedRealitySpatialAwarenessObservationHandlerを実装すれば、空間のメッシュデータをハンドリングできます。
詳しいやり方については、こちらの過去記事で説明していますので、興味のある方はご覧ください。

MRTK3

  • 記事執筆時点では、空間メッシュ視覚エフェクトの項目で少し触れられている程度なので詳細は不明ですが、Packages\MRTK Environment Early Preview\Visualizers\SpatialMesh配下に関連するクラスがあります。
  • MS公式のMRTK3のUnityサンプルプロジェクトのSpatialMappingExampleシーンでは、ARMeshManagerによる空間の可視化が行われてます。
  • MRTK3とAR FoundationともにXRMeshSubsystemが使用されているため、XRMeshSubsystem.Start()で空間認識を開始したり、XRMeshSubsystem.Stop()で空間認識の停止したりできそうです。

検証

検証環境

  • Windows 11
  • Unity 2021.3.7f1
  • MRTK3 pre.9

空間メッシュのビジュアライズ

  1. UnityにMRTK3を導入します。
  2. MRTK XR RigのGameObject配下に任意の名前(今回はARMeshManagerと命名)で空のGameObjectを生成し、ARMeshManagerをAdd Componentします。
  3. 任意の名前(今回はSpatialMeshと命名)で空のGameObjectを生成し、Mesh FilterMesh RendererMesh ColliderをAdd Componentし、Mesh RendererMaterialsにマテリアルをアタッチしたあとプレファブ化します。
  4. ARMeshManagerMesh Prefabにプレファブ化したGameObjectをアタッチします。
  5. アプリケーションをビルド・デプロイし、HoloLens 2で確認すると空間メッシュのビジュアライズができていることが確認できます。

空間メッシュデータのハンドリング

  • MRTK3を使ったパターン
    • Microsoft.MixedReality.Toolkit.Environment.BaseSpatialMeshVisualizerではメッシュの変更を検知するイベントが定義されていないため、メッシュデータのハンドリングは現時点では厳しそうです。
  • AR Foundationを使ったパターン

まとめ

※記事執筆時点での情報になります

  • MRTK3では空間メッシュデータのハンドリングにはまだ対応していません。
    • Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizerを使えばメッシュの可視化ができると思われますが、Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizerConfigのScriptableObjectが有効化されていないため使用できません
    • また、Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizer.Meshesからメッシュデータへのアクセスは可能ですが、メッシュの状態が変更されたこと(追加・更新・削除)を通知するイベントが定義されていないため、これを使ってメッシュデータのハンドリングをすることは現実的ではなさそうです。
  • AR FoundationのARManagerを使用することで空間メッシュデータのハンドリングができます。(もしかしたら今後は空間メッシュデータのハンドリングはAR Foundationに委譲されるのかもしれません)
    • InspectorからARManagerコンポーネントのMesh Prefabにメッシュ可視化向けのGameObjectをアタッチすれば、空間メッシュの可視化ができます。
    • UnityEngine.XR.ARFoundation.ARManager.meshesChangedイベントを使えばメッシュデータの状態変更(追加・更新・削除)を検知することができるため、空間メッシュデータのハンドリングができます。
よかったらシェアしてください

この記事を書いた人

目次
閉じる