夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

SceneUnderstandingを学ぶ NavMesh-Simple シーン Unityエディタ編

本日はツールの調査枠です。

SceneUnderstandingに関して学びます。

〇SceneUnderstandingとは?

SceneUnderstandingはMicrosoftによって提供されているMRTKの拡張ツールで、HoloLensによって取得する空間認識機能を拡張します。

次のGitリポジトリで公開されています。

github.com

旧MixedRealityToolkit(HoloToolkit)では[SpatialUnderstanding]と呼ばれる機能が提供されており、MRTKに同梱されていましたが、MRTKv2移行は2.51現在は別の機能として提供されています。

〇Spatial Mapping(SpatialAwareness)との違い

HoloLensの特徴として[SpatialAwareness(空間認識)]機能があります。

[SceneUnderstanging]も[Spatialmapping]もどちらもHoloLensデバイス自体のセンサーにアクセスしてAPI経由で情報を受けとりますが、二つには次のような違いがあります。

・[SpatialMapping]には検知エリアに制限がありますが、[SceneUnderstanding]には制限がありません。無制限で検出を行えます。

・SpatialMappingに比べ[SceneUnderstanding]は壁や床、オブジェクトを解析することができます。

f:id:Holomoto-Sumire:20201223215028p:plain

前回はSceneunderstanding-simpleシーンをデプロイして実機で動かしました。

〇NavMesh-Simple

●NavMeshとは?

NavMeshはUnityから提供されている経路に関するAIコンポーネントのことで、主にある場所からある場所へ紹介物をよけながら移動するなどの場面で使用されます。

ゲームではユーザーに追従するキャラクターや敵の移動に使用されます。

HoloLensでは主にSpatialMesh上をオブジェクトやキャラクターが移動する際に使用します。

NabMesh-Simpleシーンをエディタ上で実行すると次のように自動でサンプルのSpatiamMeshが作成されます。

f:id:Holomoto-Sumire:20201226225052j:plain

メッシュ状にはチェスの駒の形状のオブジェクトが配置されています。

f:id:Holomoto-Sumire:20201226225803j:plain

今回はこれがNavMeshで移動するオブジェクトになります。

SceneUnderstandingではMRTKとは別の独立したツールのためエディタ上での移動方法などが異なります。

●移動方法

・移動

 MRTK同様[W],[A],[S],[D]で前進後退右左の移動を行います。

・回転

 MRTKではマウスの右クリックを押しながらマウス操作によって角度を変えますが、SceneUnderstandingではマウスの左クリックを押しながらのマウス操作で回転します。

・NavMeshオブジェクトの移動

 [G]キーを入力することで向いている場所へオブジェクトが移動します。

 この際、直線距離の移動ではなくまるで人間が移動するように壁などの障害物をよけながら移動します。 これがNavMeshによる移動になります。

f:id:Holomoto-Sumire:20201226231114g:plain

〇Sceneunderstandingの設定

・Meshの形状の変更

実行中に[1]キーを入力することでメッシュの表示、非表示を設定できます。

[]キーを入力することでメッシュをQuedに置き換えます。 これでさらにMeshが簡略され使いやすい形になります。

f:id:Holomoto-Sumire:20201226231337j:plain

[3]キーを入力することでメッシュを再び複雑な形に変更します。

f:id:Holomoto-Sumire:20201226231058j:plain

[4]キーを入力することでワイヤフレーム表示に切り替えます。

f:id:Holomoto-Sumire:20201226231533j:plain

これはHoloLens実機で動かした場合現実のオブジェクトも視認することができるようになります。

もう一度[5]キーを入力することで床と壁、天井以外をマスクすることができます。

f:id:Holomoto-Sumire:20201226231901j:plain

[6]キーも同様にバックグラウンドをマスクします。[7]キーはアンノウン(不明)をマスクします。

f:id:Holomoto-Sumire:20201226232000j:plain

[9]キーは判別できなかったノイズのSpatialMeshを表示します。

f:id:Holomoto-Sumire:20201226232303j:plain

[M]キーを押すことでメッシュが小さくなり全体が確認できるミニマップが作成されます。

f:id:Holomoto-Sumire:20201226232456j:plain

[O]キーはオクルージョンを行います。ワイヤフレームより現実のオブジェクトに対する視認性は上がりますが、各SpatialMeshの処理はラベルだけになります。

f:id:Holomoto-Sumire:20201226232652j:plain

[L]キーを入力することで認識していたメッシュをobjファイルとして保存します。

f:id:Holomoto-Sumire:20201226232905j:plain

Editorで実行している場合デバッグログに保存場所が表示されます。

以上がエディタ上でのNavMesh-Simple シーンでした。