[HoloLens]Scene Understanding を試す
現在まだ Experimental な機能である Scene Understanding の動作確認をしたので、その手順と実行した動画をまとめました。
Scene Understanding とは
ドキュメントに書いてある内容をそのまま翻訳すると...
Scene Understanding は、Mixed Reality デバイスが取得した構造化されていない環境センサーデータを変換し、強力な抽象的表現に変換します。
とのことですが、簡単に説明すると、
HoloLensで取得した空間メッシュ情報から、壁や床などを認識するための機能 です。
確認環境
- Unity 2019.4.24f1
- Visual Studio Professional 2019 Version 16.8.2
末尾記載のドキュメントに SDK の説明やサンプルを動かす手順の紹介などもありますが、手っ取り早く動作確認するには、GitHub に用意されているサンプルプロジェクトを試すのが良いと思います。今回試したのは以下リポジトリのサンプルになります。
サンプルプロジェクトの中には、サンプルのシーンデータ(Unityのシーンのことではなく Scene Understanding で利用するデータ)も含まれているので HoloLens 2 の実機がなくても PC で動作確認可能です(以降、Unityのシーンを指す場合は「シーン」、Scene Understanding で利用するシーンデータのことを指す場合は「シーンデータ」と表記)。
なお、サンプルのシーンデータは以下にあるもので、アパートとキッチンの2つ用意されています。
開発には興味がなくどのような機能なのかだけ確認したいという場合は、ストアで配布されている MRTK Examples Hub アプリに Scene Understanding のサンプルがあります。
サンプルプロジェクト概要
サンプルプロジェクトには以下4つのシーンがあります。
- Home-Examples
- Understanding-Simple
- Placement-Simple
- NavMesh-Simple
Home-Examples
他の3つのシーンをロードするための親シーン。実行すると以下のようなメニューが表示されます。PC ではマウスとキーボードで操作できますが、実機では音声コマンドで操作します(デバイスポータルの Virtual Input で操作することもできます)。
Understanding-Simple
実行すると以下のようなメニューが表示されます。このメニューに書かれている操作は他の2つのシーンとも共通の操作になります。
このサンプルでできることはメニューの内容にある通りですが、
- 空間マップから生成された壁や床や天井などのシーンオブジェクトを種類ごとに表示・非表示切り替え
- ラベルの表示・非表示切り替え
- メッシュ表示・非表示切り替え
- メッシュのクオリティ(細かさ)変更
- ミニマップの表示
- (シーンオブジェクトは非表示だがオクルージョンは有効な)ゴーストモードへの切り替え
- シーンデータの保存
といった、Scene Understanding の基本的な機能が確認できます。
Placement-Simple
Understanding サンプルのメニューから差分だけ表示しています。
このサンプルは、Understanding のサンプルに機能が追加されたもので、認識された床やプラットフォーム(机など)の上にオブジェクトを置くことができるようになっています。
NavMesh-Simple
Understanding サンプルのメニューから差分だけ表示しています。
このサンプルでは認識された床の上にナビメッシュを張り、視線の位置にオブジェクトを移動させることができるようになっています。
動作確認手順
-
GitHubからプロジェクトを取得する
-
Unity でプロジェクトを開く
-
以下のようなエラーが表示されるので、Build Settings > Player Settings > Other Settings にある Api Compatibility Level を .Net 4.x に変更する
<HoloLens 2 実機で確認する場合>
- Build Settings で Universal Windows Platform を選択して Switch Platform ボタンを押す
- このままビルドしてデプロイでOK
<PC で動作確認する場合>
-
動作確認したい任意のシーンを開く
-
Hierarchy にある SceneUnderstandingManager を選択し、Inspector の SceneUnderstandingManager コンポーネントにある Query Scene From Device のチェックを外す
このチェックを外さないで、実行すると 100% Unity が落ちました
-
(オプション) SU Serialized Scene Paths の値を変更することで任意のシーンデータを表示することも可能
実行
以下は HoloLens 実機で実行したものです。
- Understanding-Simple
- Placement-Simple
- NavMesh-Simple
関連ドキュメント・動画
コアコンセプト
SDKの概要
別のサンプルの動かし方について書かれたもの
Youtube : Digitizing the physical world: An intro to Mixed Reality Scene Understanding
おわりに
Scene Understanding は、まだ Experimental な機能であるため、今後変更される部分もあるかもしれないためご注意ください。
機能としては見た目にわかりやすく面白い物だと思います。認識した壁や床などに独自のシェーダーを割り当てたりすると面白い表現ができるかもしれません。
Discussion