【Unity】死ぬ気でSetPassCallsを節約する

Cluster,Inc. Advent Calendar 2018、3日目の記事です。

qiita.com

モバイルやVR開発、Mac向けの開発などで、親の仇のようにSetPassCallsを節約したくなることはあると思います。 そういったときに、どこに気をつけて最適化していくと劇的な効果を得られるかについて解説していきます。

もちろん品質とのトレードオフにはなるので、そこはゲームに合わせて調整してください。 また、SetPassCallsではなくOverDrawやメモリ使用量などがボトルネックになっていることも多いので、重いときには単純にSetPassCallsを減らせば良い、というわけではないという点に注意してください。

今回の犠牲者はこちらのアセットとなります!

assetstore.unity.com

ちなみに、今回使ったUnityは2019.1.0a10で、PostEffectが動かなかったためあらかじめ削除してあります。

初期状態

f:id:notargs:20181130180405p:plain

初期状態では175SetPassCalls前後でした。

ライトを焼く

f:id:notargs:20181130180458p:plain f:id:notargs:20181130181005p:plain

まず、Mixed Lightingにチェックを入れ、ライトを全てRealtimeからBakedにしてGenerate Lightingします。描画品質は下がりますが、今回の目的は描画コスト削減なので気にしません!

f:id:notargs:20181130180927p:plain

これだけで75前後までSetPassCallksを削減できました!

ReflectionProbeを削除する

ReflectionProbeは地味にSetPassCallsを増やすので、思い切って6つほどあったものを1つにします。 f:id:notargs:20181130181659p:plain

更に70前後までSetPassCallsを減らせました。 f:id:notargs:20181130181703p:plain

GPU Instancingにチェックを入れる

ポチポチとMaterialのEnable Instancingにチェックを入れていきます。

f:id:notargs:20181130182027p:plain

66前後まで減りました。 f:id:notargs:20181130182437p:plain

LightWeightRenderPipelieneを入れる

これまでいろいろ解説してきましたが、上記のことをしなくても、単にLightweightRenderPipelineを導入することで55SetPassCallsまで減らすことができます。

f:id:notargs:20181130183723p:plain

f:id:notargs:20181130183642p:plain

LWRPはスゴイ!!早くprevew外れてverifideになってくれ~~!!!