オクルージョンカリングの使用方法
Tutorial
·
intermediate
·
+10XP
·
20 mins
·
(7)
Unity Technologies

本チュートリアルでは、オクルージョンカリングを使って、3D Unity プロジェクトのレンダリングとパフォーマンスを最適化する方法を学びます。
Languages available:
1. オクルージョンカリングを使う
検証済み:2019.4LTS
このチュートリアルでは、オクルージョンカリングを使って 3D Unity プロジェクトのレンダリングとパフォーマンスを最適化する方法を学びます。オクルージョンカリングを使うと、他のゲームオブジェクトによって完全に隠された(遮蔽された)ゲームオブジェクトを無効にします。これにより、カメラに映らないオブジェクトをレンダリングするために、CPU や GPU の時間を無駄にすることがなくなります。
オクルージョンカリングはプリパスで計算されるため、シーンのジオメトリがランタイムでインスタンス化または生成されるプロジェクトには適していません。オクルージョンカリングの理想的な使用例は、廊下、壁、山、建物などでお互いに隠されている明確なゾーンやエリアがあるシーンです。
2. オクルージョンカリングの準備
1. シーンの中で、Static Occluders(他のゲームオブジェクトをブロックすることができるゲームオブジェクト)や Static Occludees(他のゲームオブジェクトにブロックされることができるゲームオブジェクト)とみなされるべきゲームオブジェクトを特定します。
Static Occluders は、Mesh または Terrain Renderer を持ち、不透明で、ランタイムには動きません。例としては、壁、建物、山などがあります。Static Occluder として指定されたゲームオブジェクトで LOD グループを使用する場合、ベースの LOD(LOD0)が計算に使用されます。
Static Occludees は、あらゆるタイプのレンダラーを持ち、ランタイムには動きません。例としては、低木のようなレベルの装飾や、隠される可能性のあるゲームオブジェクトなどがあります。
ゲームオブジェクトは両方になることができます。動的ゲームオブジェクトは遮蔽されることはありますが、他のゲームオブジェクトを遮ることはできません。
2. Static Occluder にしたいゲームオブジェクトを全て選択します。右上の Static Editor Flags ドロップダウンを使って、Occluder Static プロパティを設定します (画像 01)。

画像 01:SouthWall を Static Occluder に設定します
3. Static Occludees についても同様の作業を繰り返します。Occluders と Occludees であるゲームオブジェクトには、両方のフラグを設定します。
4. シーン内の各 Camera の Inspector で Occlusion Culling が有効になっていることを確認します(画像 02)。

画像 02:Camera の Occlusion Culling を有効にします
3. オクルージョンカリングデータ生成のためのベイク
1. Occlusion Culling ウィンドウを開くには、Window ドロップダウンを使って Rendering > Occlusion Culling の順に選択します。
2. Occlusion Culling ウィンドウには 3 つのビュー (Object、Bake、Visualization) があります。
Object ビューでは、Hierarchy ビューを素早くフィルタリングして、関連するゲームオブジェクトやオクルージョンエリア (Occlusion Area) のみを表示したり、Occlusion Area を作成したりすることができます (画像 03)。デフォルトでは、シーン全体がグローバルなオクルージョンエリアとして扱われます。シーンのレイアウトによっては、個別にオクルージョンエリアを設定することも可能です。

画像 03:オクルージョンエリアの新規作成
Bake ビューでは、Occlusion Culling 計算のデフォルト値を設定することができます (画像 04)。
Smallest Occluder は、他のオブジェクトを非表示にするために使用されるオブジェクトの最小サイズです。
Smallest Hole は、カメラから見ることのできるジオメトリ間のもっとも小さな隙間を表します。 この設定より小さい穴や隙間は無視されます。
Backface Threshold は、裏面をテストすることで不必要なディティールを削減し、データサイズを最適化しています。デフォルト値の 100 は、堅牢で、データセットから裏面を削除することはありませんが、この設定の理想的な値はプロジェクトごとに異なります。

画像 04:オクルージョンカリングのデフォルトパラメーターの設定
Visualization により、ユーザーは Camera Volumes、Visibility Lines、Portals を確認して、オクルージョンデータがどのように計算されているかを理解することができます (画像 05)。

画像 05:選択したカメラに基づきオクルージョンデータを可視化する
3. すべてのビューで、オクルージョンカリングのデータを Clear (削除) または Bake (ベイク) するオプションがあります。
4. Bake をクリックします。オクルージョンデータの準備にかかる時間は、シーンの複雑さやオクルージョンカリングの設定によって異なります。
4. オーバードローの可視化
3D レンダリングのプロセスは、カメラから最も遠いジオメトリから始まります。これは Overdraw (オーバードロー) と呼ばれています。Scene ビューでは、Overdraw モードを有効にすることで、これを可視化できます (画像 06)。

画像 06:Overdraw の可視化
5. まとめ
オクルージョンカリングは、Camera ビューのゲームオブジェクトのみにレンダリングを制限することで、パフォーマンスを最適化する簡単な方法です。これはパフォーマンスを最適化するための 1 つの方法に過ぎませんが、プロジェクトを最適化するための他の方法については「Optimizing for Performance」プロジェクトをご覧ください。