Spatial Mapping Collider
空間マッピングの低レベル API

Spatial Mapping Renderer

Spatial Mapping Renderer コンポーネントは、空間マッピングしたサーフェスを表示します。これは視覚的にサーフェスをデバッグしたり、環境に視覚的なエフェクトを加えるのに利用できます。

Spatial Mapping システムは、Spatial Mapping Renderer コンポーネントに現実世界の変化を定期的に送信します。コンポーネントが変化を受信すると、サーフェスのデータは Mesh FilterMesh Renderer コンポーネントを持つゲームオブジェクトにベイクされます。Spatial Mapping Renderer コンポーネントはサーフェス (の情報を持つ) ゲームオブジェクトの生存期間を管理します。つまり、Spatial Mapping Renderer コンポーネントは、シーンにおけるサーフェスゲームオブジェクトの Mesh Renderer の作成、更新、削除を処理します。

Unity エディターの Spatial Mapping Renderer コンポーネント
Unity エディターの Spatial Mapping Renderer コンポーネント

Render Settings

以下の表は、Spatial Mapping Renderer コンポーネントで可能なすべてのレンダー設定を説明しています。

項目 説明
Render State サーフェスゲームオブジェクトはすべて、Render State 設定からマテリアルを取得します。Render State を変更すると (例えば、ランタイムにスクリプトによって)、すべてのサーフェスゲームオブジェクトのレンダリングマテリアルは Render State で選択されたものに変わります。これによりドローコールの数が減り、逆にレンダリングパフォーマンスが向上します。共有マテリアルの使用もまた、レンダリング中に使用されるメモリーの量を削減します。サーフェスを描画する 3 つのオプションのうち 1 つを選択します。

詳細は、後述の Render State を参照してください。
Occlusion Occlusion Material に定義されているマテリアルを適用します。 これは透明なマテリアルで、ゲームオブジェクトを現実世界のサーフェスの背後に隠します。詳細は、以下の Visual Material と Occlusion Material を参照してください。

ノート: これによって、すべてのサーフェスの Mesh Renderer を有効にし、他のすべての設定をオーバーライドします。
Visualisation Visual Material に定義されているマテリアルを適用して、任意の環境で空間マッピングされたサーフェスを可視化します (通常、ワイヤーフレームのかかったマテリアル) 。詳細は、後述の Visual Material と Occlusion Material を参照してください。

ノート: これによって、すべてのサーフェスの Mesh Renderer を有効にし、他のすべての設定をオーバーライドします。
None Spatial Mapping サーフェスに割り当てられたすべての Mesh Renderer を無効にします。
Occlusion Material ここで選択するマテリアルは、Spatial Mapping Renderer の Render StateOcclusion に設定されている場合に適用されます。 デフォルトはビルトインの SpatialMappingOcclusion マテリアルです。
Visual Material ここで選択するマテリアルは、Spatial Mapping Renderer の Render StateVisualization に設定されている場合に適用されます。デフォルトはビルトインの SpatialMappingWireframe マテリアルです。

General Settings

SpatialMapping Components General Settings

以下は Spatial Mapping RendererSpatial Mapping Collider コンポーネントで共通のプロパティーです。

項目 説明
Surface Parent Surface Parent となるゲームオブジェクトを選択します。Spatial Mapping コンポーネントが作成するサーフェスの情報を持つゲームオブジェクトはこの Surface Parent オブジェクトを継承します。 None (Game Object) のままにすると、自動的に Surface Parent ゲームオブジェクトが作成されます。
Freeze Updates これを有効にすると、コンポーネントがシステムに対しサーフェスの変更をクエリすることを停止します。ノート: 各 Spatial Mapping コンポーネントは定期的に現実世界のサーフェスの変化のデータをクエリします。サーフェスに関するクエリとベイクはメモリ、パフォーマンス、バッテリーに対し負荷となります。ほぼ静的であることが予測できる環境では、ユーザーが周囲の環境を見回せるくらいの間、サーフェスゲームオブジェクトを更新しないでおくことをお勧めします。シミュレーションの環境がほとんど静的で変更がない場合 (例えば、ボードゲーム)、アプリケーションの開始時にサーフェスのデータをできる限りスキャンしておき、Freeze Updates プロパティーを 有効 に設定し、更新を防ぎます。こうすると、パフォーマンスが若干よくなり、バッテリーの消費が抑えられます。
Time Between Updates 現実世界のサーフェス変化に関するクエリの間隔を 1/10 秒単位で指定します (例えば、3.7 や 4.6 など)。デフォルトは 2.5 秒です。間隔が短いほど、メモリ、パフォーマンス、バッテリーに対する負荷が高くなります。
Removal Update Count サーフェスゲームオブジェクトがシステムによって削除される前に発生する更新の数を指定します。ここでは、更新はフレームと同じ意味です。デフォルトは 更新数は 10 回です。ノート: Removal Update Count のカウントダウンは、サーフェスゲームオブジェクトが SurfaceObserver のバウンディングボリュームに存在しなくなったこと (つまり、サーフェスゲームオブジェクトが決められた領域から消えたこと) を、Spatial Mapping がコンポーネントに通知すると開始されます。この設定によって、Spatial Mapping がサーフェスのゲームオブジェクトが領域から消えた後、かつ、削除する前に発生する更新の数を指定できます。
Level of Detail コンポーネントが生成するメッシュの品質 (LowMediumHigh)。 デフォルトは Medium です。品質が高くなるとコライダーとレンダリングはより正確になり、品質が低くなるとパフォーマンスとパワーにかかる負担が軽減されます。Level Of Detail の 3 つのモードの例は、以下の画像を参照してください。
Bounding Volume Type アプリケーションが Spatial Mapping のデータを取得するコンポーネントのバウンディングボリューム領域の形状。 Sphere または Axis Aligned Box。デフォルトは Axis Aligned Boxノート: バウンディングボリュームはシステムが現実世界のサーフェスの変化を報告し、Spatial Mapping メッシュの拡張を制限するための定義された領域です。
Size In Meters コンポーネントが使用するバウンディングボリュームのサイズ (単位はメートル)。Sphere は半径で設定します。デフォルトの半径は 2 メートルです。Axis Aligned Box は範囲で設定します。デフォルトは Vector3 (4,4,4)。ノート: オブザーバーのバウンディングボリュームは、Spatial Mapping が現実世界のサーフェスの変化を報告する範囲です。

Level of Detail

Spatial Mapping コンポーネントでは、各コンポーネントが生成する空間メッシュの LOD を、以下の画像に表示された 3 種類 Low、Medium、High のいずれかに指定できます。

Spatial Mapping メッシュの 3 つの LOD モード
Spatial Mapping メッシュの 3 つの LOD モード

可能な場合は、Spatial Mapping Colliders の Level of Detail を Low に設定します。これにより、衝突計算のパフォーマンスが向上し、パワーの消費が軽減されます。ただし、Level of DetailLow に設定すると、アプリケーションの視覚的効果に悪影響をもたらす可能性があります。

Spatial Mapping Renderer の使用

Render State

このコンポーネントを使うと、生成されたすべてのサーフェスで簡単に動的にマテリアルを変更することができます。Unity は事前に構築済みの 2 種類のマテリアルタイプを提供しています。

Occlusion Material

このマテリアルは、ゲームオブジェクトを透明にしますが、そのゲームオブジェクトを通してホログラムを見ることはできません。例えば、現実世界の机の下にゲームで使うホログラフィックオブジェクトを隠す必要がある場合に利用できます。

Visual Material

このマテリアルは、Unity が Spatial Mapping Renderer コンポーネントのすべてのサーフェスに適用するワイヤーフレームマテリアルです。デフォルトのワイヤーフレームシェーダーでは、ワイヤーフレームの色は現実世界の距離を表します。通常は、これがデバッグに最も便利なオプションですが、視覚効果にも使用できます。シェーダーは距離を示すためにカラーマッピングを使用します。以下の表は、カラーマッピングを示しています。

HoloLens からの距離
0 - 1 メートル
1 - 2 メートル
2 - 3 メートル
3 - 4 メートル
4 - 5 メートル
5 - 6 メートル シアン
6 - 7 メートル マジェンタ
7 - 8 メートル マルーン
8 - 9 メートル ティール (鴨の羽色)
9 - 10 メートル オレンジ
10 メートル以上
Spatial Mapping Renderer コンポーネントの Visualization マテリアルに使用したデフォルトのワイヤーフレームシェーダー。ワイヤーフレームの色は距離を表します。
Spatial Mapping Renderer コンポーネントの Visualization マテリアルに使用したデフォルトのワイヤーフレームシェーダー。ワイヤーフレームの色は距離を表します。

新しいマテリアルを Visual MaterialOcclusion Material のいずれかに指定するとき、該当するサーフェスゲームオブジェクトのマテリアルは自動的に変更されるわけではありません。新しいマテリアルをすべてのサーフェスに適用するためには、Render Setting を新たに変更したマテリアル (Visual MaterialOcclusion Material) に設定する必要があります。

Unity エディターから(シーンのゲームオブジェクトに直接)__Render State__ の Occlusion MaterialVisual Material プロパティーを割り当てただけの場合、Spatial Mapping は Spatial Mapping Renderer コンポーネントと同時にそれらを破棄します。 ただし、Spatial Mapping は、コンポーネントをスクリプトを通して割り当てられたり、変更された Visualization マテリアルOcclusion マテリアル を破棄しないため、手動で破棄する必要があります。

以下のコードスニペットは、Spatial Mapping が実行時にすべてのサーフェスゲームオブジェクトに動的に適用するマテリアルを変更します。


SpatialMappingRenderer renderer = spatialMappingGameObject.AddComponent<SpatialMappingRenderer>();
renderer.visualMaterial = new Material(Shader.Find("VR/SpatialMapping/Wireframe"));
renderer.renderState = SpatialMappingRenderer.RenderState.Visualization;

サーフェスゲームオブジェクト

Spatial Mapping Renderer コンポーネントは、それぞれ につき 1 組のサーフェスゲームオブジェクトを作成します。これらは、サーフェスゲームオブジェクトの親となるシーンの下に表示されます。

親のサーフェスゲームオブジェクトと子のサーフェスゲームオブジェクト
親のサーフェスゲームオブジェクトと子のサーフェスゲームオブジェクト

Spatial Mapping Renderer がサーフェスゲームオブジェクトを生成するときに、以下のコンポーネントが含まれます。

Spatial Mapping Collider によって作成されたサーフェスゲームオブジェクトのコンポーネントのインスペクター
Spatial Mapping Collider によって作成されたサーフェスゲームオブジェクトのコンポーネントのインスペクター

シーンに複数の Spatial Mapping Renderer コンポーネントを追加すると、各コンポーネントはそれぞれ 1 組のサーフェスゲームオブジェクトを生成します。例えば、Spatial Mapping Renderer コンポーネントを持つ 2 つのゲームオブジェクトがある場合、シーンには ランタイムに各コンポーネントによって生成された 2 組のサーフェスゲームオブジェクトが含まれます。これは、最適化を行う上で注意する必要があります。


  • 2018–05–01 編集レビュー を行ってパブリッシュされたページ

  • Hololens の空間マッピングは 2017.3 に更新

Spatial Mapping Collider
空間マッピングの低レベル API