オクルージョン
オクルージョンは仮想オブジェクトに奥行きを与え、現実世界のオブジェクトの後ろや前に見えるようにする。 バーチャル・コンテンツは、シーン内に物理的に存在しているように見え、ユーザーがデバイスを動かして空間を移動すると、オブジェクトの視界が動的に遮られる。
マスコットたちが木の陰を歩くときのオクルージョンの例です:
What's New?
ARDK 3.0では、LightshipがARFoundationのXROcclusionとXRMeshingサブシステムをNianticの改良されたアルゴリズムで拡張し、ARFoundationの簡単なワークフローを維持しながら、より良い体験を開発者にシームレスに提供します。 また、Lightshipは、アプリケーションのニーズに応じて、ダイナミックオクルージョンとメッシュベースオクルージョンを切り替えることができる実装を提供します。 この実装は、LiDARの有無に関係なく、どのようなデバイスやプラットフォームでも動作します!
オクルージョンの種類
AROcclusionManager
と ARMeshManager
は、オクルージョンをサポートする2つのモードを提供します:
- Instant Dynamic Occlusion:
- デフォルトのオクルージョンモードで、
AROcclusionManager
をシーンに追加すると有効になります。 - 人やペットなど、動きの速い被写体を捉えるのが得意。
- ジャストインタイムのオクルージョンは、常にメッシュと一致するとは限らず、メッシュされたオブジェクトをオーバー/アンダーオクルージョンする可能性があります。
- パフォーマンスを上げるために、オクルージョンを必要としないメッシュではオクルージョンを無効にすることができます。
- メッシュオクルージョン(安定したスローオクルージョン):
- メッシュベースのオクルージョンは、インスタント・ダイナミック・オクルージョンよりも安定しており、きれいな結果が得られますが、更新頻度は低くなります。
- メッシュベースのオクルージョンは、深度測定の範囲を平均化するため、環境の静的な領域に対してより正確です。
- 更新頻度が低いため、(人間やペットのような)ダイナミックなエージェントは、オクルージョンの信頼性が低くなるかもしれない。
Niantic Occlusion Extension
Niantic Occlusion Extensionは、オプションと機能を追加することで、Lightshipのオクルージョンのビジュアルクオリティを向上させます。 深度情報とセマンティック情報を組み合わせて使用することで、ARオブジェクトがオクルージョンされない領域を定義したり、ニーズに応じてオクルージョンモードを絞り込むオプションを追加することができます。
この拡張機能には以下のオプションがある:
- オクルージョンの最適設定
- Optimal Occlusionモードは、オクルージョンを提供するために深度バッファがフレーム間でどのように変換するかを決定します。 3つのモードがある:
- Closest Occludee 画面全体からオブジェクトをサンプリングし、カメラに最も近い深度値を使用する。 このモードは、画面上に同じようなサイズと重要性を持つさまざまなCGオブジェクトがある場合に、最も説得力のあるオクルージョンを作成します。
- Specified Game Object: 特定のCGアセットまでの距離をサンプリングし、その特定のオブジェクトに対して最高品質のオクルージョンを提供します。
- Static: 深度テクスチャ全体で最も近いオブジェクトまでの距離をサンプリングする。 その名の通り、このモードは動かないオブジェクトに最適である。
- Optimal Occlusionモードは、オクルージョンを提供するために深度バッファがフレーム間でどのように変換するかを決定します。 3つのモードがある:
- Principal Occludee
- Principal Occludee は、 Specified Game Object オクルージョンモードを使用する際に、どのオブジェクトにフォーカスを当てるかを決定します。 この変数を設定しても、 Closest Occluder モードでは効果がありません。
- Occlusion Suppression (オクルージョンサプレッション)
- Occlusion Suppression: 特定のセマンティック・チャンネルのために、ユーザーが遠距離深度平面に深度値を予約することができます。 これは、オブジェクトが地面を動き回っているときにオクルージョンがちらつくなど、ノイズの多いデプス出力がモデルを誤ってオクルージョンするのを防ぐのに便利です。 このオプションを有効にすると、さらに3つのオプションが表示されます:
- Semantic Segmentation Manager(セマンティック・セグメンテーション・マネージャー)
- オクルージョン・サプレッションを使用するには、ここにSemantic Segmentation Managerをアタッチします。 詳しくは How to Setup Real World Occlusion をご覧ください。
- Suppression Channels(サプレッションチャンネル)
- サプレッションに使用するセマンティック・バッファ内のチャンネルのセット。 各チャンネルの名称を個別の名称としてリストに追加します。 多くのオクルージョンの問題に対する有効な総合的な解決策として、
ground
とsky
を追加することをお勧めします。
- サプレッションに使用するセマンティック・バッファ内のチャンネルのセット。 各チャンネルの名称を個別の名称としてリストに追加します。 多くのオクルージョンの問題に対する有効な総合的な解決策として、
- オクルージョンの安定化
- オクルージョン安定化(Occlusion Stabilization) シーン内の永続メッシュオブジェクトからレンダリングされた深度フィールドと組み合わせることで、瞬間的な深度バッファのばらつきを滑らかにします。 これにより、シーンの永続的な部分とのオクルージョンをより高品質にすることができます。 これを有効にすると、さらに2つのオプションが表示される:
- メッシュマネージャ: メッシュデプスブレンディングを使うには、ここにメッシュマネージャを取り付けます。 詳しくは How to Setup Real World Occlusion をご覧ください。
- カスタムマテリアルを使用する: Lightshipが提供する深度、セマンティクス、メッシュ深度入力を使って独自の背景シェーダを書きたい場合は、ここに独自のレンダリング素材を添付できます。
- オクルージョン安定化(Occlusion Stabilization) シーン内の永続メッシュオブジェクトからレンダリングされた深度フィールドと組み合わせることで、瞬間的な深度バッファのばらつきを滑らかにします。 これにより、シーンの永続的な部分とのオクルージョンをより高品質にすることができます。 これを有効にすると、さらに2つのオプションが表示される:
既知の制限
AROcclusionManager
と ARMeshManager
の両方を使用するシーンでは、メッシュの距離と深度バッファが近いが等しくない場合に、Z ファイティングが発生し、ちらつきが発生することがあります。 これらのマネージャーは一度に1つだけ使用することをお勧めします。
詳細情報
この機能の使い方については、 How to Setup Real-World Occlusion を参照してください。