TA Toolbox Home / TA Glossary

Draw Call Optimization: Principles, Batching, and Performance Improvement Guide

2026-08-24

What is a Draw Call

A Draw Call is a rendering command issued by the CPU to the GPU, instructing the GPU to draw a set of geometry. Each Draw Call includes render state setup, vertex data binding, and draw instructions. In real-time rendering, the number of Draw Calls is a key performance metric; too many Draw Calls can lead to CPU bottlenecks and lower GPU utilization.

Impact of Draw Calls on Performance

Each Draw Call incurs CPU overhead, including:

  • **State changes**: Switching render states like shaders, textures, and blend modes.
  • **Data submission**: Uploading vertex, index, and constant data to the GPU.
  • **Driver overhead**: Validation and scheduling by graphics APIs and drivers.

Modern GPUs can handle many Draw Calls, but the CPU often becomes the bottleneck. When Draw Calls are excessive (e.g., thousands), frame rates drop significantly, especially on mobile and low-end devices.

Optimization Methods

Batching

Batching combines multiple Draw Calls into one, reducing CPU overhead. Main approaches:

  • **Static Batching**: Combines static, non-moving objects into a single large mesh, provided they share the same material. In Unity, enable Static Batching.
  • **Dynamic Batching**: Merges small meshes at runtime for objects with the same material and low vertex counts. Unity limits dynamic batching to meshes with fewer than about 300 vertices.

Texture Atlasing

Combining multiple small textures into one large texture allows different objects to use the same material, promoting batching. Requires UV adjustment and careful texture space utilization.

GPU Instancing

For many identical meshes and materials (e.g., grass, trees), GPU instancing can draw multiple instances in one Draw Call, drastically reducing Draw Calls. In Unity and Unreal, materials must have instancing enabled.

Reduce Material and Shader Variants

Merge materials and reduce shader complexity. Using shared materials and texture atlases reduces state changes.

Use SRP Batcher (Unity)

Unity's Scriptable Render Pipeline (SRP) provides the SRP Batcher, which caches material properties to reduce CPU overhead, improving performance even without reducing Draw Calls.

Other Optimizations

  • **LOD (Level of Detail)**: Use lower-poly models for distant objects to reduce vertex processing.
  • **Occlusion Culling**: Skip rendering occluded objects, reducing Draw Calls.
  • **Frame Spreading**: Avoid creating many objects simultaneously.

Considerations for Batching

Batching requires conditions such as same material, same shader, same lightmaps, etc. Dynamic batching has vertex count limits and may increase memory. Over-batching can lead to excessively large meshes, affecting memory and load times. Therefore, choose optimization strategies based on scene characteristics.

FAQ

What is the difference between Draw Call and Batch?

A Batch is a rendering batch that may contain multiple Draw Calls (e.g., instancing). In Unity, the Batches statistic usually refers to the number of draw batches after batching.

Why does batching require the same material?

Because different materials imply different render states; batching requires uniform render states to combine.

What is the difference between static and dynamic batching?

Static batching merges meshes at build time for static objects; dynamic batching merges at runtime for small, movable meshes.

How does GPU instancing differ from batching?

GPU instancing allows one Draw Call to draw multiple instances of the same mesh but requires shader support, suitable for many repeated objects.

How to optimize Draw Calls on mobile?

On mobile, prefer static batching, texture atlasing, and GPU instancing, and keep Draw Calls within a few hundred.

FAQ

What is the difference between Draw Call and Batch?

A Batch is a rendering batch that may contain multiple Draw Calls (e.g., instancing). In Unity, the Batches statistic usually refers to the number of draw batches after batching.

Why does batching require the same material?

Different materials imply different render states; batching requires uniform render states to combine.

What is the difference between static and dynamic batching?

Static batching merges meshes at build time for static objects; dynamic batching merges at runtime for small, movable meshes.

How does GPU instancing differ from batching?

GPU instancing allows one Draw Call to draw multiple instances of the same mesh but requires shader support, suitable for many repeated objects.

How to optimize Draw Calls on mobile?

On mobile, prefer static batching, texture atlasing, and GPU instancing, and keep Draw Calls within a few hundred.