カリングを設定してゲームの処理負荷を軽減する
カリングについて学んだのでまとめていきます。
そもそもカリングってなんじゃい
簡単に言うなら描画するものとしないものとで分ける処理のこと。どうやらUnityのデフォルトではフラスタムカリングを使っているらしい。
フラスタムカリング
見てみるとなんてことは無く、シーンビューでよく見るコレのこと
この範囲内のものは描写して範囲外のものは描写しないのがフラスタムカリング
カリング範囲の設定はカメラのインスペクターから可能。Farのデフォルト値が1000と広すぎるので100もあれば十分な気がする。
オクルージョンカリング
こっちが本題
オクルージョンカリングは、あるオブジェクトが他のオブジェクトに隠されていて現在カメラに映らないときに、オブジェクトのレンダリングを無効にする機能です
隠れてるオブジェクトは描写されないのでより処理負荷が低いカリング。ただ設定が少し面倒くさい。
オクルージョンカリングでは遮蔽物と遮蔽される物(?)をなんやかんやして分ける必要があります。
触ってみる
最初にこのように適当なオブジェクトを配置。フラスタムカリングであれば後ろのオブジェクトは見えなくても描写されますが、これをオクルージョンカリングで描写されないようにしてみます。
手前の大きいオブジェクトをWallとしてインスペクターからOccluderとOccludeeにチェック。奥の小さいオブジェクトをCubeとしてインスペクターからOccludeeにチェック。ついでに床を静的オブジェクトとしておきます
Occluderは遮蔽するもの、Occludeeは遮蔽されるものにつけます。これでWallがCubeを遮蔽するという関係を作れました。
ベイクしてみる
ウィンドウ → レンダリング → オクルージョンカリングからオクルージョンタブを開きます。
遮蔽物の最小値
遮蔽物として扱うオブジェクトの大きさの最小値。この数値より小さいオブジェクトはOccluderをつけていても遮蔽物としてカウントしないので後ろのオブジェクトも描写されます
最小の穴
隙間として扱う最小値。この数値より大きい隙間空間は後ろのオブジェクトがカリングされない。
裏面のしきい値
背面ポリゴンを考慮するかどうかの値。低いほどデータは軽くなるけど両面描写したいオブジェクトには向かないかも?
設定したら右下からベイクが出来ます。実際に挙動を確認する際には隣の可視化(Visualization)タブでメインカメラをグリグリ動かしてみよう。
おわりに
3Dゲームはモバイルだとなかなか処理負荷が高いのでこういったところで負荷を軽減させていきたいところ。ちなみに遠くのものはカリングしにくかったりするらしい。