Quick answer: The GPU Resident Drawer only takes over when its requirements are met: URP's Forward+ rendering path, BatchRendererGroup Variants set to Keep All in Graphics settings, a graphics API with compute shader support, and objects drawn by MeshRenderers with compatible shaders. Everything else falls back to the SRP Batcher silently, so verify with the Rendering Debugger and Frame Debugger.
The GPU Resident Drawer is one of Unity 6's headline features: it moves eligible GameObjects onto the BatchRendererGroup path and can cut CPU rendering cost dramatically in scenes with many repeated meshes. When a requirement is missing it does not warn you; your scene simply renders the old way.
Step 1: enable it correctly
- In your URP Asset, under Rendering, set GPU Resident Drawer to Instanced Drawing. If you use several URP assets for quality levels, set it on each one you ship.
- In the Universal Renderer asset, set Rendering Path to Forward+. The drawer is not used with the Forward or Deferred paths in URP.
- In Project Settings > Graphics, under shader stripping, set BatchRendererGroup Variants to Keep All, so the shader variants the drawer needs are included in builds.
HDRP has an equivalent setting in its pipeline asset.
Step 2: check the platform
The drawer needs compute shader support. It is not used on OpenGL ES, and on platforms or devices without compute support Unity falls back. If you profile on a phone or a WebGL build, confirm the API the build actually uses.
Step 3: check which objects qualify
- MeshRenderers only. Skinned meshes, particle systems, terrain and sprites go through their own paths.
- Compatible shaders. URP and HDRP shaders and Shader Graph shaders support the required instancing path. Custom hand-written shaders need DOTS instancing support, or those objects fall back.
- Unsupported per-object features. Unity's documentation lists cases the drawer skips, such as renderers that rely on per-object render callbacks or certain light probe modes. Check the list for your Unity version if a specific object refuses to move over.
Step 4: verify instead of guessing
- Window > Analysis > Rendering Debugger has a GPU Resident Drawer section with statistics about instances and batches handled by the drawer.
- The Frame Debugger shows draws issued through the BatchRendererGroup path. If your scene's draws still appear as individual SRP Batcher draws, the drawer is not picking them up.
- Compare CPU frame time in the Profiler with the drawer on and off. Benefits appear mostly in the render thread and main thread rendering work.
When you should not expect a big win
The drawer shines with many instances of the same meshes and materials: forests, cities, modular interiors. A scene of a few hundred unique objects may see little change, and the first frames after loading can be slower while instance data is uploaded. It also works well with GPU Occlusion Culling, which is a separate URP option that requires the drawer.
Works in the editor, not in the build
If it works in Play mode but not in a player build, the usual cause is stripped shader variants: recheck BatchRendererGroup Variants: Keep All, and confirm the URP asset assigned to the build's quality level has the drawer enabled.
Rendering changes and device coverage
Rendering path changes are the kind of improvement that helps most devices and breaks a few. Bugnet's Unity SDK records frame-rate and memory snapshots and the GPU on every report, so after enabling the drawer you can check whether any device class got worse, and errors from the build arrive grouped with their stack traces.
Related problems
- Fix: Unity SRP Batcher Incompatible After Material Property Block
- Optimizing Draw Calls for Better Game Performance
- Fix: Unity URP Shader Not Rendering in Build
Frequently asked questions
Why is the GPU Resident Drawer not reducing draw calls in Unity 6?
Usually because URP is not on the Forward+ rendering path, BatchRendererGroup Variants is not set to Keep All, the platform lacks compute shaders, or the objects are not MeshRenderers with compatible shaders.
How do I check if the GPU Resident Drawer is active?
Open the Rendering Debugger and look at the GPU Resident Drawer statistics, and check the Frame Debugger for BatchRendererGroup draws.
Does the GPU Resident Drawer work with skinned meshes?
No. It handles MeshRenderer objects. Skinned meshes, particles and terrain use their own rendering paths.
Forward+, Keep All, compute shaders, MeshRenderers. Miss one and it quietly does nothing.