読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ダイナミックバッチの条件

Unity

ドローコールバッチは複数の描画をまとめて処理してくれる機能だ。これを上手く使えばドローコール(描画命令)の数を大幅に間引けるので、使えないのと比較するとパフォーマンスが全く違う。

ドローコール バッチング
http://docs-jp.unity3d.com/Documentation/Manual/DrawCallBatching.html

スクリーンショット 2013-05-10 0.16.12

ただし条件次第ではダイナミックバッチングが動作しないらしい。自分は「ポリゴン少なく」「マテリアルが同一」で「スケールが大体同じ」なら概ね動くといった認識だったが、もう少し色々な条件があったのでメモしておこうともう。

・マテリアルが同一
 (スクリプトで値を変えるとマテリアルを複製して使う特性に注意)
・スケールが同一
・頂点数が900(UV情報を使っているなら300)以下
・ライトマップを受けていない
・影が投影されていない
・サブシェーダーを使っていない
・同一レイヤーで描画
・アルファを含むテクスチャが重ねない(?)
 (確認する限り、アルファ有りを重ねてもバッチングされている。謎)
・メッシュを圧縮しない(何故かバッチングされなくなる)

もっと他にも条件があるかもしれない。
漏れがある場合は指摘してくれると嬉しい。


追記

sharedMaterialを使うとバッチングを維持したままマテリアルの値を変更出来ると思うが、同一マテリアルのすべての色が変わる。注意