2

I am working on a 360 video player app for VR Platform and looking forward to optimise it for mobile platforms. At this time I have a question regarding static batching.

Lets say I have a sphere which would never move even if the world ends. But a video is being played on it. That means texture of its material is being updated once a frame.

Do I mark this sphere as static for batching or leave it?

If I mark a moving object as static, would that affect performance?

4

1 回答 1

4

通常,场景中的每个网格都是一个一个渲染的。静态批处理将尝试将多个网格组合在一起,以便将它们全部绘制在一起。这可能会导致绘图调用效率的显着提高。

Unity 仍然跟踪每个批次中的单个游戏对象,这在它们可以被剔除(进一步提高渲染性能)或需要从批次中移除的情况下很有用。

不过有一些条件。

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

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

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

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

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

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

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

于 2016-11-30T16:37:04.020 回答