[HoloLens]Scene Understanding を試す

5 min read読了の目安(約4500字

現在まだ Experimental な機能である Scene Understanding の動作確認をしたので、その手順と実行した動画をまとめました。

Scene Understanding とは

ドキュメントに書いてある内容をそのまま翻訳すると...

Scene Understanding は、Mixed Reality デバイスが取得した構造化されていない環境センサーデータを変換し、強力な抽象的表現に変換します。

とのことですが、簡単に説明すると、

HoloLensで取得した空間メッシュ情報から、壁や床などを認識するための機能 です。

https://twitter.com/hi_rom_/status/1385151760826728449?conversation=none

確認環境

  • Unity 2019.4.24f1
  • Visual Studio Professional 2019 Version 16.8.2

末尾記載のドキュメントに SDK の説明やサンプルを動かす手順の紹介などもありますが、手っ取り早く動作確認するには、GitHub に用意されているサンプルプロジェクトを試すのが良いと思います。今回試したのは以下リポジトリのサンプルになります。

https://github.com/microsoft/MixedReality-SceneUnderstanding-Samples

サンプルプロジェクトの中には、サンプルのシーンデータ(Unityのシーンのことではなく Scene Understanding で利用するデータ)も含まれているので HoloLens 2 の実機がなくても PC で動作確認可能です(以降、Unityのシーンを指す場合は「シーン」、Scene Understanding で利用するシーンデータのことを指す場合は「シーンデータ」と表記)。

なお、サンプルのシーンデータは以下にあるもので、アパートとキッチンの2つ用意されています。

https://github.com/microsoft/MixedReality-SceneUnderstanding-Samples/tree/main/Assets/SceneUnderstanding/Examples/StandardAssets/SUScenes

開発には興味がなくどのような機能なのかだけ確認したいという場合は、ストアで配布されている MRTK Examples Hub アプリに Scene Understanding のサンプルがあります。

https://www.microsoft.com/ja-jp/p/mrtk-examples-hub/9mv8c39l2sj4?activetab=pivot:overviewtab

MRTKExamplesHub

サンプルプロジェクト概要

サンプルプロジェクトには以下4つのシーンがあります。

  • Home-Examples
  • Understanding-Simple
  • Placement-Simple
  • NavMesh-Simple

Home-Examples

他の3つのシーンをロードするための親シーン。実行すると以下のようなメニューが表示されます。PC ではマウスとキーボードで操作できますが、実機では音声コマンドで操作します(デバイスポータルの Virtual Input で操作することもできます)。

Home

Understanding-Simple

実行すると以下のようなメニューが表示されます。このメニューに書かれている操作は他の2つのシーンとも共通の操作になります。

Understanding

このサンプルでできることはメニューの内容にある通りですが、

  • 空間マップから生成された壁や床や天井などのシーンオブジェクトを種類ごとに表示・非表示切り替え
  • ラベルの表示・非表示切り替え
  • メッシュ表示・非表示切り替え
  • メッシュのクオリティ(細かさ)変更
  • ミニマップの表示
  • (シーンオブジェクトは非表示だがオクルージョンは有効な)ゴーストモードへの切り替え
  • シーンデータの保存

といった、Scene Understanding の基本的な機能が確認できます。

Placement-Simple

Understanding サンプルのメニューから差分だけ表示しています。

Placement

このサンプルは、Understanding のサンプルに機能が追加されたもので、認識された床やプラットフォーム(机など)の上にオブジェクトを置くことができるようになっています。

Understanding サンプルのメニューから差分だけ表示しています。

NavMesh

このサンプルでは認識された床の上にナビメッシュを張り、視線の位置にオブジェクトを移動させることができるようになっています。

動作確認手順

  • GitHubからプロジェクトを取得する

  • Unity でプロジェクトを開く

  • 以下のようなエラーが表示されるので、Build Settings > Player Settings > Other Settings にある Api Compatibility Level を .Net 4.x に変更する

    Error

<HoloLens 2 実機で確認する場合>

  • Build Settings で Universal Windows Platform を選択して Switch Platform ボタンを押す
  • このままビルドしてデプロイでOK

<PC で動作確認する場合>

  • 動作確認したい任意のシーンを開く

  • Hierarchy にある SceneUnderstandingManager を選択し、Inspector の SceneUnderstandingManager コンポーネントにある Query Scene From Device のチェックを外す

    SceneUnderstandingManager

    このチェックを外さないで、実行すると 100% Unity が落ちました

  • (オプション) SU Serialized Scene Paths の値を変更することで任意のシーンデータを表示することも可能

実行

以下は HoloLens 実機で実行したものです。

  • Understanding-Simple

https://youtu.be/n3_F9_vWZbk
  • Placement-Simple

https://youtu.be/K8xdV7t8mnc
  • NavMesh-Simple

https://youtu.be/A5DaggHnhko

関連ドキュメント・動画

コアコンセプト

https://docs.microsoft.com/en-us/windows/mixed-reality/design/scene-understanding?WT.mc_id=MR-MVP-5004157

SDKの概要

https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/scene-understanding-SDK?WT.mc_id=MR-MVP-5004157

別のサンプルの動かし方について書かれたもの

https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/features/spatial-awareness/scene-understanding?WT.mc_id=MR-MVP-5004157

Youtube : Digitizing the physical world: An intro to Mixed Reality Scene Understanding

https://www.youtube.com/watch?v=Pcmo0PPB9eI&t=4s

おわりに

Scene Understanding は、まだ Experimental な機能であるため、今後変更される部分もあるかもしれないためご注意ください。
機能としては見た目にわかりやすく面白い物だと思います。認識した壁や床などに独自のシェーダーを割り当てたりすると面白い表現ができるかもしれません。