本日はMRTK調査枠です。 またこの記事はHoloLensアドベントカレンダー2020 9日目の記事です。
〇SpatialMeshとは?
本日はSpatialMeshを細かく取得していきます。
SpatialMeshはHoloLensの主要な機能の一つである[SpatialAwareness](空間認識)機能によって生成されるメッシュです。
HoloLensアプリでは現実の壁や床に対して貼られるこのメッシュを利用することで、現実とデジタル情報の対話、MixedRealityを実現します。
HoloLensアドベントカレンダー2020 2日目の記事では実際にHoloLensで取得できるSpatialMeshに関しての調査を行いました。
〇SpatialMeshの表示
SpatilaMeshを表示するためにはUnityでMRTKの構成を使用して行います。
UnityでMRTKを導入したシーンから説明します。
〇環境
・Unity2019.3.9f1
・MRTK v2.5
①hierarchyウィンドウ内の[MixedRealityToolkit]オブジェクトを選択してinspectorウィンドウを開きます。
②inspectorウィンドウから[MixedRealityToolkitProfile]を自身の環境に合わせて選択し、横にある[Clone]を押します。
HoloLens1stをターゲットとする場合は[DefaultHoloLens1ConfigurationProfile]、HoloLens2をターゲットとする場合[DefaultHoloLens2ConfigurationProfile]を選択しcloneします。
Profileはターゲットや環境に合わせた機能の設定を行うことができます。MRTKでは初期で用意されているProfile自体は変更することができず(ロックされている)、複製することでオリジナルにカスタマイズを行うことができます。
③サイドタブから[SpatialAwareness]を選択します。
ここでは[SpatialAwareness]の機能に関する設定を行います。[Enable SpatialAwareness System]がオフになっている場合[SpatialAwareness]の機能をアプリ内で使用しない設定になります。(この場合でもHoloLens自体は自己位置推定にSpatialAwarenessを使用しています。アプリ内ではその情報がいきわたりません)
④[Enable SpatialAwareness System]をオン(有効)にします。
これでSpatialAwarenessが有効になりアプリ内でSpatialMeshが貼られるようになります。
⑤SpatialAwarenessのprofileをクローンします。
こちらも①②同様クローンすることによってカスタマイズできるようになります。
MRTKの構成は主に子の形になっています。
〇SpatialMeshの見た目を変える
デフォルトの状態ではSpatialMeshがワイヤフレームとして表示されるように設定されています。
これはSpatialAwarenessの設定の最下部に表示されている[DisplaySettings]で変更できます。
[DisplayOption]では[None(SpatialMeshを生成しない)]、[Visible]、[Occlusion]のプルダウンが用意されています。
[Visible]、[Occlusion]の場合それぞれ[Visible Material]、[Occlusion Material]に設定されているMaterialが使用されています。
[Visible]、[Occlusion]とはあるものの見えるマテリアル、見えないマテリアルを設定しなければならないというわけではなく、2つのマテリアルスロットがあるという感じでしょうか
SpatialMesh用のShaderを使用したほうが最適なパフォーマンスを発揮することができますが、専用のマテリアル以外でも動かすことができます。
〇スキャン時間を設定する
SpatialAwarenessのProfile、[Update interval]の設定によってメッシュを再生成する時間を設定できます。
デフォルトでは3.5が設定されており、3.5秒おきにメッシュの再生成が行われています。
細かいほどより素早く環境を更新できますが、その分人や動物などの動くものがある環境下ではノイズが入りやすくなってしまいます。
また、スキャン間隔が荒いほど、SpatialMeshの漏れ(スキャンできていない空間)が発生しやすくなります。
[Setup Behavior]はメッシュの生成の開始に関する設定です。
デフォルトでは[Auto]に設定されており、自動でメッシュの生成が始まります。
[Manual Start]に設定することでスクリプトから任意のタイミングでメッシュの生成を行うことができます。
〇HoloLensアドベントカレンダー2020
冒頭でもお知らせしましたが、本日の記事はHoloLensアドベントカレンダー9日目の記事になります。
明日はガチ本さんによるAzure系の記事です!