Unity合批优化:静态与动态合批全解析

发布时间:2026/7/2 2:59:03

Unity合批优化:静态与动态合批全解析 在游戏开发尤其是使用 Unity 引擎中合批Batching是减少 Draw Call渲染调用、提升游戏帧率最核心的优化手段。它的核心原理是将多个物体的网格Mesh合并在一起用一次渲染指令发给 GPU。静态合批和动态合批各有其严格的触发要求下面为您详细梳理一、 静态合批Static Batching的要求静态合批适用于在游戏运行过程中绝对不会移动、旋转或缩放的物体如建筑、道路、大树等。核心要求必须勾选 Static物体的 Inspector 面板右上角必须勾选Batching Static或者直接勾选全套Static。材质球必须相同所有要合批的物体必须使用同一个材质球如果是不同物体通常需要将它们的纹理打包到一张图集 Atlas 中并共享同一个材质。网格Mesh可以不同这是静态合批的优势即便正方体、长方体、石头样式各异只要材质相同就能合批。不能有动态位移运行时物体不能发生任何 Transform位置、角度、缩放的改变。⚠️代价与限制静态合批是以空间换时间。Unity 会在打包或加载时将这些静态物体的网格合并成一个巨大的新网格。如果一个相同的场景道具比如一棵树被复制了 100 次并做静态合批内存中就会执行 100 次网格拷贝导致内存占用暴增。二、 动态合批Dynamic Batching的要求动态合批适用于正在移动的、小型的轻量级物体如粒子、飞镖、零散的小道具。由于它是在 CPU 运行时每帧实时计算合并的所以为了不让 CPU 崩溃限制极其苛刻。核心要求材质球必须相同与静态合批一样必须使用同一个材质Renderer.sharedMaterial。顶点属性限制最核心限制动合批的网格物体其顶点属性Vertex Attributes数量不能超过 900 个。如果 Shader 使用了顶点坐标、法线、UV 坐标那么该网格的顶点数不能超过 300 个。如果还用了切线Tangent顶点数限制会更低。缩放Scale限制物体不能有非等比缩放比如 X 放大 2 倍Y 放大 1 倍。镜像缩放如缩放值为负数-1也会导致合批失败。光照贴图Lightmap一致物体必须指向光照贴图中的同一个位置或者都没有光照贴图。Shader 限制不能使用多 PassMulti-pass的 Shader否则会打破合批。三、 快速对比表特性静态合批 (Static Batching)动态合批 (Dynamic Batching)适用对象静止不动的物体场景建筑等移动的小物体粒子、道具等物体网格大小没有限制大网格也可以极小通常顶点数 300材质要求必须相同必须相同性能损耗点增加内存消耗、包体变大增加每帧的 CPU 计算开销运行时能否移动绝对不能可以移动 现代引擎的趋势如果你使用的是 Unity 的新渲染管线URP 或 HDRP你可能会发现动态合批在很多情况下默认是被关闭的。因为现代优化更倾向于使用SRP BatcherSRP 合批或GPU InstancingGPU 实例化SRP Batcher它不限制顶点数甚至不要求物体网格相同它不合并网格而是通过在显存中缓存材质的 CBuffer常量缓冲区来极大地减少渲染上下文切换的开销。GPU Instancing适合数量巨大且网格完全相同的动态物体例如满地的草、大批量的士兵不仅不耗 CPU还能完美合批。

相关新闻