测试和性能分析
更新时间: 2024年10月30日
本指南回顾了 Unity VR 应用性能分析和漏洞排除的基准目标、建议、工具、资源以及通用工作流等。
VR 应用程序分析提供应用程序性能洞察,可帮助隔离、消除问题和瓶颈。重点关注瓶颈,且一次只改变一件事情,例如分辨率、硬件、质量或配置。
创建非 VR 版本的相机装备,以便在 VR 视角和非 VR 视角之间轻松切换。这让您能够抽查场景,并且有助于使用第三方分析工具。
可以在调试期间禁用玩家设置中的多线程渲染。还可以减慢渲染器的速度,让您更清晰地看到帧时间。完成后再重新打开它。
- 媒体应用程序可将目标设定为 60 FPS。
- 互动应用程序必须达到 72 FPS。
影响 Meta Quest 设备上每帧可执行的绘制调用数量的因素有很多。其中包括:
- 管道状态变更:这包括在绘制间对着色器、纹理、网格等进行更改。
- 尽量共享网格和实例网格。
- 可以的话请您使用全局纹理数组。
- 使用不产生变体的最小统一着色器集。
- 主线程和渲染线程的能力:考虑渲染线程和主线程上为渲染线程准备并提供数据时的可用资源。
- 诸如动画、蒙皮和联网之类的过程可能会使渲染线程的启动延迟,并减少在目标 FPS 内可执行的绘制调用的数量。
- 图形 API 和用法:
- Vulkan 与 OpenGL ES 比较。
- 多线程渲染 — 低延迟与 Frame-behind 比较。
- Bindless 纹理和间接绘制的使用情况。
下表给出了示例绘制调用范围。您的结果可能因上述提到的因素而存在差异。
| 平台 | 绘制调用 | 描述 |
|---|
Quest 1 | 50-150 | 重度模拟 |
Quest 1 | 150-250 | 中等模拟 |
Quest 1 | 200-400 | 轻度模拟 |
Quest 2, Quest Pro | 80-200 | 重度模拟 |
Quest 2, Quest Pro | 200-300 | 中等模拟 |
Quest 2, Quest Pro | 400-600 | 轻度模拟 |
Quest 3、Quest 3S | 200-300 | 重度模拟 |
Quest 3、Quest 3S | 400-600 | 中等模拟 |
Quest 3、Quest 3S | 700-1000 | 轻度模拟 |
- 重度模拟:这些应用程序具有许多模拟、VoIP、联网、动画以及其他玩家或众多 NPC 的蒙皮。例如,多玩家射击游戏和大量人数的社交应用。
- 中等模拟:中等规模的世界,玩家或 NPC 很少,例如单人射击游戏和中等人数的社交游戏。这一类别涵盖了大多数应用。
- 轻度模拟:应用程序具有最少管道状态变化,如密室逃脱游戏、益智游戏及合作游戏。
三角形预算类似于绘制调用预算,因为它们会因帧间因素而波动,因此很难确定您能获得多少。三角形计数预算甚至更加多变,决定因素可能因帧而异(更多信息,请参见
基于块的渲染如何运作)。
- 跨越多个图块的三角形:这些渲染成本更高。
- 三角形的顶点着色器将在其覆盖的每个图块上运行三次(每个顶点一次)。
- 从而统计角度而言,较大的三角形可覆盖更多的图块,但图块的边界的预测是个挑战。
- 顶点属性的内存访问模式:将影响顶点着色器的速度。
- 为位置数据、蒙皮权重以及用于计算输出位置的其他相关数据专门创建一个顶点属性数组。在一个单独的交错顶点属性数组中包含任何其他数据。这种设置可以提高装箱阶段的速度,该阶段只关心影响输出位置的属性。
- 顶点属性:观察您提交给顶点着色器的顶点属性的数量和精度。
- 若有可能,移除诸如 NORMAL、TANGENT 或 TEXCOORD* 等未使用的通道,或组合通道,从而提升性能。
- 通常,只有 POSITION 通道需要全精度。试着将其他通道压缩为半精度,观察您是否还能维持视觉质量。
下表是一些内部建议的范围,但结果可能因上述因素而异。
| 平台 | 三角形计数 |
|---|
Quest 1 | 35 万 - 50 万 |
Quest 2, Quest Pro | 75 万 - 100 万 |
Quest 3、Quest 3S | 130 万 - 180 万 |
在调试性能问题之前,确立明确的目标,作为性能校准的基准。这些目标可以让您了解目标所在位置,以及如果您没有达到帧率或遇到性能问题时应该查看什么。
使用以下数据点作为您建立自定义基准的一般准则,除非另外规定了大致范围。
- Rift S 为 80 FPS,Rift 为 90 FPS
- 每帧 500 - 1000 次绘制调用
- 每帧 100 万 - 200 万个三角形或顶点
本节详细介绍 Unity 提供的工具,可帮助您诊断应用问题和瓶颈。
Unity 的内置分析器提供宝贵的信息(例如每帧 GPU 和 GPU 性能指标)可帮助识别瓶颈。在分析前锁定您的 CPU/GPU 级别,以获得一致的结果和衡量改进。关于 Unity 分析器的更多信息,请参阅
分析器手册。
如要在 Link PC-VR 应用程序中使用 Unity 分析器,请选择构建配置文件中的开发编译版本和自动连接分析器,然后构建您的应用程序。在启用应用程序时,分析器会自动打开。
如果您正在为独立 Meta Quest 头戴设备开发应用程序,则还可以使用 ADB 或 WiFi 在应用在头戴设备上运行时对其进行分析。确保在分析前锁定您的 CPU/GPU 级别,以获得一致的结果和衡量改进。有关设置 CPU/GPU 级别的信息,请参阅
Android 开发指南。有关使用 Unity GPU 分析器的步骤,请参阅
GPU 分析器指南。
Unity 分析器会显示应用的性能指标。如果您应用的性能表现不如预期,则您可能需要收集整个系统的运行信息。
受分析开销的影响,GPU 分析器的总绘制调用结果可能并不绝对准确。在分析编译版本时,请将该值用作比较值。
Unity 提供显示实时渲染统计数据的选项,例如 FPS、绘制调用、三角形和顶点计算、以及 VRAM 使用情况等。而在游戏视图中,按下游戏视图上方的统计数据按钮,将显示一个实时渲染统计数据悬窗。在编辑器中查看统计数据可显示发送的绘制调用次数和批处理保存的绘制调用次数,从而有助于分析和改进场景的批处理(OverDraw 渲染器模式也有助于实现此效果)。

Unity 提供特定的渲染模式,以便在场景中查看过度绘制。在场景视图控制栏,在渲染模式选择框的下拉菜单中选择 OverDraw。
在这种模式下,半透明的颜色将集聚起来,形成过度绘制的“热图”,其中饱和度越高的颜色代表过度绘制越多的区域。

Unity 帧调试工具让您能够在任何场景中完成绘制调用顺序。即使您没有主动调试,该工具也有助于您了解 Unity 如何将您的场景组合在一起和调试管线问题。
Unity 内置分析器(不要与 Unity 分析器混淆)通过 Logcat 提供帧率统计数据,包括绘制调用次数、最大/最小帧时间、三角形和顶点数量等。
如要使用该分析器,请按照 Android ADB 文档
无线使用中的步骤,使用 ADB over TCPIP 通过 Wi-Fi 将其连接到您的设备。然后在设备接入头戴设备时,运行
adb logcat。
- 帧缓冲区查看器提供一种在实时接收数据时检查帧缓冲区的机制,这在监控游戏测试会话时尤其有用。启用时,捕捉库将在网络上流式传输一个缩小的预失真视觉缓冲区。
- 性能数据查看器可在一条连续时间线上对以下内容进行实时和离线检查:
- CPU/GPU 事件
- 传感器读数
- 控制台消息、警告和错误信息
- 帧缓冲区捕捉
- 日志查看器提供对线程 ID 追踪的各种消息和错误信息的原始访问权。
- 代码中的几乎所有常量都可以在游戏测试期间变成实时更新的旋钮。
本节介绍适用于 Link PC-VR 开发的性能分析工具。
Oculus 性能平视显示器 (HUD) 是一个易于使用的重要工具,当您在 Rift 中运行应用程序时,它可以实时查看渲染时间、延迟和性能余量。HUD 可通过电脑 SDK 提供的 Oculus 调试工具轻松访问。更多详情,请参阅《Rift 开发者指南》中的
性能平视显示器和
Oculus 调试工具部分。
Compositor Mirror 是一个实验工具,应用了异步时间扭曲和失真,用于准确查看头戴设备中会出现的内容。
Compositor Mirror 可用于开发和排除故障,而无需佩戴头戴设备。头戴设备中出现的所有内容都会出现,包括主控室用户界面、边界、游戏内通知以及转场效果。Compositor Mirror 兼容任意游戏或体验,无论其是使用原生电脑 SDK 还是使用游戏引擎开发。
OVR 指标工具应用程序专为 Meta Quest 应用程序提供性能指标。
OVR 指标工具报告应用程序帧率、温度、GPU 和 CPU 节流值,以及每秒损坏次数和每秒失效帧数等。可在我们的
下载页面下载该工具。

OVR 指标工具能以两种模式运行。在报告模式下,它会在 VR 会话结束后显示此次会话的性能报告。报告数据可以轻松导出为 CVS 和 PNG 图片。

在性能 HUD 模式下,OVR 指标工具可将性能图表渲染为任何运行中 Meta Quest 应用程序上的 VR 悬窗。
本节介绍可用于调试和性能分析的其他工具。
ETW 和 GPUView
Windows 事件追踪 (ETW) 是一个用于性能分析的跟踪工具,由 Windows 提供。
GPUView 视图提供了解 DirectX 应用程序 GPU 和 CPU 性能的窗口。它精确、开销低,并且覆盖整个 Windows 系统。
大多数 Unity 开发者会发现 Unity 分析器已经足够,但在某些情况下,ETW 和 GPUView 可以帮助解决带有背景进程的系统级争议等调试问题。详细了解如何与原生 Rift SDK 一起使用 ETW,请参阅我们《电脑 SDK 开发者指南》中的
VR 性能优化一节。虽然并非有所内容都与 Unity 开发者相关,但它提供了非常实用的概念资料。
Systrace
NVIDIA NSight
Mac OpenGL 监控器
APITrace
本节介绍适用于 Android 开发的基本性能分析技巧。
Oculus Remote Monitor 中频繁出现 Gfx.WaitForPresent 是一个常见问题。这会报告渲染管线的停滞时间,因此在排除故障时,首先要了解场景是由 Unity 组装的。鉴于此,Unity 帧调试工具将是一个不错的着手点。更多信息,请参阅
Unity 分析工具。