空間マッピングは大量のデータを作成し、使用します。これはアプリケーションのスピードとパフォーマンスに影響を与えます。ここでは、空間マッピングを用いることでよく発生する問題と、それを回避する方法に関して説明します。
衝突データの作成は、空間マッピングの中で最も CPU 処理時間を必要とします。必要な場合にのみ衝突データを要求することで、CPU リソースの使用が最適化されバッテリー寿命も向上します。
必要な場合にのみ衝突データを要求します。これにより、他の空間マッピングの要求の待ち時間が短縮され、バッテリー寿命が長くなります。
サーフェス の Update time とバウンディングボックスを使ってデータの要求に優先順位を付け、優先順位が高い サーフェス のみを要求します。
サーフェス データを要求するときに、SurfaceData 構造体の trianglesPerCubicMeter を高い値に設定すると、非常に多くのジオメトリをシーンに生成します。これは特に、オブジェクトが多く含まれる空間 (混みあったオフィスなど) で顕著です。シーンに多くのジオメトリがあると、データ生成の待ち時間とアプリケーションのメモリ使用量が増加します。さらに、シーン内のメッシュの密度が高くなると、パフォーマンスに影響を及ぼし、レンダリングや物理演算などのランタイムシステムの実行に、より時間がかかる場合があります。
アプリケーションに必要な空間マッピングデータの最小解像度を設定してください。これを行うには、アプリケーションと生成された空間マッピングメッシュの正確さをテストする必要があります。ただし、結果的に、良いユーザー体験を生み出すためには、正確さとパフォーマンスのバランスが必要です。生成されたメッシュの解像度が低いと、メッシュの更新時にアプリケーションが費やす CPU 時間が少なくなります。 これにより、デバイスの消費電力を削減し、バッテリー寿命を延ばし、メッシュデータを取得する際の待ち時間も短縮します。低解像度メッシュは、メモリ使用量も少なく、レンダリングや物理計算などのランタイムシステムへの影響も少なくなります (複雑度の低いジオメトリを想定) 。
SurfaceObserver.Update メソッドを呼び出すと、SurfaceObservers はその範囲内の追加、更新、削除された サーフェス を報告します。
これにより、変更された サーフェス の全てがワークキューに追加され、空間マッピングがそれらを削除したあとに使用しない サーフェス がワークキューに残ってしまいます。削除後にワークキューにまだ残っている サーフェス は、システムを移動するときに CPU 時間を使いますが、メッシュデータに全く反映されません。これにより、待機中の要求の待ち時間が長くなります。
可能な場合は、ワークキュー内の サーフェス の数を制限するよう注意します。メッシュをクエリすることは、長い待ち時間を伴う高負荷な操作です。そのため、1 度に RequestMeshAsync を 1 回だけ呼び出することによって、この待ち時間を減少することができます。アプリケーションは、 サーフェス の報告された更新時間と範囲に基づいて、RequestMeshAsync
の呼び出しの優先順位を決定します。
サーフェス データの要求の優先順位を決定することも大切です。そうすれば、もっとも重要なデータを最初に受け取ることができるからです。優先順位をつけるもっとも一般的な例は以下の通りです。
既存の サーフェス の更新よりも、新しい サーフェス を優先します。
奥にある サーフェス よりも手前にあるものを優先します。
SurfaceObserver は、該当範囲にあるすべての サーフェス の変更を報告します。サーフェス は SurfaceObserver
の範囲が互いに近くにあるとき、複数の範囲に含まれる場合があります。そのため、コードによって同じ サーフェス が複数回要求され、パフォーマンスの問題になる場合があります。
SurfaceObserver
からの要求には単一のワークキューを使います。
多くのアプリケーションでは、1つの SurfaceObserver
だけあれば必要十分であることがほとんどです。
1つの SurfaceObserver
を使用すると、アプリケーション開発の複雑さを軽減する助けとなります。ただし、 空間マッピング の高度な使用例の中には、複数の SurfaceObserver
を必要とするものもあります。このような場合は、シーンのすべての SurfaceObserver
で 単一のワークキューを使用して、メッシュ要求を独自に優先順位付けします。
これはよく見られる問題で、大抵、設定に問題があります。
SetVolumeAsAxisAlignedBox などのメソッドを使い、SurfaceObserver
に有効な範囲を設定します。
また、Publishing Settings (File > Build Settings > Player Settings > Publishing Settings) で忘れずに Capability リストの Spatial Perception をオンにしてください。
Windows の複合現実 (Mixed Reality、MR) の Capability と Publishing Settings に関して詳しくは、Unity の WMR quick start guide を参照してください。
–
2018–05–01 編集レビュー を行ってパブリッシュされたページ
Hololens の空間マッピングは 2017.3 に更新