背景の小物を並べ、木を植え、敵を増やす——シーンが賑やかになるほどフレームレートが落ちていく。Gameビューの「Stats」を開くと、Batchesの数字が数千に膨れ上がっている。犯人は ドローコール(Draw Call) です。
ドローコールとは、CPUからGPUへの「このメッシュを、このマテリアルで描いて」という描画命令のこと。GPUの描画能力にはまだ余裕があるのに、命令を出すCPU側が先に限界を迎える——これがドローコール過多の典型症状です。
この記事でわかること
- ドローコールがなぜCPUの負荷になるのか(レストランの注文メタファー)
- 現状把握——StatsウィンドウとFrame Debugger
- 削減テクニック4つの使い分け——SRP Batcher・スタティックバッチング・GPUインスタンシング・ダイナミックバッチング
- マテリアルを共有させるテクスチャアトラス
- 実践:賑やかな森ステージのBatchesを実際に減らす
動作確認環境: Unity 6 (6000.x)/URP
目次
Sponsored
ドローコールとは——注文票のたとえ
CPUとGPUの関係は、ウェイター(CPU)と厨房のシェフ(GPU) に似ています。シェフの調理(描画)は速いのですが、ウェイターは注文票1枚ごとに厨房へ往復し、そのたびに「使う食材(テクスチャ)」「調理法(シェーダー設定)」を伝え直さなければなりません。
- レンダリングステートの設定: どのシェーダー・テクスチャ・ブレンドモードを使うかをGPUに設定する
- 描画命令の発行: 「描画実行」の命令(ドローコール)を出す
問題は、マテリアルが変わるたびにこの「伝え直し」が発生することです。赤い車と青い車はメッシュが同じでも、マテリアルが違えば別々の注文になります。オブジェクト1,000個がそれぞれ別マテリアルなら、毎フレーム1,000回の往復——CPUはこれだけで手一杯になります。

対策の方向はひとつです。 「同じ注文はまとめて1枚の伝票にする」——これが バッチング(Batching) です。
まず現状を数える——StatsとFrame Debugger
最適化の前に、計測 から始めます。
- Statsウィンドウ: Gameビュー右上の「Stats」で Batches(実質のドローコール数)と SetPass(シェーダー/マテリアル切り替え回数。ProfilerではSetPass Calls)を確認できます。まずこの2つの数字を覚えておきます。Unity 6.4 以降は表示が変わり、Draw Calls の内訳として SRP Batcher などに分けて表示されます。
- Frame Debugger: 「Window > Analysis > Frame Debugger」で1フレームの描画を1ドローコールずつ再生できます。何がどの順で描かれているか、そして 「なぜ前のドローコールとまとめられなかったか」の理由まで表示してくれます。ドローコール調査の本命ツールです。
削減テクニックの使い分け
| 手法 | 対象 | ひとこと |
|---|---|---|
| SRP Batcher | URP/HDRPのほぼ全オブジェクト | 現行の主役。同じシェーダーなら効く |
| スタティックバッチング | 動かないオブジェクト | 効果大。Staticフラグを立てるだけ |
| GPUインスタンシング |