【Unity】オクルージョンカリングしてみる

Unityではオクルージョンカリングという機能が使えます。
どんな機能かというと、カメラに映らないオブジェクトはレンダリングしないよ〜ってやつです(なんてテキトーなw)。
VRやAR、モバイル端末アプリをやってると、処理を軽くする必要があるわけで。
これがどのくらい有効なのか、検証してみました。

開発環境 

  • Unity 2019.2.15f1
  • Japanese Otaku City(アセット)

秋葉を疾走

今回はオクルージョンカリングの機能を存分に発揮できるよう、秋葉の街を再現したアセットを使用しました。

assetstore.unity.com

ZENRINさん提供の無料アセットです。無料にも関わらず、結構な再現率。
さらにQueryちゃんというカワイコちゃんモデルまでついてくるという。
なんて太っ腹なんだ、ZENRINさん!!(秋葉以外もあるよw)

f:id:s44511173:20200316001154g:plain

デモシーンでは車だったりQueryちゃんだったりが、秋葉の街を疾走してくれます。
まずはこのデモシーンをオクルージョンカリングなしで実行してみます。

 

f:id:s44511173:20200316001028g:plain

左側の大きい画面がScene View、右下の小さい画面がカメラ映像となっています。
カメラ映像に写っている建物は一部であるにも関わらず、すべての建物がScene Viewに写っているのがわかりますね。

f:id:s44511173:20200316001530p:plain

Profiler Windowで負荷状況を見てみます。
だいたい18fps程度出ていることがわかりました。

オクルージョンカリングの設定

詳しくはこちらw

docs.unity3d.com

 

まず、オクルージョンカリングしたい対象に対し、Static設定を行います。
今回は建物たちを対象としたいので、建物のルートオブジェクトを選択し、InspectorからOcculuder StaticOcculudee Staticを選択します。

f:id:s44511173:20200315235749p:plain

 

ルートオブジェクトの下にいる子オブジェクトたちも一緒に設定したいので、Yes, change childrenを選択。

f:id:s44511173:20200316001203p:plain

 

次に、Occulusion Windowsを表示します。

f:id:s44511173:20200316001800p:plain

Smallest Occuluderでは、対象とするオブジェクトの最小サイズを設定します。とりあえず1を設定しましたが、建物が対象なのでもっと大きくて良いと思います。
画面右下のBakeボタンを押下してベイクしたら、実行してみましょう。

オクルージョンカリングしてみたらこうなった

f:id:s44511173:20200316001146g:plain

先ほどと同様、左側がScene View、右下がカメラ映像です。
カメラ映像はなんら遜色が無いのに対し、レンダリングされている建物が切り替わっているのがわかりますね。
次に負荷状況を見てみましょう。

f:id:s44511173:20200316002140p:plain

うわーぉ!!劇的な変化です!!
だいたい58fpsくらい出ていることがわかりました。これはすごい!!

 

結論

  1. たくさんのオブジェクトを配置する場合、オクルージョンカリング機能を使おう
  2. Profiler Windowで負荷状況を確認しよう
  3. ZENRINさんのアセットは優秀!サンキューZENRINさん!!