BatchBreakingCause

by Unity-Technologies

Unity-Technologies / BatchBreakingCause

This project demonstrates different cases when Unity has to break a batch while rendering.

237 Stars 48 Forks Last release: Not found 5 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Batch Breaking Cause

This project demonstrates different cases when Unity has to break a batch while rendering.
Best used with Unity 5.6b4+ where the Frame Debugger window shows why Unity had to start a new batch.

Causes

  • Additional Vertex Streams — the object has additional vertex streams set using MeshRenderer.additionalVertexStreams.
  • Deferred Objects on Different Lighting Layers — the object is on a different light layer.
  • Deferred Objects Split by Shadow Distance — one of the objects is within shadow distance, the other one is not.
  • Different Combined Meshes — the object belongs to another combined static mesh.
  • Different Custom Properties — the object has a different MaterialProperyBlock set.
  • Different Lights — the object is affected by a different forward light.
  • Different Materials — the object has a different material.
  • Different Reflection Probes — the object is affected by a different reflection probe.
  • Different Shadow Caster Hash — the objects either have different shadow caster shaders, or have different shader properties / keywords that affect the output of the shadow caster pass.
  • Different Shadow Receiving Settings — the objects either have different "Receive Shadows" settings, or some objects are within the shadow distance, while some other objects are not.
  • Different Static Batching Flags — the object has different static batching settings.
  • Dynamic Batching Disabled to Avoid Z-Fighting — dynamic batching is turned off in Player Settings or disabled temporarily in the current context to avoid z-fighting.
  • Instancing Different Geometries — rendering different meshes or sub-meshes with GPU instancing.
  • Lightmapped Objects — the object uses a different light map or has different light map uv transformations within the same light map.
  • Lightprobe Affected Objects — the object is affected by different light probes.
  • Mixed Sided Mode Shadow Casters — objects have different "Cast Shadows" settings.
  • Multipass — the object is using a multi-pass shader.
  • Multiple Forward Lights — the object is affected by multiple forward lights.
  • Non-instanceable Property Set — non-instanced properties are set for an instanced shader.
  • Odd Negative Scaling — the object has odd negative scaling (e.g. (1, -1, 1)).
  • Shader Disables Batching — the shader explicitly disables batching with the "DisableBatching" tag.
  • Too Many Indices in Dynamic Batch — there are too many indices (more than 32k) in a dynamic batch.
  • Too Many Indices in Static Batch — there are too many indices in the combined mesh of a static batch. The limit is 48k indices on OpenGL ES, 32k on OSX and 64k on other platforms.
  • Too Many Vertex Attributes for Dynamic Batching — a submesh we are trying to dynamically batch has more than 900 vertex attributes.
  • Too Many Vertices for Dynamic Batching — a submesh we are trying to dynamically batch has more than 300 vertices.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.