MAT002
Enable GPU Instancing drops a material out of the SRP Batcher
The SRP Batcher and GPU Instancing are two different batching paths, and under URP/HDRP the material’s Enable GPU Instancing flag decides which one you get: with it ticked, the material is excluded from the SRP Batcher. That matters because the SRP Batcher is the one doing most of the work in a typical SRP scene — it batches different meshes sharing a shader variant, which is the common case, while instancing needs many copies of the same mesh.
What the scan looks at
Material assets with enableInstancing set, in a project whose active render pipeline is URP or HDRP. Info severity, and phrased as a review prompt rather than a defect — there are scenes where instancing is the right call.
Why it costs you
The SRP Batcher wins by keeping material properties resident in GPU memory and issuing cheap per-object draws; it does not care that your props are all different meshes. GPU Instancing wins by collapsing many copies of one mesh into a single draw. Blanket-enabling instancing swaps the first for the second on materials that mostly need the first.
This is why “enable GPU Instancing on everything” is bad advice under an SRP, even though it was harmless-to-good under Built-in. It’s also why we don’t report missing GPU Instancing as a finding — under an SRP that would be actively wrong advice.
How to fix it by hand
Ask what the material is actually used by:
- Many copies of the same mesh, dynamic (foliage, projectiles, pooled enemies, debris) → keep instancing on. This is the case it’s for.
- A variety of meshes sharing this material → untick it and let the SRP Batcher have it.
- Static geometry → untick it; static batching preempts instancing entirely (MAT004).
- Skinned meshes only → untick it; instancing never applies to skinned rendering (MAT005).
To verify either way, use the Frame Debugger and look at what the batches are actually called — SRP Batch versus Draw Mesh (instanced) — rather than trusting the setting.
What PerfLint does about it
Report-only. Which batching path a given material should take depends on how it’s used across scenes, prefabs, and runtime spawns — a scan sees a subset of that, so this is surfaced as something to review, not a button. The two scene-grounded cases where instancing provably does nothing (static-batched, skinned-only) get their own findings, because there the evidence is in the scene.
Check your own project. The scan is free, runs entirely on your machine, and reports this rule with the exact assets that trip it — nothing is uploaded.
Last reviewed · All rules