Unity3D中的静态批处理是如何工作的

Unity3D中的静态批处理是如何工作的,unity3d,batching,Unity3d,Batching,我正在为VR平台开发一款360视频播放器应用程序,并期待着为移动平台优化它。现在我有一个关于静态批处理的问题 假设我有一个球体,即使世界末日也不会移动。但是正在播放一段视频。这意味着其材质的纹理每帧更新一次 我是将此球体标记为静态以进行批处理还是将其保留 如果我将移动对象标记为静态,会影响性能吗?通常,场景中的每个网格都会逐个渲染。静态批处理将尝试将多个网格组合在一起,以便可以将它们全部绘制在一起。这可能会显著提高draw调用效率 Unity仍然跟踪每个批次中的单个游戏对象,这在可以剔除它们(进

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

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

我是将此球体标记为静态以进行批处理还是将其保留


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

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

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

但也有一些条件

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

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

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

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

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

我是将此球体标记为静态以进行批处理还是将其保留


只有当多个网格共享同一材质实例时,静态批处理才有帮助。

我倾向于说,在您的情况下,静态批处理不会改变任何东西,因为材质可能不会与其他对象共享。然而,如果你喜欢1个立方体,1个球体和1个圆柱体静态显示相同的视频(ofc共享相同的材料),我真的很想认为这会提高性能(但我不确定这是不是真的)。。。