This is an old revision of the document!
Static Batching
- See
StaticBatchingUtility.Combine
to batch meshes at runtime.
Static Batching in Unity creates a Read-Only mesh named “Combined Mesh (root: <root-game-object>)”, with a Submesh for each batched renderer. Unity invokes a separate draw call for each range of indices within the combined mesh buffer.
Note that this means Unity does not actually render the entire batch in a single draw call. As they mention, truly merging all meshes would make culling vastly less effective.
Instead, the performance comes from issuing fewer material / mesh change state operations (in OpenGL at least). In a lot of ways, this ends up being more similar to SRP Dynamic Batching.
Baking Lightmap UV Coordinates
The lightmap coordinates from Lighting Data Asset are baked into the Combined Mesh UV coordinates when the scene loads1). Afterwards, querying meshRenderer.lightmapScaleOffset
will return the old scale and transform, even though it has been baked into the mesh. Technically, in the render pipeline, all of these meshes have a lightmapST (scale/transform) of '(1,1,0,0)'. 2)