Batching moving GameObjects
How Unity batches moving GameObjects
Introduction to dynamic batching
Dynamic batching is a draw call batching method that batches moving GameObjectsThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary to reduce draw calls. Dynamic batchingAn automatic Unity process which attempts to render multiple meshes as if they were a single mesh for optimized graphics performance. The technique transforms all of the GameObject vertices on the CPU and groups many similar vertices together. More info
See in Glossary works differently between meshes and geometries that Unity generates dynamically at runtime, such as particle systemsA component that simulates fluid entities such as liquids, clouds and flames by generating and animating large numbers of small 2D images in the scene. More info
See in Glossary. For information about the internal differences between meshes and dynamic geometries, see Dynamic batching for meshes and Dynamic batching for dynamically generated geometries.
Note: Dynamic batching for meshes was designed to optimize performance on old low-end devices. On modern consumer hardware, the work dynamic batching does on the CPU can be greater than the overhead of a draw call. This negatively affects performance. For more information, see Dynamic batching for meshes.
Requirements and compatibility
This section includes information about the render pipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info
See in Glossary compatibility of dynamic batching.
Render pipeline compatibility
| Feature |
Universal Render Pipeline (URP) |
High Definition Render Pipeline (HDRP) |
Custom Scriptable Render Pipeline (SRP) |
Built-in Render Pipeline |
| Dynamic Batching |
Yes |
No |
Yes |
Yes |
Limitations
In the following scenarios, Unity either can’t use dynamic batching at all or can only apply dynamic batching to a limited extent:
- Unity can’t apply dynamic batching to meshes that contain more than 900 vertex attributes and 300 vertices. This is because dynamic batching for meshes has an overhead per vertex. For example, if your shaderA program that runs on the GPU. More info
See in Glossary uses vertex position, vertex normal, and a single UV, then Unity can batch up to 300 vertices. However, if your shader uses vertex position, vertex normal, UV0, UV1, and vertex tangent, then Unity can only batch 180 vertices.
- If GameObjects use different material instances, Unity can’t batch them together, even if they are essentially the same. The only exception to this is shadow caster rendering.
- GameObjects with lightmaps have additional renderer parameters. This means that, if you want to batch lightmapped GameObjects, they must point to the same lightmapA pre-rendered texture that contains the effects of light sources on static objects in the scene. Lightmaps are overlaid on top of scene geometry to create the effect of lighting. More info
See in Glossary location.
- Unity can’t fully apply dynamic batching to GameObjects that use multi-pass shaders.
- Almost all Unity shaders support several lights in forward renderingA rendering path that renders each object in one or more passes, depending on lights that affect the object. Lights themselves are also treated differently by Forward Rendering, depending on their settings and intensity. More info
See in Glossary. To achieve this, they process an additional render pass for each light. Unity only batches the first render pass. It can’t batch the draw calls for the additional per-pixel lights.
Batching moving GameObjects
How Unity batches moving GameObjects
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。