Meta Quest 应用的基本优化工作流程
更新时间: 2024年12月9日
本文将为您介绍基本优化工作流程,该工作流程会使用分析来识别开发应用编译版本时出现的瓶颈和问题。
人们谈论优化时,通常会关注每秒显示帧数 (FPS) 这个数据,但优化应用时,更应该考虑每帧的毫秒数这个指标。测量每帧的毫秒数提供了更可行的目标。每帧必须在指定时间内(通常以毫秒为单位)完成其 CPU 和 GPU 工作才能达到一定的帧率。
使用每帧的毫秒数作为指标时,每帧都有必须满足的具体预计时间量。相关帧率的性能目标如下:
- 60 FPS = 每帧 16.6 毫秒
- 72 FPS = 每帧 13.9 毫秒
- 90 FPS = 每帧 11.1 毫秒
- 120 FPS = 每帧 8.3 毫秒
所有 Meta Quest 应用最低需要达到 72 FPS,方可满足虚拟现实检查 (VRC) 要求。Meta Quest 3 和 Meta Quest 3S 还支持 90 Hz 和 120 Hz 的显示刷新率,分别对应上文所列的 90 FPS 与 120 FPS 帧率预算。本指南的下一部分将介绍如何借助分析来确定需要优化的地方,进而帮助您实现目标帧率。
在工作流程中分析时,第一个目标是确定应用是 GPU 密集型还是 CPU 密集型。确定应用是 CPU 密集型还是 GPU 密集型的其中一种方法是不渲染任何东西。您可以关闭渲染相机,让应用继续运行。这样可以排除渲染管道的消耗,包括剔除、提交绘制调用、运行着色器等。观察应用的帧率以及完成每帧所需的毫秒数。
测试完成后,观察结果并考虑以下几点:
- 如果未渲染任何东西时,应用的性能不受影响或受到很小的影响,那么应用很可能是 CPU 密集型。
- 如果性能显著改善,应用很可能是 GPU 密集型。
应用为 CPU 密集型的常见原因包括应用逻辑、物理模拟的复杂性、垃圾收集停滞等。Unity 分析器等检测分析器可以追踪这些性能瓶颈。只专注于优化最昂贵的代码路径。任何耗时超过两毫秒的应用逻辑都可能存在优化空间。
GPU 密集型应用通常属于以下两类中的一类:
- 顶点密集型应用会有场景复杂性的问题。
- 片段密集型应用有着色器复杂性的问题。
测试方式是渲染更少的像素。您可以将应用的渲染比例设置为较小的数值,例如 0.01。这将减少待渲染的片段,但可以保留场景的复杂性。
测试完成后,观察结果并考虑以下几点:
- 如果性能不受影响,那么应用很可能是顶点密集型。
- 如果性能提高,则应用很可能是片段密集型(也称“填充密集型”)。
确定应用是 CPU 密集型还是 GPU 密集型的方法(禁用所有渲染相机)意味着一些 CPU 测计算(例如视锥体剔除)会被视为顶点受限型操作。虽然这并不完全准确,但这些操作往往会由可优化顶点密集型应用的相同操作进行优化。顶点密集型应用最常见的问题如下:
在应用存在问题的部分使用
RenderDoc Meta Fork 等帧调试工具,识别这些瓶颈。简化复杂的几何图形和减少绘制调用往往可以解决这些问题。您可能需要查看 LOD 系统或批量绘制调用,具体取决于您的应用的需求。
如果应用是填充密集型,它的一个或多个着色器需要优化。像素复杂性往往是填充密集型着色器的主要问题。
利用您的调查结果来解决工作流程中出现的主要问题。分析和优化是一个迭代过程。在大多数情况下,解决单个问题并不会达到所期望的性能等级。通常需要进行几轮的优化才能实现您想要的性能。每次优化通道结束后,再次完成完整的工作流程。如果应用之前是 CPU 密集型,且已经过优化,接下来很可能会变成片段密集型。