本页面包含一些用于在应用程序中优化渲染性能的简单指南。
进行任何更改之前,必须对应用程序进行性能分析,以确定问题的原因。如果在还没了解原因就尝试解决性能问题,可能会浪费时间或使问题恶化。此外,与渲染相关的性能问题也可能发生在 CPU 或 GPU 上。解决这些问题的策略有很大不同,因此务必在采取任何行动之前了解问题所在。
Unity Learn 站点上的以下文章全面介绍了图形性能,并包含有关识别和修复问题的信息:修复性能问题。如果您还不熟悉此主题,请在遵循此页面上的任何建议之前阅读文章。
通常,CPU 渲染时间的最大影响因素是向 GPU 发送渲染命令的开销。渲染命令包括绘制调用(绘制几何体的命令)以及在绘制几何体之前更改 GPU 上设置的命令。如果是这种情况,请考虑以下选项:
其中许多方法也会减少 GPU 上所需的工作;例如,减少 Unity 在一帧中渲染的对象总数,将减少 CPU 和 GPU 的工作负载。
GPU 可能无法及时完成工作以渲染帧的原因主要有三个。
如果应用程序受填充率限制,GPU 会尝试每帧绘制超出其处理能力的像素。如果是这种情况,请考虑以下选项:
如果应用程序受内存带宽限制,GPU 会尝试在其专用内存中读写超出其一帧处理能力的数据。这通常意味着纹理太多或太大。如果是这种情况,请考虑以下选项:
如果应用程序受到顶点处理的限制,这意味着 GPU 试图处理的顶点数量超过其在一帧中能够处理的顶点数量。如果是这种情况,请考虑以下选项:
有时,降低渲染帧率可能会有利于应用程序。这不会降低渲染单帧的 CPU 或 GPU 开销,但会降低 Unity 执行此操作的频率,而不会影响其他操作(例如脚本执行)的频率。
您可以降低部分应用程序或整个应用程序的渲染帧率。降低渲染帧率可防止不必要的功耗,延长电池续航时间,并防止设备温度升高到 CPU 频率可能被限制的程度。这在手持设备上特别有用。
如果性能分析显示渲染会占用应用程序相当大一部分的资源,请考虑应用程序的哪些部分可能会从中受益。常见的用例包括菜单或暂停屏幕,游戏正在等待输入的基于回合的游戏,以及内容大部分为静态的应用程序(例如汽车 UI)。
为了防止输入滞后,可以在输入持续时间内临时增加渲染帧率,使其仍然具有响应性。
要调整渲染帧率,请使用 OnDemandRendering API。API 与 Adaptive Performance Package 特别适合搭配使用。
注意:VR 应用程序不支持按需渲染 (On Demand Rendering)。如果不渲染每一帧,则会导致视觉效果与头部移动不同步,并可能增加晕动症的风险。