空間マッピングは大量のデータを作成し、使用します。これはアプリケーションのスピードとパフォーマンスに影響を与えます。ここでは、空間マッピングを用いることでよく発生する問題と、それを回避する方法に関して説明します。
衝突データの作成は、空間マッピングの中で最も 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 に更新
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.