版本:Unity 6 (6000.0)
语言:English
绘制调用优化
GPU 实例化

绘制调用优化简介

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

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

由于渲染状态更改会占用大量资源,因此对其进行优化非常重要。优化渲染状态更改的主要方法是减少更改次数。有两种方法可以做到这一点

  • 减少绘制调用的总数。减少绘制调用数量的同时,也减少了它们之间渲染状态更改的数量。
  • 以减少渲染状态更改数量的方式组织绘制调用。如果图形 API 可以使用相同的渲染状态执行多个绘制调用,则可以将绘制调用组合在一起,从而无需执行太多渲染状态更改。

优化绘制调用和渲染状态更改对应用程序有很多好处。主要是提高帧速率,但也

  • 减少应用程序所需的电量。对于电池供电的设备,这会降低电池耗尽的速度。它还会减少设备在运行应用程序时产生的热量。
  • 提高应用程序未来开发的可维护性。当您尽早优化绘制调用和渲染状态更改并在优化级别上维护它们时,您可以向您的场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,放置环境、障碍物和装饰,从本质上讲是分段设计和构建游戏。 更多信息
    参见 术语表
    添加更多游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的功用由附加在其上的组件定义。 更多信息
    参见 术语表
    ,而不会产生较大的性能开销。

优化优先级

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

唯一的例外是通用渲染管线一系列操作,这些操作获取场景的内容并在屏幕上显示它们。Unity 允许您从预构建的渲染管线中进行选择,或者编写自己的渲染管线。 更多信息
参见 术语表
(URP) 或高清渲染管线 (HDRP) 中的SRP 批处理程序。当您使用 SRP 批处理程序时,Unity 还支持对与 SRP 批处理程序兼容的游戏对象进行静态批处理Unity 用于在屏幕上绘制游戏对象的技巧,该技巧将静态(非移动)游戏对象组合成大型网格,并以更快的速度渲染它们。 更多信息
参见 术语表
。Unity 按以下顺序优先考虑绘制调用优化

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

如果将游戏对象标记为静态批处理,并且 Unity 成功对其进行批处理,则 Unity 会禁用该游戏对象的 GPU 实例化,即使渲染器使用实例化着色器也是如此。发生这种情况时,检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表
窗口会显示一条警告消息,建议您禁用静态批处理。类似地,如果 Unity 可以对网格Unity 的主要图形基元。网格构成了 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、细分曲面必须转换为多边形。 更多信息
参见 术语表
使用 GPU 实例化,则 Unity 会禁用该网格的动态批处理一个自动的 Unity 过程,尝试将多个网格渲染为单个网格,以优化图形性能。该技术在 CPU 上转换所有游戏对象顶点,并将许多类似顶点组合在一起。 更多信息
参见 术语表

绘制调用优化
GPU 实例化