【Unity】死ぬ気でSetPassCallsを節約する
Cluster,Inc. Advent Calendar 2018、3日目の記事です。
モバイルやVR開発、Mac向けの開発などで、親の仇のようにSetPassCallsを節約したくなることはあると思います。 そういったときに、どこに気をつけて最適化していくと劇的な効果を得られるかについて解説していきます。
もちろん品質とのトレードオフにはなるので、そこはゲームに合わせて調整してください。 また、SetPassCallsではなくOverDrawやメモリ使用量などがボトルネックになっていることも多いので、重いときには単純にSetPassCallsを減らせば良い、というわけではないという点に注意してください。
今回の犠牲者はこちらのアセットとなります!
ちなみに、今回使ったUnityは2019.1.0a10で、PostEffectが動かなかったためあらかじめ削除してあります。
初期状態
初期状態では175SetPassCalls前後でした。
ライトを焼く
まず、Mixed Lightingにチェックを入れ、ライトを全てRealtimeからBakedにしてGenerate Lightingします。描画品質は下がりますが、今回の目的は描画コスト削減なので気にしません!
これだけで75前後までSetPassCallksを削減できました!
ReflectionProbeを削除する
ReflectionProbeは地味にSetPassCallsを増やすので、思い切って6つほどあったものを1つにします。
更に70前後までSetPassCallsを減らせました。
GPU Instancingにチェックを入れる
ポチポチとMaterialのEnable Instancingにチェックを入れていきます。
66前後まで減りました。
LightWeightRenderPipelieneを入れる
これまでいろいろ解説してきましたが、上記のことをしなくても、単にLightweightRenderPipelineを導入することで55SetPassCallsまで減らすことができます。
LWRPはスゴイ!!早くprevew外れてverifideになってくれ~~!!!