URP mobile: SRP Batcher & GPU Instancing confusion — “Node have different shaders”, “Saved by batching: 0”, instancing not showing

Hey folks,

I’m building a small mobile game with URP. I’m the artist/asset person on the team (not a programmer), so I might be missing something obvious on the rendering side.

-Render Pipeline: URP 14.0.12 (SRP Batcher checked)
-Unity version: 2022.3.62f2
-Platform: Android/iOS
-Levels are spawned as prefabs at runtime, so I can’t rely on editor Static Batching.

I want;
different meshes that share the same material should benefit from SRP Batcher (low SetPass) and
exact duplicates (same mesh + same material) should use GPU Instancing (single/few draw).

what im seeing;
in Frame Debugger I sometimes get SRP: First call from ScriptableRenderLoopJob (expected), but other draws break with ‘SRP: Node have different shaders.’ The weird part is those renderers look like they use the same shader/material.
Also Saved by batching stays at ‘0’ (I know it’s Static/Dynamic, not SRP Batcher, just noting it).
I can’t clearly verify instancing: in Stats it doesn’t increase, and in Frame Debugger I don’t see DrawInstanced / Instances:N.
Typical numbers: Batches 250–280, SetPass 13.

and i tried;
For SRP Batcher groups: material Enable GPU Instancing = OFF, Shader Graph Enable Instancing Variants = OFF.
For instanced groups: Enable GPU Instancing = ON, Instancing Variants = ON.
All renderers point to the same .mat (no duplicated materials).
Keywords/settings are aligned (normal/detail/emission/receive shadows, opaque/queue 2000, etc.).
Most objects use Light/Reflection Probes = Off.
My Camera inspector doesn’t expose ‘Per Object Data’ toggles in this Unity/URP version.

so in this point i have so many questions;

  1. Exactly when does ‘SRP: Node have different shaders’ trigger? Can it be different pass (ForwardLit vs DepthOnly), a renderer feature, or an instancing variant split (INSTANCING_ON/OFF) even if the shader name is the same?
  2. With Shader Graph Enable Instancing Variants ON: if some renderers use materials with Enable GPU Instancing ON and others OFF, will that split SRP Batcher groups?
  3. In 2022.3/URP 14, what’s the most reliable way to confirm instancing is active—is the Frame Debugger’s DrawInstanced / Instances:N line the right thing to trust?
  4. Since we can’t use editor Static Batching, what’s a practical workflow to mix SRP Batcher + Instancing?
  5. When Frame Debugger says ‘different shaders,’ which fields should I compare between the two draws?
  6. Can you help me pls?

Game stats

also if i turn off the srp batcher i get these numbers:

                                                       205.2 FPS (4.9ms)

Cpu: main 2.9ms render thread .8ms
Batches: 96 Saved by batching: 226
.
.
.
SetPass calls: 45

Thanks a lot for any pointers!

Hi

  1. Is when you have different shaders from GPU perspective, every shader variant and every shader feature create new shader. so your shader file contain most of the time thousands of shaders. every shader pass, render pipeline, shader feature and even more will be new shader.

  2. yes

  3. depends on what instansing type you try to find. but instances in frame debugger is number of instance in one batch and it can be srp batch hybrid batch. May be gpu instanced drawcall too , I’m not sure.

  4. In most of the time Hybrid batches faster than GPU instancing (unity 6 resident drawer or manual BatchRederGroups in 2022). For GPU Instancing you want to use it when you have around 1000 same objects to draw. If you have At least 200 you can try and compare performance.

  5. Different Keywords or shader files. id shader not srp compatible then almost everything :slight_smile:

  1. NO. Same mesh with different materials will benefit from srp batcher. but gpu resident drawer of unity 6 can do what you want because if will load all your meshed into on giant buffer so technically they all become one mesh and than srp batcher can draw efficiently.

  2. NO. This is exactly for SRP batcher. for GPU instancing you want at leas 200 of those to have perf improvements. And again GPU resident drawer can do most of work for you. Try it. :slight_smile:

Thank you so much for your answers :slight_smile: