Back to blog
·FrameDoctor Team

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.

unityrenderingdraw-callsurp

"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:

  • Set the GPU state (shader, textures, buffers)
  • Issue the draw command
  • Wait for the command buffer to accept it
  • 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?

    PlatformTarget 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:

  • Shader must be SRP-compatible (all URP/HDRP shaders are)
  • Objects using MaterialPropertyBlock will break batching
  • Static 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:

  • Different materials — Even the same shader with different textures
  • MaterialPropertyBlock — Breaks SRP Batcher
  • Different mesh — GPU Instancing requires same mesh
  • Non-uniform scale — Breaks static batching
  • Too many vertices — Dynamic batching limit is 300 verts
  • 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.*