Version: 2021.1
言語: 日本語
傾斜錐台の使用
オクルージョンカリングの準備

オクルージョンカリング

オクルージョンカリングは、ゲームオブジェクトが他のオブジェクトに隠されていてビューに表示されない (隠されている) ときに、オブジェクトのレンダリング演算を行わない機能です。

すべてのフレームで、カメラはシーン内のレンダラーを調べ、描画する必要のないものを除外 (cull) するカリング操作を実行します。デフォルトでは、カメラは 錐台カリング を実行します。これにより、カメラの視錐台内におさまらないすべてのレンダラーが除外されます。ただし、錐台カリングは、レンダラーが他のゲームオブジェクトによって隠されているかどうかをチェックしないため、Unity は、最終フレームに表示されないレンダラーに対するレンダリング操作で CPU と GPU 時間を無駄に消費する可能性があります。オクルージョンカリングは、Unity がこれらの無駄な操作を実行するのを防ぎます。

通常の錐台カリングでは、カメラビュー内のすべてのレンダラーがレンダリングされます。
通常の錐台カリングでは、カメラビュー内のすべてのレンダラーがレンダリングされます。
オクルージョンカリングは、近くのレンダラーによって完全に隠されているレンダラーを削除します。
オクルージョンカリングは、近くのレンダラーによって完全に隠されているレンダラーを削除します。

オクルージョンカリングを使用する場合

オクルージョンカリングによってプロジェクトのランタイムパフォーマンスが向上するかどうかを判断するには、以下を考慮します。

  • 無駄なレンダリング操作を防ぐことで、CPU 時間と GPU 時間の両方を節約できます。Unity のビルトインのオクルージョンカリングは、CPU 上でランタイムの計算を行います。これは、節約する CPU 時間を相殺します。したがって、オーバードローによりプロジェクトが GPU バインドされている場合、オクルージョンカリングは大抵、パフォーマンスを向上させます。
  • Unity は、ランタイムにオクルージョンカリングのデータをメモリに読み込みます。このデータをロードするのに十分なメモリがあることを確認する必要があります。
  • オクルージョンカリングは 、小さく適切に定義されたエリアが固体のゲームオブジェクトによって互いに明確に区切られているシーンで最適に機能します。廊下でつながれた部屋がその一般的な例です。
  • オクルージョンカリングを使用して動的ゲームオブジェクトを遮蔽できますが、動的ゲームオブジェクトは他のゲームオブジェクトを遮蔽することはできません。ランタイムにシーンジオメトリを生成する場合、Unity のビルトイン のオクルージョンカリングはプロジェクトに適していません。

オクルージョンカリングの仕組み

オクルージョンカリングは、Unity エディターでシーンに関するデータを生成し、ランタイムにそのデータを使用してカメラが何を見ることができるかを決定します。データを生成するプロセスはベイクと呼ばれます。

オクルージョンカリングのデータをベイクする場合、Unity はシーンをセルに分割し、セル内のジオメトリと隣接するセルの可視性を説明するデータを生成します。Unity は可能な場合はセルをマージし、生成されたデータのサイズを削減します。ベイク処理を設定するには、Occlusion Culling ウィンドウ でパラメーターを変更し、シーンの Occlusion Areas を使用します。

ランタイムに、Unity はこのベイクしたデータをメモリにロードし、Occlusion Culling プロパティが有効な各カメラに対して、データに対するクエリを実行して、そのカメラが何を見ることができるかを決定します。オクルージョンカリングを有効にすると、カメラは錐台カリングとオクルージョンカリングの両方を実行します。

その他の参考資料

Unity は Umbra ライブラリを使用してオクルージョンカリングを行います。Umbra に関する詳しい情報は、その他の資料 を参照してください。

傾斜錐台の使用
オクルージョンカリングの準備