静态批处理在 Unity3D 中如何工作
How does Static Batching work in Unity3D
我正在为 VR 平台开发 360 度视频播放器应用程序,并期待针对移动平台对其进行优化。这个时候我有一个关于静态批处理的问题。
假设我有一个球体,即使世界末日也不会移动。但是正在播放视频。这意味着其 material 的纹理每帧更新一次。
我是将此球体标记为静态以进行批处理还是保留它?
如果我将移动对象标记为静态,会影响性能吗?
通常情况下,场景中的每个网格都是一个一个渲染的。静态批处理将尝试将多个网格组合在一起,以便将它们全部绘制在一起。这可能会显着提高绘图调用效率。
Unity 仍会跟踪每个批次中的各个游戏对象,这在可以剔除它们(进一步提高渲染性能)或需要从批次中删除它们的情况下非常有用。
虽然有一些条件。
不得移动静态几何图形。将网格组合在一起后,在批处理中移动任何游戏对象都会破坏有关该网格创建方式的一些假设。您可以要求 Unity 移动静态几何体(它会尝试!),但这样做往往会导致错误和速度减慢。
静态批处理中的所有对象必须共享一个 material 实例。纹理图集很好,编辑 material 的属性也很好,只要您保留 material 的单个实例即可(请注意,调用 renderer.material
会克隆 material,因此您可能需要编辑 renderer.sharedMaterial
)。
在大多数情况下,激活静态批处理的最简单方法是在 Unity 的关卡编辑器中将游戏对象标记为静态。这将在构建期间自动触发静态批处理过程。如果您需要在编辑器中进行静态批处理,或者如果您在游戏 运行 时生成静态几何体,您可以让脚本使用 StaticBatchingUtility
class 来动态创建批处理。
If I mark a moving object as static, would that affect performance?
这会影响性能并可能导致错误。不要那样做。
Do I mark this sphere as static for batching or leave it?
静态批处理仅在您有多个网格共享同一个 material 实例时才有用。
我正在为 VR 平台开发 360 度视频播放器应用程序,并期待针对移动平台对其进行优化。这个时候我有一个关于静态批处理的问题。
假设我有一个球体,即使世界末日也不会移动。但是正在播放视频。这意味着其 material 的纹理每帧更新一次。
我是将此球体标记为静态以进行批处理还是保留它?
如果我将移动对象标记为静态,会影响性能吗?
通常情况下,场景中的每个网格都是一个一个渲染的。静态批处理将尝试将多个网格组合在一起,以便将它们全部绘制在一起。这可能会显着提高绘图调用效率。
Unity 仍会跟踪每个批次中的各个游戏对象,这在可以剔除它们(进一步提高渲染性能)或需要从批次中删除它们的情况下非常有用。
虽然有一些条件。
不得移动静态几何图形。将网格组合在一起后,在批处理中移动任何游戏对象都会破坏有关该网格创建方式的一些假设。您可以要求 Unity 移动静态几何体(它会尝试!),但这样做往往会导致错误和速度减慢。
静态批处理中的所有对象必须共享一个 material 实例。纹理图集很好,编辑 material 的属性也很好,只要您保留 material 的单个实例即可(请注意,调用 renderer.material
会克隆 material,因此您可能需要编辑 renderer.sharedMaterial
)。
在大多数情况下,激活静态批处理的最简单方法是在 Unity 的关卡编辑器中将游戏对象标记为静态。这将在构建期间自动触发静态批处理过程。如果您需要在编辑器中进行静态批处理,或者如果您在游戏 运行 时生成静态几何体,您可以让脚本使用 StaticBatchingUtility
class 来动态创建批处理。
If I mark a moving object as static, would that affect performance?
这会影响性能并可能导致错误。不要那样做。
Do I mark this sphere as static for batching or leave it?
静态批处理仅在您有多个网格共享同一个 material 实例时才有用。