Version: Unity 6.0 (6000.0)
语言 : 中文
优化绘制调用
Choose a method for optimizing draw calls

优化绘制调用简介

为了在屏幕上绘制几何体,Unity 会发出图形 API 的绘制调用。绘制调用会告诉图形 API 要绘制的内容以及如何绘制。每个绘制调用都包含图形 API 在屏幕上绘制所需的所有信息,例如有关纹理、着色器和缓冲区的信息。绘制调用可能会占用大量资源,但绘制调用的准备工作通常比绘制调用本身占用更多资源。

为了准备绘制调用,CPU 会在 GPU 上设置资源并更改内部设置。这些设置统称为渲染状态。对渲染状态的更改(例如切换到其他材质)是图形 API 执行的最耗费资源的操作。

由于渲染状态更改很耗费资源,因此务必要对其进行优化。优化渲染状态更改的主要方法是减少这些更改的数量。有两种方式可以做到这一点:

  • 减少绘制调用的总数。减少绘制调用次数时,也会减少它们之间的渲染状态更改次数。
  • 整理绘制调用,从而减少对渲染状态的更改次数。如果图形 API 可以使用相同的渲染状态来执行多次绘制调用,则可以将绘制调用分组在一起,而无需执行那么多的渲染状态更改。

优化绘制调用和渲染状态更改对应用程序有许多好处。主要是可以缩短帧时间,但也可以:

  • 减少应用程序所需的电量。对于电池供电设备,这可降低电池耗尽的速度。它还可减少设备在运行应用程序时产生的热量。
  • 提高应用程序未来开发的可维护性。提前优化绘制调用和渲染状态更改并将其保持在优化后的级别时,可以向场景中添加更多游戏对象,而不会产生大量性能开销。

优化优先级

可以在同一场景中使用多种绘制调用优化方法,但请注意,Unity 会按特定顺序确定绘制调用优化方法的优先级。如果将游戏对象标记为使用多种绘制调用优化方法,Unity 将使用最高优先级方法。

唯一的例外是通用渲染管线 (URP) 或高清渲染管线 (HDRP) 中的 SRP 批处理程序。使用 SRP 批处理程序时,Unity 还支持兼容 SRP 批处理程序的游戏对象的静态批处理。Unity 按以下顺序确定绘制调用优化的优先级:

  1. SRP 批处理程序和静态批处理
  2. GPU 实例化
  3. 动态批处理

如果将一个游戏对象标记为静态批处理,并且 Unity 成功对其进行批处理,则 Unity 会禁用该游戏对象的 GPU 实例化,即使渲染器使用实例化着色器也是如此。发生这种情况时,检视面板窗口将显示一条警告消息,建议您禁用静态批处理。同样,如果 Unity 可以对网格使用 GPU 实例化,Unity 会禁用该网格的动态批处理。

优化绘制调用
Choose a method for optimizing draw calls