Skip to content

简介

静态合批(Static Batching)是一种绘制调用批处理方法,用于将不移动的 网格体(Mesh)组合起来以减少 绘制调用(Draw Call)。静态合批将组合后的网格物体转换为世界空间,并为它们构建一个共享顶点和索引缓冲区。此时渲染网格时只需要执行一次绘制调用,使用此组合网格一次绘制批次中的所有带有 网格渲染器(Mesh Renderer)的 游戏对象(Game Object)。 静态合批可以显著减少绘制调用的次数,提升渲染性能。

基础要求

当前版本的 SandMod 支持在构建场景时对符合条件的 游戏对象(Game Object)进行 静态合批(Static Batching)处理。

  • 游戏对象处于 启用(Enable)状态。

【Static_Batching001.png】

  • 该游戏对象的移动性为非静态的。

【Static_Batching002.png】

  • 游戏对象有 网格渲染器(Mesh Renderer)组件(Component),并且该组件已启用。

【Static_Batching003.png】

  • 网格渲染器组件引用了 网格(Mesh)。

【Static_Batching004.png】

  • 引用的网格的顶点数大于 0。

【Static_Batching005.png】

  • 引用的网格尚未与另一个网格合并。

值得注意的是,如果进行静态合批的游戏对象所引用的网格顶点属性不相同,比如一个网格使用了更多的顶点属性,例如:UV1、UV2 和顶点切线,而另一个网格没有这些额外属性,那么系统就无法对他们进行静态合批操作。因为顶点数据的结构不同,渲染时需要单独处理。

如何静态合批处理

  • 打开项目设置窗口,您可以参阅 项目设置 章节查看显示项目设置窗口的方法。

  • 在项目设置窗口中点击 渲染(Render)条目,然后将 静态合批(Static Batch)属性设置为 勾选(True),将游戏项目设置为允许静态合批。

【Static_Batching006.png】

  • 在 场景编辑器(Scene Editor)的 场景预览窗口(Scene)或者 层级窗口(Hierachy)中选择一个或多个需要合批处理的 游戏对象(Game Object),并在 检视窗口(Inspector)中将该游戏对象的移动性设置为静态的。关于游戏对象移动性的定义和具体配置方法请参阅 游戏对象移动性 章节。

【Static_Batching007.png】

如果指定的静态网格体满足 基础要求 小节中描述的标准,系统在运行该游戏项目时会自动将它们合批处理到同一 绘制调用(Draw Call)中。

性能影响

使用 静态合批(Static Batching)需要额外的内存空间来存储组合的几何图形。如果多个 游戏对象(Game Object)使用相同的网格,系统会为每个游戏对象创建一个网格副本,并将每个副本插入到组合的网格中。这意味着相同的几何体会多次出现在组合网格中。如果您想保持较小的内存占用,您可能必须牺牲渲染性能并避免某些游戏对象的静态合批。


静态合批(Static Batching)可以包含的顶点数量是有限制的。每个静态批次最多可包含 64000 个顶点。如果有更多,系统会自动创建另一个批次。