Understanding Draw Calls and Batching in Unity URP
Draw calls are the most misunderstood performance metric in Unity. Learn what they actually are, when they matter, and how to reduce them.
"Reduce your draw calls" is the most common optimization advice in Unity — and the least specific. How many is too many? When do they actually matter? And which batching method should you use?
Let's break it down.
What Is a Draw Call?
A draw call is a command from the CPU to the GPU: "render this mesh with this material." Each draw call has overhead because the CPU must:
The overhead is on the CPU side, not the GPU. This is why draw calls matter most on mobile — weaker CPUs with slower driver implementations.
How Many Is Too Many?
| Platform | Target Draw Calls |
|---|---|
| Mobile (low-end) | < 500 |
| Mobile (high-end) | < 1,000 |
| Console | < 2,000 |
| PC | < 3,000 |
These are guidelines, not hard limits. Profile your actual target device.
Batching Methods in URP
SRP Batcher
The SRP Batcher doesn't reduce draw calls — it makes them cheaper. It caches shader properties on the GPU, so state changes between draws are faster.
Enable it: URP Asset → Advanced → SRP Batcher ✓
Requirements:
MaterialPropertyBlock will break batchingStatic Batching
Combines meshes that never move into a single draw call at build time.
Best for: Environment props, buildings, terrain details
Limitation: Increases memory (stores combined mesh) and build time
GPU Instancing
Renders multiple copies of the same mesh in one draw call.
Best for: Grass, trees, particles, repeated objects
Enable it: Material Inspector → Enable GPU Instancing ✓
Dynamic Batching
Combines small meshes (< 300 vertices) at runtime. Generally not worth it in URP — the CPU cost of combining often exceeds the draw call savings.
Recommendation: Disable it unless profiling shows clear benefit.
Common Batch Breakers
These prevent Unity from batching objects together:
How to Debug
Use the Frame Debugger (Window → Analysis → Frame Debugger) to see every draw call and why batches break.
Or upload your profiler data to FrameDoctor — we'll analyze your batch break reasons and tell you exactly which objects to fix.
*Struggling with too many draw calls? Try FrameDoctor free — get an AI-powered breakdown of your rendering pipeline with specific batching recommendations.*