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

  1. 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.
  2. In the Universal Renderer asset, set Rendering Path to Forward+. The drawer is not used with the Forward or Deferred paths in URP.
  3. 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

Step 4: verify instead of guessing

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.

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.