名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

UnityのScaleとバッチング処理の関係

皆さん、明けましておめでとうございます!SAT-BOXのカメです。

今年も面白い記事をたくさんお届け出来るように頑張ります!

 

さて、今回はUnityの負荷対策機能のバッチング処理で気になったことを書いていこうと思います。

まず、バッチング処理についてですが、簡単に説明すると同じオブジェクトを一括して読み込むことで負荷を軽減する機能です。この機能を有効にするには条件がいくつかあるので、ここで全てを説明することは割愛します。

気になったのはその条件の内の一つで「Transform にミラーを含む場合はオブジェクトはバッチ処理されない」についてです。オブジェクトのTransformに負符号を入力するとオブジェクト位置やメッシュなどが反転しますが、その影響によりバッチング処理から外されるとのことでした。こちらを確認していきたいと思います。


それでは早速、消しゴムくんに協力して貰い確認していきましょう!

f:id:sat-box:20220114084811p:plain

Unityでシーンを再生中にゲーム画面の右上にあるStatsボタンを押すと、画像のように表示中のオブジェクトの負荷を簡易的に確認できます。「Batches」と「SetPass calls」に注目して確認していきましょう。このSetPass callsがデータの読み込み回数であり、この数値が増えると処理負荷も増えていきます。

 

f:id:sat-box:20220114085441p:plain

もう一人消しゴムくんに来て貰いました。両方ともScaleは全て1にしています。

Batchesが増えて、SetPass callsは変わりませんね。これは正常にバッチング処理が効いている状態です。

 

f:id:sat-box:20220114090824p:plain

試しに片方のScaleを変更して見ましょう。一人目の消しゴムくんをにょ~んと伸ばしました。この状態でもBatchesが増えて、SetPass callsは変わりません。Scaleはミラー状態で無い限りは、変更してもバッチング処理が効くようですね。

 

f:id:sat-box:20220114091647p:plain

ここから本題です。片方のScaleの内、Y成分を-1にしてミラー状態にしてみましょう。Batchesが増えていますが、SetPass callsも増えていますね。つまり、この二人の消しゴムくんは別のメッシュとして読み込まれているということです。Batchesが増えているのは、ミラー状態のメッシュの括りでバッチング処理を行っているからですね。

 

f:id:sat-box:20220114092758p:plain

それではScaleのうち、2つの成分をマイナスにしてミラー状態から戻すとどうなるのでしょう?先程ミラー状態にした消しゴムくんの親オブジェクトのZ成分を-1にしてみました。BatchesとSetPass callsが元に戻りましたね。

 

まとめると、バッチング処理とScaleの関係はミラー状態かそうでないかで変わり、Scaleの大きさには影響しない。親を含めたScale成分で負符号の数が同じであれば、そのオブジェクト同士でバッチング処理がされるみたいです。

同じオブジェクトを大量に配置したい時には、バッチング機能を上手く利用してあげましょう!

 

それでは今回はここまでと致します。

一段と寒くなってきましたが、皆さん体調には気をつけてお過ごしください。

以上、カメでした!