为了在屏幕上绘制几何体,Unity 会发出图形 API 的绘制调用。绘制调用会告诉图形 API 要绘制的内容以及如何绘制。每个绘制调用都包含图形 API 在屏幕上绘制所需的所有信息,例如有关纹理、着色器和缓冲区的信息。绘制调用可能会占用大量资源,但绘制调用的准备工作通常比绘制调用本身占用更多资源。
为了准备绘制调用,CPU 会在 GPU 上设置资源并更改内部设置。这些设置统称为渲染状态。对渲染状态的更改(例如切换到其他材质)是图形 API 执行的最耗费资源的操作。
由于渲染状态更改很耗费资源,因此务必要对其进行优化。优化渲染状态更改的主要方法是减少这些更改的数量。有两种方式可以做到这一点:
优化绘制调用和渲染状态更改对应用程序有许多好处。主要是可以缩短帧时间,但也可以:
可以在同一场景中使用多种绘制调用优化方法,但请注意,Unity 会按特定顺序确定绘制调用优化方法的优先级。如果将游戏对象标记为使用多种绘制调用优化方法,Unity 将使用最高优先级方法。
唯一的例外是通用渲染管线 (URP) 或高清渲染管线 (HDRP) 中的 SRP 批处理程序。使用 SRP 批处理程序时,Unity 还支持兼容 SRP 批处理程序的游戏对象的静态批处理。Unity 按以下顺序确定绘制调用优化的优先级:
如果将一个游戏对象标记为静态批处理,并且 Unity 成功对其进行批处理,则 Unity 会禁用该游戏对象的 GPU 实例化,即使渲染器使用实例化着色器也是如此。发生这种情况时,检视面板窗口将显示一条警告消息,建议您禁用静态批处理。同样,如果 Unity 可以对网格使用 GPU 实例化,Unity 会禁用该网格的动态批处理。