Microsoftのドキュメント[Microsoft Docs]ではHoloLens 2の入門チュートリアルが公開されています。
ツールのインストールから詳しく掲載されているためこちらを今回勉強しながらHoloLens 2が手元にないためHoloLens 1stで動かしてみます。
チュートリアルは以下で公開されています。
前回の記事はこちら
前回はMixedRealityデバイスに合わせプロファイルを編集していました。
MixedRealityToolkitのプロファイルは最初に用意されているデフォルトのプロファイルをそのまま編集することはできず、一度クローン(複製)することによって編集が可能になります。
前回の続きから行います。
●4.空間認識メッシュオブザーバープロファイルを複製する
[MixeRealityToolkit]オブジェクトの[Inspector]の[MixedRealityToolkit]から[Spatial Awareness]タブを選択します。
[DefaultMixedRealitySpatialAwarenessSystemProfile]の右側の[Clone]を選択しプロファイルを複製します。
複製ウィンドウで[Clone]を選択します。

冒頭でも書きましたが、デフォルトのProfileは編集できないため複製することによってさらに細かい編集が可能になります。
これで[Windows MixedReality Spatial Mesh Obserer]が展開・編集可能になります。
しかしWindows MixedReality Spatial Mesh Obserer内部もProfileによって管理されているためこのままでは編集できないため
Windows MixedReality Spatial Mesh Obsererを展開し、[Clone]をクリックして プロファイルの複製 ウィンドウを開きます。
複製プロファイル ウィンドウで、[Clone]ボタンをクリックして、 [DefaultMixedRealitySpatialAwarenessMeshObserverProfile]の編集可能なコピーを作成します。

複製することで自動的にProfileが割り当てられます。
●5. 空間メッシュの可視性を変更する
[SpatialAwareness]によってデバイスで周囲の床や壁などの空間情報を認識できるようになりました。
空間メッシュ(SpatialMesh)は認識した床や壁に合わせてMeshを貼りHoloLens内で現実に合わせた仮想の部屋を生成する機能です。
空間メッシュを用いることでHoloLens特有のオブジェクトを現実の床や壁に対して配置するといったMixedRealityの対話を行っています。
[Spatial Mesh Observer Settings]の[DisplaySettings]で[Display Option]を [Occlusion] に変更します。これにより、まだ機能している間にSpatialMappingの空間メッシュが非表示になります。

これは[Visible Material]、[Occlusion Material]に設定されたそれぞれのマテリアルが対応します。

このマテリアルや[Display Option]はスクリプトからも実行中に編集することができます。
●Visible Material

MixedRealityToolkitによって提供されているShaderが使用されています。
このマテリアルはメッシュの淵のみが描画されます。ユーザーにとってはこのマテリアルによってSpatialAwarenessの認識の状況やHoloLensを初めて体験する人にHoloLensのSpatialAwarenessに関して効果的に表すことができます。
[Wire Thickness]によって淵の太さを変えることもできます。
●Occlusion Material

こちらもMixedRealityToolkitによって提供されているShaderが用いられています。
このマテリアルは透明なマテリアルで、ユーザーにとってはSpatialMeshを見ることができない状態になります。
Wireframeのマテリアルと同じくSpatialMeshは生成されるのでより現実空間を利用した自然な体験を行えます。
今回でProfileの設定は終了しました。
Profile構成は以下のMRTKのドキュメントでまとめられています。
●おまけ
実行中にスクリプトで[Display Option]やそのSpatialMesh Materialを変更するには以下のスクリプトを使用します。
サンプル
using UnityEngine;
using Microsoft.MixedReality.Toolkit.SpatialAwareness;
using Microsoft.MixedReality.Toolkit;
public class ChangeSpatialMaterial : MonoBehaviour{
// new material;
public Material spatialmaterial;
/// <summary>
/// Change MRTKSpatialAwareness VisibleMaterial.
/// </summary>
public void OnSpatialShaerCange1st()
{
// Cast the Spatial Awareness system to IMixedRealityDataProviderAccess to get an Observer
var access = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
// Get the first Mesh Observer available, generally we have only one registered
var observer = access.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Change the VisivleMaterial to new material.
observer.VisibleMaterial = spatialmaterial;
}
}
チュートリアル終了後アプリを改造しますのでその際に詳しく解説します。