Unity Occlusion Cullingの設定を調べてドローコールを減らしたい。
今朝はUnityのオクルージョンカリングについて調べる。
オクルージョンカリングはUnityのレンダリング負荷を軽減する機能です。
ゲーム画面を映すカメラから表示されていない物体はレンダリングしないようにする機能です。設定なしは、映ってない物体でも内部でガリガリ描画処理が走るということです。
カメラに映らないオブジェクトの描画をしないことによって、CPUやGPUの負荷を軽減しているようです。
設定はオブジェクトを選択した時にInspecter欄のStatic横のプルダウンから選択します。
Occuluderが他オブジェクトを遮蔽するもので、Occuludeeは遮蔽されるものとしての設定です。両方選択可能。
オクルージョンカリング対象にする設定方法
1.オクルージョンカリングを行いたいオブジェクトを選択する。(複数可)
2.Inspecter右上のStatic横のプルダウンメニューを選択する。
3.Occluder StaticとOccludee Staticにチェックを入れる。
また、この時に他のオブジェクトを遮る事が全くないオブジェクトについてはOccluderのチェックは不要。これを外す事によってオクルージョンカリング実行時の判定をしなくて良くなるので負荷の低減につながる。
オクルージョンカリングウィンドウを開いて、オクルージョンカリングの設定を行います。
UnityメニューバーのWindow->Rendering->Occlusion Cullingで開いて設定画面を開く事が出来る。そのウィンドウにてBakeを行い、オクルージョンカリングの設定を行う。
Smallest Occluderは、遮蔽する可能性があるオブジェクトに設定する値で、m単位の数値を設定する。
例えば5と設定すると、5mよりも大きいオブジェクトはその背後に隠れたOccludee Staticオブジェクトをカリング(選抜除去、除外)する。その為レンダリング時間の節約になりパフォーマンスが向上する。大きくすると負荷軽減につながる項目
Smallest Holeの値は、隙間から覗けるオブジェクトのサイズ。この値が大きいほど負荷は減り、この値を小さくすると、建物と建物の間の隙間からカメラに映るオブジェクトとして判定されるため、サイズの値が小さいとBake時の負荷が高まる。大きくすると負荷軽減につながる。
Backface Thresholdは、オブジェクトの裏側のメッシュをUnity側で削減するかどうかの値で100だと削減されず、値が100未満から削減される。5とかにすると積極的に削減されるので値が小さいほどドローコールが減り、負荷の軽減になる。小さくすると負荷軽減につながる。
オクルージョンカリングは3Dゲームのドローコールを大幅に削減できる機能なので広大なフィールドほど効果は高いと思われる。逆に狭くてオブジェクトがたくさんある空間では遮蔽が発生しにくい為、効果は出にくいと思われる。