静态批处理如何在Unity3D中工作

时间:2016-11-30 16:09:56

标签: unity3d batching

我正在为VR平台开发360视频播放器应用,并期待为移动平台优化它。这时我有一个关于静态批处理的问题。

假设我有一个即使世界结束也永远不会移动的球体。但正在播放视频。这意味着其材质的纹理每帧都会更新一次。

我是否将此球体标记为静态以进行批处理或将其留下?

如果我将移动物体标记为静态,会影响性能吗?

1 个答案:

答案 0 :(得分:2)

通常,场景中的每个网格都是逐个渲染的。静态批处理将尝试将多个网格组合在一起,以便它们可以全部绘制在一起。这可能会极大地提高抽奖效率。

Unity仍然会跟踪每批中的各个GameObjects,这在它们可以被剔除(进一步提高渲染性能)或者需要从批处理中删除时非常有用。

但是有一些条件。

不得移动静态几何体。在将网格组合在一起之后,移动批处理中的任何GameObject会破坏关于如何创建网格的一些假设。您可以要求Unity移动静态几何体(它会尝试!),但这样做会导致错误和减速。

静态批处理中的所有对象必须共享一个材质实例。纹理图集很好,编辑材质的属性很好,只要您保留该材质的单个实例(请注意,调用renderer.material克隆材质,因此您可能需要编辑renderer.sharedMaterial而不是)。

在大多数情况下,激活静态批处理的最简单方法是在Unity的关卡编辑器中将GameObject标记为静态。这将在构建期间自动触发静态批处理过程。如果您需要在编辑器中进行静态批处理,或者在游戏运行时生成静态几何体,则可以让脚本使用StaticBatchingUtility类来动态创建批处理。

  

如果我将移动物体标记为静态,会影响性能吗?

会影响性能并可能导致错误。不要那样做。

  

我是否将此球体标记为静态以进行批处理或将其留下?

静态批处理仅在您拥有多个共享相同材质实例的网格时才有用。