A sphere of cubes.
In the case of cubes, I only end up with eight batches, so all cubes are rendered in
six batches. That's 4994 fewer draw calls, reported as
Saved by batching
in the
statistics panel. In my case it also reports a much higher frame rate. 83 instead of 35
fps. This is a measure of the time to render a frame, not the actual frame rate, but
it's still a good indication of the performance di!erence. The cubes are faster to draw
because they're batched, but also because a cube requires far less mesh data than a
sphere. So it's not a fair comparison.
As the editor generates a lot of overhead, the performance di!erence can be much
greater in builds. Especially the scene window can slow things down a lot, as it's an
extra view that has to be rendered. I have it hidden when in play mode to improve
performance.
1.2 Supporting Instancing
GPU instancing isn't possible by default. Shaders have to be designed to support it.
Even then, instancing has to be explicitly enabled per material. Unity's standard
shaders have a toggle for this. Let's add an instancing toggle to MyLightingShaderGUI
as well. Like the standard shader's GUI, we'll create an
Advanced Options
section for
it. The toggle can be added by invoking the MaterialEditor.EnableInstancingField
method. Do this is a new DoAdvanced method.