Uninomicon

Documenting the dark corners of the Unity Engine.

User Tools

Site Tools


static_batching

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
static_batching [2021/12/11 21:40]
guycalledfrank [Lightmap UV Coordinates]
static_batching [2021/12/12 23:11]
starasgames Added a bit of informaton about how static batching works in Editor
Line 18: Line 18:
  
 Static batching is done at build-time, so mobile developers should be aware that static batching can unexpectedly increase your build size. Static Batching can result in significantly more mesh data being generated, if many batch meshes are created. Static batching is done at build-time, so mobile developers should be aware that static batching can unexpectedly increase your build size. Static Batching can result in significantly more mesh data being generated, if many batch meshes are created.
 +
 +In the Editor static batching occurs after the scene is loaded (after Awake and OnEnable). It is considered a [[https://issuetracker.unity3d.com/issues/static-batching-is-inconsistent-with-the-editor-when-used-in-player-build|bug]].
  
 ==== Lightmap UV Coordinates ==== ==== Lightmap UV Coordinates ====
Line 31: Line 33:
 This is the data sent by the SRP batcher for each draw call: https://blog-api.unity.com/sites/default/files/2019/02/Screen-Shot-2019-02-27-at-3.50.52-PM.png This is the data sent by the SRP batcher for each draw call: https://blog-api.unity.com/sites/default/files/2019/02/Screen-Shot-2019-02-27-at-3.50.52-PM.png
  
-This data is efficiently managed by the engine and uploaded to the GPU as fast as Unity can. The idea is to abuse some of these built-in values to pass custom data.+This data is efficiently managed by the engine and uploaded to the GPU as fast as Unity can. The idea is to abuse some of these built-in values to pass custom data. Good candidates are ''unity_DynamicLightmapST'' (Enlighten data, still uploaded even if non-Enlighten lightmaps are used) and ''unity_RenderingLayer'' (its value is directly alterable in MeshRenderer UI).
  
-When using custom SRP and SRP batching, the recipe is following:+When using SRP batching, the recipe is following: 
 + 
 +''renderer.realtimeLightmapIndex = 0;'' forces "real-time lightmapped"" behaviour on the renderer (also not really required on objects using a regular static lightmap)
  
-''renderer.realtimeLightmapIndex = 0; // forces "real-time lightmapped" behaviour on the renderer (also not really required on objects using a regular static lightmap)'' 
 ''renderer.realtimeLightmapScaleOffset = Vector4 of custom data'' ''renderer.realtimeLightmapScaleOffset = Vector4 of custom data''
  
  
-''drawingSettings.perObjectData = PerObjectData.Lightmaps | otherStuffYouNeed;''+For custom SRPs: ''drawingSettings.perObjectData = PerObjectData.Lightmaps | otherStuffYouNeed;'' 
 + 
 +On the GPU you should have a ''UnityPerDraw'' cbuffer with ''float4 unity_DynamicLightmapST'' in it, and it will be filled with custom data. Note that this cbuffer is already present in standard shaders of existing RPs.
  
-On the GPU you should have a UnityPerDraw cbuffer with float4 unity_DynamicLightmapST in it, and it will be filled with custom data. 
  
-Note that the "drawingSettings" settings is only relevant for custom SRPs; in existing RPs it should likely just work as is, as they all support lightmapping in the main pass anyway.+Note that the "drawingSettings" part is only relevant for custom SRPs; in existing RPs it should likely just work as is, as they all support lightmapping in the main pass anyway.
static_batching.txt · Last modified: 2021/12/13 19:18 by uninomiconadmin