概要
OcclusionCullingを試してみたくて簡単なサンプルを作ってみたのですが、遮蔽物に隠れたオブジェクトが思ったように消えてくれませんでした。その時の事を共有したいと思います。
ちなみにOcclusionCullingとは、壁や建物の裏側に隠れているプレイヤーから見る事の出来ないオブジェクトを描写対象から除外する事で処理の負担を減らす技術です。
本文
まずこのような環境を用意しました。
カメラの前に遮蔽物(赤い壁)があり、その奥にカメラからは見えない物(青い箱)があります。
2つのオブジェクトにはOccluder StaticとOccludee Staticを設定しました。
(Occluder Staticは遮蔽する側、Occludee Staticは遮蔽される側に設定します。両方つけても大丈夫です)
次にOcclusionCullingの設定画面を表示します
Window > Rendering > Occlusion Culling
Bakeタブを選び下にあるBakeボタンを押します。(上手くいかない時はSmallestOccluderを小さい数字にします)
OcclusionのVisualizationタブを選ぶとSceneビューの右下にあるOcclusionCullingがVisualizeになり、OcclusionCullingの動作を確認できます。ですが、この段階で青い箱は赤い壁に遮られているのに表示されたままです。
本題
OcclusionCullingでEditを選ぶとOcclusionAreaを確認する事ができます。OcclusionCulling対象オブジェクトの周囲がワイヤー表示されていますが、遮蔽されたオブジェクトが消える為には この範囲内にカメラが入る
必要があります。
オブジェクトを何も選択していない状態でOcclusionのobjectタブを選ぶとOcclusionAreaを新規で作るボタンが表示されます。ここからOcclusionAreaを追加する事ができます。
(CreateEmptyで空のオブジェクトを作った後OcclusionAreaをAddComponentしても同様の事ができます)
OcclusionAreaを適度な大きさにして
再度Bakeすると
今度は遮蔽された青い箱が消えました
補足1
カメラを動かすと赤い壁も消えたりすると思います。これはFrustumCullingというカメラの撮影範囲外(例えばカメラの真後ろとか)のオブジェクトを描写しないようにする機能の影響です(こっちは設定をしなくてもUnityが標準で行ってくれる機能です)
補足2
OcclusionCullingでオブジェクトが消える様子を確認できるのは右下にOcclusion Cullingが表示されている時だけです。動作が確認できない時はここも確認してみてください!