UnityのDrawCallについて調べてみました。
DrawCallって何??
スクリーンにオブジェクトを描画するために,描画エンジンはOpenGLやDirect3DのグラフィックAPIにドローコール(draw call)を発行しなければいけません。どんな一回のドローコールでも多くのグラフィックAPIの集まりが必要になります。つまりこれはCPUパフォーマンスのオーバーヘッドに重大な影響をもたらします。
(公式ドキュメントから抜粋 http://docs.unity3d.com/ja/current/Manual/DrawCallBatching.html)
何やら難しそうなことが書かれていますがUnityが何かしら描画する回数でこれが大きいと処理が重くなる、という風に解釈します。
確認方法
今作成している画面でどのくらいDrawCallが発行されているかを確認するには「Stats」を使います。
Unityゲームビューの右上にある「Stats」ボタンを押すとグラフィックに関するパフォーマンス状況を確認できます。今はシーンを作ったばかりで何もオブジェクトがないのでDrawCallsは0となっています。
画像を置いてみる
画像1つ追加したのでStats内のDrawCalls数が1となりました。
もうひとつ追加します。
2つ画像を表示していますが、DrawCallsは1のままです。同じ画像の場合は増えないみたいです。
別画像を追加するとDrawCallsが2に増えました。
この画面ではDrawCallsは2ですが実際に画面を作るとなると様々な画像を使い要件を満たしていくことになり、その度にDrawCallsは増えていきます。そこで工夫が必要となっていきます。
この記事ではAtlasを使ってDrawCallsを削減する方法を紹介します。
Atlasとは??
Atlasとは複数の画像をひとつにまとめたものです。
Atlasの作り方
ここではNGUIを使ったAtlasの作成方法を紹介します。
Project内に適当なフォルダを作成し、その中に適当な画像ファイルを格納します。
格納した画像ファイルを選択し、右クリック > NGUI > Open Atlas Makerを順にクリックすると、Atlas Makerウィンドウが開きます。
「create」を押下すると保存場所と名前の入力を求められ、Atlasが作成されます。(ここではTestという名前をつけました)
次にメインメニューのNGUI > Create > Sprite でSpriteを作成し、Inspectorで使用するAtlasを指定して、使用するSpriteを指定します。
先ほどと同じように2つの画像を表示させました。ですが今回はAtlasで一つの画像にまとめているのでDrawCallsは1のままです。
このようにしてDrawCallsを削減することができます。ほかにも方法はありますがまた別の機会にまとめようと思います。
Atlas化は便利ですが、まとめる画像に気をつけないとAtlas自体の容量が大きくなるので注意が必要です。
以上、簡単ではありますが、DrawCallsとAtlasを使ったDrawCallsの削減方法のまとめでした。最後までお読みいただきありがとうございました。