個人的勉強メモ置き場

プログラミングど素人のメモ置き場

カリングを設定してゲームの処理負荷を軽減する

カリングについて学んだのでまとめていきます。

そもそもカリングってなんじゃい

簡単に言うなら描画するものとしないものとで分ける処理のこと。どうやらUnityのデフォルトではフラスタムカリングを使っているらしい。

 

フラスタムカリング

docs.unity3d.com

 

見てみるとなんてことは無く、シーンビューでよく見るコレのこと

 

f:id:zykb:20201012104345g:plain

 

この範囲内のものは描写して範囲外のものは描写しないのがフラスタムカリング

 

f:id:zykb:20201012104956p:plain

 

カリング範囲の設定はカメラのインスペクターから可能。Farのデフォルト値が1000と広すぎるので100もあれば十分な気がする。

 

オクルージョンカリング

こっちが本題

docs.unity3d.com

 

オクルージョンカリングは、あるオブジェクトが他のオブジェクトに隠されていて現在カメラに映らないときに、オブジェクトのレンダリングを無効にする機能です

隠れてるオブジェクトは描写されないのでより処理負荷が低いカリング。ただ設定が少し面倒くさい。

 

オクルージョンカリングでは遮蔽物と遮蔽される物(?)をなんやかんやして分ける必要があります。

 

触ってみる

最初にこのように適当なオブジェクトを配置。フラスタムカリングであれば後ろのオブジェクトは見えなくても描写されますが、これをオクルージョンカリングで描写されないようにしてみます。

 

f:id:zykb:20201012114005p:plain

 

手前の大きいオブジェクトをWallとしてインスペクターからOccluderとOccludeeにチェック。奥の小さいオブジェクトをCubeとしてインスペクターからOccludeeにチェック。ついでに床を静的オブジェクトとしておきます

f:id:zykb:20201012114645p:plain

Wall

f:id:zykb:20201012114648p:plain

Cube

Occluderは遮蔽するもの、Occludeeは遮蔽されるものにつけます。これでWallがCubeを遮蔽するという関係を作れました。

 

ベイクしてみる

ウィンドウ → レンダリング → オクルージョンカリングからオクルージョンタブを開きます。

 

f:id:zykb:20201012115630p:plain

 

遮蔽物の最小値 

遮蔽物として扱うオブジェクトの大きさの最小値。この数値より小さいオブジェクトはOccluderをつけていても遮蔽物としてカウントしないので後ろのオブジェクトも描写されます

 

f:id:zykb:20201012120923p:plain

最小値 10

f:id:zykb:20201012121027p:plain

最小値 1


最小の穴

隙間として扱う最小値。この数値より大きい隙間空間は後ろのオブジェクトがカリングされない。

 

裏面のしきい値

背面ポリゴンを考慮するかどうかの値。低いほどデータは軽くなるけど両面描写したいオブジェクトには向かないかも?

 

設定したら右下からベイクが出来ます。実際に挙動を確認する際には隣の可視化(Visualization)タブでメインカメラをグリグリ動かしてみよう。

 

おわりに

3Dゲームはモバイルだとなかなか処理負荷が高いのでこういったところで負荷を軽減させていきたいところ。ちなみに遠くのものはカリングしにくかったりするらしい。