シーン理解オブザーバー - MRTK2

シーンの理解では、シーン エンティティのセマンティックな表現と、HoloLens 2 での幾何学的な外形が返されます (Hololens 第 1 世代はサポートされていません)。

以下に、このテクノロジの予想されるユース ケースをいくつか示します。

  • 一定の種類の最も近い表面 (壁や床など) にオブジェクトを配置する
  • プラットフォーム スタイルのゲームのためにナビゲーション メッシュを構築する
  • 物理エンジンから利用しやすいジオメトリを四角形として提供する
  • 類似したアルゴリズムを記述する必要をなくして、開発をスピードアップする

シーンの理解は、実験的機能として MRTK 2.6 に導入されています。 これは、WindowsSceneUnderstandingObserver という名前の空間オブザーバーとして MRTK に統合されています。 シーンの理解は、レガシ XR パイプラインと XR SDK パイプラインの両方 (MRTK 2.7 以降の OpenXR と Windows XR プラグインの両方) で動作します。 どちらの場合も、WindowsSceneUnderstandingObserver が使用されます。

Note

リモート処理での Scene Understanding の使用は、MRTK 2.7.3 以降でのみサポートされています。 OpenXR を使用するプロジェクトのみがサポートされています。 レガシ XR パイプラインまたは Windows XR プラグインを使用するプロジェクトはサポートされていません

オブザーバーの概要

要求時に WindowsSceneUnderstandingObserver からは、アプリケーションがその周囲を理解するのに役立つ属性が含まれる SpatialAwarenessSceneObject が返されます。 観察の頻度、返されるオブジェクトの種類 (壁や床など)、その他のオブザーバーの動作は、プロファイルを介したオブザーバーの構成によって決まります。 たとえば、オクルージョン マスクが必要な場合は、四角形を生成するようにオブザーバーを構成する必要があります。 観察されたシーンは、シリアル化されたファイルとして保存できます。このファイルを後で読み込み、エディターの再生モードでシーンを再作成できます。

セットアップ

重要

シーンの理解は、HoloLens 2 と Unity 2019.4 以降でのみサポートされています。

  1. ビルド設定ではプラットフォームが UWP に設定されていることを確認してください。
  2. Mixed Reality Feature Tool を使用して、シーンの理解パッケージを取得します。

シーンの理解の使用

シーンの理解を使い始める最も手早い方法は、サンプル シーンをよく調べることです。

シーンの理解のサンプル シーン

Unity では、プロジェクト エクスプローラーを使用して、Examples/Experimental/SceneUnderstanding/Scenes/SceneUnderstandingExample.unity にあるシーン ファイルを開き、[play] を押します。

重要

該当するのは MRTK 2.6.0 のみです - Mixed Reality Feature Tool を使用する場合や、そうせずに UPM を介してインポートする場合は、依存関係の問題のために、Experimental - SceneUnderstanding サンプルをインポートする前に Demos - SpatialAwareness サンプルをインポートしてください。 詳細については、こちらの GitHub イシューを参照してください。

このシーンによって実例が示される内容は以下のとおりです。

  • 観察されたシーン オブジェクトの、オブザーバー構成用のアプリケーション UI での視覚化
  • オブザーバーの設定を変更し、関連するイベントをリッスンする方法を示す DemoSceneUnderstandingController スクリプトの例
  • オフライン開発のための、シーン データのデバイスへの保存
  • エディターでの開発ワークフローをサポートするための、以前保存したシーン データ (.bytes ファイル) の読み込み

重要

既定では、オブザーバー の ShouldLoadFromFile プロパティは false に設定されています。 シリアル化されたサンプル ルームの視覚化を表示するには、下記のオブザーバー サービスの構成に関するセクションを参照し、エディターでプロパティを true に設定してください。

Note

サンプル シーンは、レガシ XR パイプラインに基づいています。 XR SDK パイプラインを使おうとしている場合は、それに応じてプロファイルを変更する必要があります。 提供されているシーンの理解空間認識システム プロファイル (DemoSceneUnderstandingSystemProfile) とシーンの理解オブザーバー プロファイル (DefaultSceneUnderstandingObserverProfileDemoSceneUnderstandingObserverProfile) は、どちらのパイプラインでも機能します。

Note

サンプル シーンを使用すると、初期化またはスレッドの実行順序が原因となり、特定の状況下で There is no active AsyncCoroutineRunner when an action is posted. 警告がログに記録されます。 AsyncCoroutineRunner コンポーネントが "デモ コントローラー" の GameObject にアタッチされ、シーン内でそのコンポーネントと GameObject が有効またはアクティブな状態に留まっている場合 (既定の場合) は、警告を無視しても問題ありません。 ただし、シーンの理解を使用して新しいシーンを作成するときには、必ずルートに空の GameObject を作成し、それに AsyncCoroutineRunner スクリプトをアタッチしてください。そうしないと、シーンの理解が正しく機能しない可能性があります。

オブザーバー サービスの構成

"MixedRealityToolkit" ゲーム オブジェクトを選択し、インスペクターについて確認します。

scene understanding location in hierarchy

MRTK location in inspector

これらのオプションを使用して WindowsSceneUnderstandingObserver を構成できます。

サンプル スクリプト

サンプル スクリプトの DemoSceneUnderstandingController.cs では、シーンの理解サービスを操作する際の主な概念が示されます。

  • シーンの理解イベントのサブスクライブ
  • シーンの理解イベントの処理
  • 実行時の WindowsSceneUnderstandingObserver の構成

シーン内のパネルにあるトグルを操作すると、このサンプル スクリプトのパブリック関数が呼び出され、シーンの理解オブザーバーの動作が変更されます。

[プレハブのインスタンス化] をオンにすると、オブジェクトが作成され、親オブジェクトの下に適切に集められて、それらのサイズがすべての SpatialAwarenessSceneObject に合わせて調整される様子が表示されます。

demo controller options

ビルドしたアプリに関する注意

標準的な方法でビルドして HoloLens に展開します。 実行すると、機能を使用して再生するためのボタンがいくつか表示されます。

オブザーバーに対してクエリを実行する際には、いくつかの落とし穴があることに注意してください。 フェッチ要求が正しく構成されていないと、予期したデータがイベント ペイロードに含まれていない結果になります。 たとえば、四角形を要求しないと、オクルージョン マスクのテクスチャが存在しなくなります。 同様に、オブザーバーが、メッシュを要求するように構成されていない場合は、ワールド メッシュが表示されません。 これらの依存関係の一部は DemoSceneUnderstandingController スクリプトによって処理されますが、すべてではありません。

保存したシーン ファイルには、User Folders/LocalAppData/[APP_NAME]/LocalState/PREFIX_yyyyMMdd_hhmmss.bytesデバイス ポータルからアクセスできます。 インスペクターで見つかるオブザーバー プロファイルでこれらのシーン ファイルを指定すると、それらのファイルをエディターで使用できます。

Device Portal location of bytes file

Serialized scene bytes in observer

参照