yotiky Tech Blog

とあるエンジニアの備忘録

MRTK v2 - Spatial Awareness (空間認識)

目次

TL;DR

Mixed Reality Toolkit Documentation の以下の Spatial Awareness の章から要点を抜き出したページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

空間認識を使用するには

詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultHololens2ConfigurationProfile
    • DefaultMixedRealitySpatialAwarenessSystemProfile
  • 設定

    • DefaultHololens2ConfigurationProfile をクローン
    • MixedRealityToolkit スクリプト > Spatial Awareness セクション で [Enable Spatial Awareness] を ON
    • DefaultMixedRealitySpatialAwarenessSystemProfile をクローン

Spatial Awarenessの見た目を変えるには

見た目を変える以外に、起動時の動作や更新間隔などスキャンやメッシュなどの設定が行える。
詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultMixedRealitySpatialAwarenessMeshObserverProfile
  • 設定

    • [WindowsMixedRealitySpatialMeshObserver] タイプのオブザーバーを展開
    • DefaultMixedRealitySpatialAwarenessMeshObserverProfile をクローン
    • [Display Settings] で表示/非表示、見た目(Material)の変更が可能

    f:id:yotiky:20200601213824p:plain:w400

    • Display Option
      • Visible - Visible Material を使用してメッシュを表示する
      • Occlusion - Occlusion Material を使用してシーン内のアイテムをオクルードする
      • None - メッシュをレンダリングしない

      https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Images/SpatialAwareness/MRTK_SpatialAwareness_DisplayOptions.jpg

Editor 上で扱うには

詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultObjectMeshObserverProfile
  • 設定

    • MixedRealityToolkit スクリプト > Spatial Awareness セクション で新たに [SpatialObjectMeshObserver] タイプのオブザーバーを追加
    • DefaultObjectMeshObserverProfile をクローン
    • デフォルトでサンプルの空間データが含まれている(ExampleSpatialMesh)

f:id:yotiky:20200601180110p:plain:w400 f:id:yotiky:20200601180123p:plain:w400

オリジナルの空間データを扱うには

  • HoloLens をPCに接続し、DevicePortalを開く
  • Views > 3D View の画面で、Spatial mapping の [Update] を実行すると現在認識している空間のメッシュが読み込まれる
  • 続いて [Save] を実行すると obj形式のデータをダウンロードできる
  • objファイルをUnityにImportし、先の [Spatial Object Mesh Observer] 内で、[Spatial Mesh Object] に設定する

f:id:yotiky:20200601181541p:plain:w400 f:id:yotiky:20200601181252p:plain:w400

コードから操作するには

すべてのスキャンを開始/停止したり、オブザーバー毎に開始/停止したり、Meshの取得やメッシュの表示/非表示などができる。
詳細はこちら。

microsoft.github.io

ドキュメントのサンプルコードでオブザーバーを取得しようとした所、既に2.4のコードになっている。

var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

2.3では以下のように取得可能。

var provider = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
var observer = provider.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

カスタムオブザーバーを作成するには

microsoft.github.io