目次
TL;DR
Mixed Reality Toolkit Documentation の以下の Spatial Awareness の章から要点を抜き出したページです。
- Spatial awareness
- Configuring mesh observers for device
- Configuring mesh observers for the editor
- Configuring mesh observers via code
- Creating a spatial awareness system data provider
検証環境
- Unity:2019.2.7f2
- MRTK:2.3.0 / 2.4.0
- VisualStudio:2019
- Device:HoloLens2
内容
空間認識を使用するには
詳細はこちら。
Clone する Profile ファミリー
- DefaultHololens2ConfigurationProfile
- DefaultMixedRealitySpatialAwarenessSystemProfile
設定
- DefaultHololens2ConfigurationProfile をクローン
- MixedRealityToolkit スクリプト > Spatial Awareness セクション で [Enable Spatial Awareness] を ON
- DefaultMixedRealitySpatialAwarenessSystemProfile をクローン
Spatial Awarenessの見た目を変えるには
見た目を変える以外に、起動時の動作や更新間隔などスキャンやメッシュなどの設定が行える。
詳細はこちら。
Clone する Profile ファミリー
- DefaultMixedRealitySpatialAwarenessMeshObserverProfile
設定
- [WindowsMixedRealitySpatialMeshObserver] タイプのオブザーバーを展開
- DefaultMixedRealitySpatialAwarenessMeshObserverProfile をクローン
- [Display Settings] で表示/非表示、見た目(Material)の変更が可能
- Display Option
- Visible - Visible Material を使用してメッシュを表示する
- Occlusion - Occlusion Material を使用してシーン内のアイテムをオクルードする
- None - メッシュをレンダリングしない
Editor 上で扱うには
詳細はこちら。
Clone する Profile ファミリー
- DefaultObjectMeshObserverProfile
設定
- MixedRealityToolkit スクリプト > Spatial Awareness セクション で新たに [SpatialObjectMeshObserver] タイプのオブザーバーを追加
- DefaultObjectMeshObserverProfile をクローン
- デフォルトでサンプルの空間データが含まれている(ExampleSpatialMesh)
オリジナルの空間データを扱うには
- HoloLens をPCに接続し、DevicePortalを開く
- Views > 3D View の画面で、Spatial mapping の [Update] を実行すると現在認識している空間のメッシュが読み込まれる
- 続いて [Save] を実行すると obj形式のデータをダウンロードできる
- objファイルをUnityにImportし、先の [Spatial Object Mesh Observer] 内で、[Spatial Mesh Object] に設定する
コードから操作するには
すべてのスキャンを開始/停止したり、オブザーバー毎に開始/停止したり、Meshの取得やメッシュの表示/非表示などができる。
詳細はこちら。
ドキュメントのサンプルコードでオブザーバーを取得しようとした所、既に2.4のコードになっている。
var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
2.3では以下のように取得可能。
var provider = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
var observer = provider.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();