Rendering submission and batching

Unity Draw Calls and Batching: Choose the Right Optimization

Read Unity's rendering counters correctly and choose an optimization that addresses the expensive work, rather than chasing a single number.

Alexandr RiceFollow on X Updated October 4, 20266 min readUnity 6

Screenshots: Unity 6000.0.62f1 · URP 17.0.4 · macOS Metal. A small demonstration scene illustrates the controls and rendering mechanisms. Editor timings are not device benchmarks. Click any screenshot to enlarge it.

Draw calls, batches and SetPass calls describe different work

A draw call submits geometry for rendering. A scene object can contribute to more than one draw through material slots, submeshes, shadow and depth passes, or multiple cameras. An object count is therefore not a reliable draw-call count.

A batch groups work according to a particular rendering mechanism. SetPass calls describe changes to the shader pass used for drawing. These numbers explain different parts of submission; none is a direct measurement of GPU milliseconds. Unity defines the counters in Game View Rendering Statistics and the Rendering Profiler.

The goal is to reduce expensive work within a frame-time budget. A scene with fewer draws can still be slower if each draw shades many pixels with a costly shader. Begin with the rendering diagnosis workflow before deciding that submission is the bottleneck.

Step 1: record the workload and its timing

Run a repeatable camera view with fixed resolution and quality settings. In Game View, open Stats for a quick inspection. Record batches, SetPass calls and triangles, and note that the displayed timing belongs to the Editor environment.

Game View Statistics shows Batches, Saved by batching, Tris, Verts and SetPass calls as separate fields. The displayed FPS and CPU times are this Editor sample, not a target-device performance claim.

For a serious comparison, connect the Profiler to a Player on the intended device. Record CPU rendering work, GPU duration where supported and the Rendering module counters. Save the camera route and capture conditions, so the later comparison does not accidentally use a different visible workload.

Rendering Profiler details report Draw Calls 10, Batches 6 and SetPass Calls 3 for one Editor Play Mode frame. The separate static batching and instancing sections explain why the counters should not be treated as synonyms.

Use this initial capture to choose a question. Are there many tiny submissions? Frequent state changes? Repeated draws of one resource? Or a few large events with expensive pixel work? The right experiment depends on the answer.

Step 2: inspect the events that create the counters

Open Window > Analysis > Frame Debugger, select the relevant target and enable it. Expand camera and pass groups. Select a suspicious event and inspect the mesh, material, shader, pass, keywords and render target.

Frame Debugger groups the demonstration's opaque work into an SRP Batch, an instanced draw and a final blit. This Edit Mode capture predates the occlusion bake and is a different capture from the Play Mode profiler sample.

Be explicit about the capture context. The three visible top-level drawing events in this example do not mean there were three ordinary draw calls. Event grouping and counters answer different questions. Neither this tree nor its grouping measures event duration.

Inspect each camera and major pass that matters. A prop can appear cheap in the main color pass while still contributing to shadows or another camera. Removing an extra camera or pass may be a more direct experiment than rearranging every material in the scene.

Step 3: find avoidable material, shader and pass splits

Select a group of repeated contributors and compare their actual references. Identical names and appearance do not prove shared materials. Review material instances created by scripts, unnecessary material slots, active keywords, transparency ordering and pass differences.

The selected repeated prop references one Cube mesh and one shared InstancingMaterial. Inspecting references is more useful than assuming that visually identical props belong to the same render group.

For SRP work, select a batch and read its draw count and the reason for a boundary with adjacent work. Different shader variants can separate compatible content. Batch cause describes why the selected SRP event could not join the previous one; it is not a general ranking of expensive objects. See Frame Debugger event information.

A single SRP Batch event contains 54 Draw Calls in this Edit Mode capture. SRP Batcher organizes submission work; this event is not one merged draw.

Choose one concrete split to investigate. For example, remove an accidental material copy from a few repeated props, or compare a material with an unnecessary feature disabled. Keep other state fixed so that a changed counter has an understandable cause.

Step 4: choose the method that matches the workload

Use the render pipeline, renderer type and measured bottleneck to narrow the options. Unity's draw-call optimization guidance is pipeline-specific; older advice to enable every batching switch is not a useful default for Unity 6.

MethodCandidate workloadMain check or trade-off
SRP BatcherCompatible SRP content using suitable shader variants.Reduce CPU setup cost; individual draws remain.
GPU instancingRepeated matching mesh/material pairs.Verify actual instance events and representative mesh cost.
GPU Resident DrawerEligible Unity 6 URP GameObject rendering.Check its platform, shader and renderer requirements separately.
Static batchingSuitable immovable geometry.Compare submission, combined geometry memory and visibility behavior.
Dynamic batchingEligible small meshes on a suitable platform.CPU vertex processing can exceed the submission cost saved.
LOD or visibility changesUnnecessary detail or hidden contributors.Reduce work actually submitted while preserving image quality.
The tutorial URP asset shows GPU Resident Drawer disabled. This condition keeps the instancing demonstration separate from that Unity 6 rendering option.

Static batching and manually combining meshes are different decisions. Static batching works with suitable static geometry; manually merging objects into one mesh changes their individual culling boundary. Avoid combining an entire level into one object as a first experiment.

Dynamic batching transforms eligible vertices on the CPU. That extra work is why it can be a poor trade-off on modern hardware, and why Unity does not recommend it as a general default. See the mesh batching limitations. Do not turn it on just to increase “Saved by batching.”

Follow the complete instancing setup or SRP compatibility guide for that specific experiment. If hidden or distant content dominates, try occlusion culling or LOD optimization.

Step 5: validate total cost, not only a lower count

Disable Frame Debugger and compare the same target-device route with one change applied. Inspect CPU and GPU timing where supported, relevant counters, memory and visual behavior. A successful submission optimization should improve the work it targets without an unacceptable cost elsewhere.

CPU Usage lets you inspect the cost behind rendering counters. This demonstration capture targets Editor Play Mode and includes EditorLoop; use a Player capture for device acceptance.

Interpret the outcome in context. SRP Batcher can improve CPU rendering time while draw-call counts stay similar. Instancing can reduce submissions without reducing shaded pixels. More aggressive mesh combination can lower submissions while increasing visible geometry. Fewer SetPass calls can coexist with a shader that is still expensive.

There is no universal “good” draw-call count. Build a budget from representative devices, scenes and frame-time targets. Preserve the conditions and mechanism behind the result so the next optimization starts from evidence instead of a number detached from its workload.

Frequently asked questions

What is a draw call in Unity?

A draw call submits rendering work for geometry. One scene object can contribute to several draws through its submeshes, materials, shadow passes, depth passes and cameras.

Are draw calls and SetPass calls the same?

No. Draw calls describe submitted drawing work; SetPass calls describe shader-pass changes. Compare both alongside CPU time and the actual rendering events.

Does SRP Batcher reduce draw calls?

SRP Batcher reduces CPU work for preparing and submitting compatible draws. It does not merge all participating meshes into one draw call, so draw-call counts can remain unchanged.

Should I enable dynamic batching in Unity 6?

Treat it as a measured, platform-specific option. It transforms eligible mesh vertices on the CPU, and that work can cost more than the submission overhead it saves. It is not a general default recommendation.

Is combining all meshes a good optimization?

Usually it is too broad a first experiment. Manual mesh combination removes individual visibility decisions for the combined mesh and can increase work when only a small part is visible. Compare a bounded group and preserve useful culling granularity.

Sources and version notes

Official Unity 6.0 documentation, checked October 4, 2026. Match the documentation version to your project.

Continue the investigation · A 7 Wolves tool

Trace heavy groups back to their contributors

GPUSight helps group workload by material, shader, pass, camera and scene, then inspect the contributing objects and resources. Rankings guide investigation; use Unity's frame events and timing to validate the rendering path and cost.

Explore GPUSight