(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


オブジェクトがカメラに映らない時は描画しないようにして負荷削減する機能 オクルージョンカリング【Unity】【最適化】【Occlusion Culling】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2020.3.25f1


はじめに

Unityにはオクルージョンカリング(Occlusion Culling)という

カメラに映ってないオブジェクトは描画しない負荷削減のための機能があります。



イメージとしては以下のような感じで負荷削減の効果も高く、

3Dゲームにはほぼ必須と言ってもいいぐらいの機能です。

f:id:kan_kikuchi:20220401075439g:plain


ただし、自動で機能するわけではなく簡単な設定が必要なため、今回はその解説記事です!


なお、記事中では以下のアセットを使っています。

Low Poly Ultimate Pack | 3D Props | Unity Asset Store



オクルージョンカリング

さっそく設定方法ですが、まずCameraのOcclusion Cullingにチェックを入れます。

f:id:kan_kikuchi:20220331075337p:plain


次に他のオブジェクトを隠すオブジェクトのOccluder Staticにチェック

他のオブジェクトから隠されるオブジェクトのOccludee Staticにチェックを入れます。

(どちらも該当する場合は両方にチェック、Staticにチェックを入れると全部有効になる)

f:id:kan_kikuchi:20220331074432p:plain


あとはWindow/Rendering/Occlusion Cullingからウィンドウを開き、

f:id:kan_kikuchi:20220331074633j:plain


Bakeすれば、

f:id:kan_kikuchi:20220331074710p:plain


カメラに映ってない物は自動で描画されないようになります。

(Occlusionのウィンドウを開いていればSceneでも確認可能)

f:id:kan_kikuchi:20220401075439g:plain


これによりSetPass callsが減るので、負荷も大きく減ります。

f:id:kan_kikuchi:20220401075358p:plain
f:id:kan_kikuchi:20220401075407p:plain


なお、Bake時の設定値の意味は以下の通りで、特にSmallest Occluderは

デフォルトで結構大きい値が設定されているので、調整する必要があるかもしれません。

  • Smallest Occluder : 遮蔽物の最小サイズ、値が小さい程に精度が上がるがデータサイズが増える
  • Smallest Hole : 遮蔽物と遮蔽物の間の最小値、値が小さい程に精度が上がるがデータサイズが増える
  • Backface Threshold : モデルの裏面(見えない所)のメッシュを削除する割合、下げるほど削除される


f:id:kan_kikuchi:20220401075541p:plain


ちなみBakeした結果のデータは

シーンと同名のディレクトリに格納されているOcclusionCullingDataになります。

f:id:kan_kikuchi:20220401075616p:plain