认识 RealityKit Trace
Meet RealityKit Trace
2023年6月5日
一句话判断
Instruments 15 新增 RealityKit Trace 模板——用红绿橙三色标记每帧渲染状态,自动检测性能瓶颈并给出修复建议,空间计算应用的性能调优终于有了专业级工具。
这场 Session 讲了什么
RealityKit Tools 团队的 Sarina Wu 和性能分析工程师 Harjas Monga 联合介绍了 Instruments 15 中全新的 RealityKit Trace 模板。
空间计算对性能有严格要求。渲染管线涉及应用进程、渲染服务器和合成器三个组件。应用在 Shared Space 和 Full Space 中的性能表现不同——Shared Space 中其他应用会影响你的渲染性能,Full Space 中只有你自己的应用在渲染。
Session 用一个 Hello World 应用做实例演示,该应用有一个卫星绕地球运行的沉浸式体验,因为使用了过于精细的 3D 模型导致交互卡顿。
RealityKit Trace 模板包含多个工具:RealityKit Frames(逐帧渲染时间追踪)、RealityKit Metrics(瓶颈检测和指标分析)、系统功耗影响评估。
帧渲染以颜色标记:绿色(远在截止时间内完成)、橙色(刚好完成)、红色(超时导致掉帧)。目标帧率是 90fps,但系统会根据内容和环境动态调整。
值得深挖的点
Shared Space vs Full Space 的性能测试策略:调查性能问题或分析系统功耗时,应在 Full Space 中单独测试你的应用。测试用户体验时,应在 Shared Space 中与其他应用一起测试。两种场景的表现可能截然不同。
瓶颈自动检测:RealityKit Metrics 自动分析渲染管线的完整时间信息,识别瓶颈类型和严重程度。扩展详情视图中提供诊断建议和缓解措施。不需要你自己逐帧分析时间线。
90fps 的动态目标:系统不总是以 90fps 运行——它会根据当前显示内容和设备环境选择最合适的帧率。每一帧都有自己的截止时间。红色掉帧不仅看帧时间是否超过 11ms,还要看是否超过了当前目标帧率的截止时间。
系统功耗影响:RealityKit Metrics 中有专门的功耗影响指标。空间计算设备对功耗比 Mac 和 iPhone 更敏感——功耗过高会导致系统降频,影响所有应用的体验。
代码片段
// 空间计算渲染管线的理解
// Shared Space: 你的应用 + 渲染服务器 + 合成器
// - 其他应用的渲染工作会影响你的性能
// - 性能 = 你自己的工作 + 渲染服务器处理其他应用的时间
// Full Space: 只有你的应用 + 渲染服务器 + 合成器
// - 其他应用被隐藏,不影响你的渲染
// - 性能只取决于你自己的工作
// 性能优化的主要方向
// 1. 减少 3D 模型的多边形数量
// - 使用 LOD(细节层次)根据距离切换模型
// - 远距离使用低精度模型
// 2. 优化材质和纹理
// - 减少纹理尺寸
// - 使用压缩纹理格式
// 3. 减少每帧的 RealityKit 系统工作量
// - 优化自定义 System 的 update 函数
// - 使用 Time Profiler 定位热点代码
最佳实践
- 性能测试用真机而非模拟器:模拟器的硬件与设备不同,时间信息不准确。但可以用模拟器做快速迭代和非时间相关的统计优化。
- 优先关注红色掉帧区域:在时间线中找到红色密集区域,用 RealityKit Metrics 查看该时段的瓶颈。
- 单独测试和联合测试都要做:Full Space 了解应用自身的性能天花板,Shared Space 了解用户体验。
- 关注系统功耗指标:功耗过高会导致系统级降频,影响所有应用的帧率。
- 结合 Time Profiler 优化自定义系统:RealityKit Metrics 显示系统执行时间,Time Profiler 显示具体代码热点,两者配合使用。
还有什么值得关注
- Instruments 15 的 RealityKit Trace 可以分析模拟器和真机上的应用,但真机数据更准确。
- 帧率不是唯一指标——系统功耗影响同样重要。一个 90fps 但功耗过高的应用不如一个功耗合理的 60fps 应用。
- Session 用卫星绕地球的例子完整演示了性能分析流程:发现问题 -> 用 Trace 定位 -> 用 Metrics 分析瓶颈 -> 优化模型 -> 验证改善。
- 渲染管线的三个阶段(应用、渲染服务器、合成器)都有各自的性能约束,瓶颈可能出现在任何阶段。