获得关于开发和设计虚拟现实 (VR) 应用的通用指南,了解如何实现最佳性能。本指南基于多个虚拟现实工作负载的性能特征,定义了常见瓶颈和问题。想办法解决受黑白色束缚的纹理格式选择问题,融合着色器通道,以及如何使用后期抗锯齿技术改进虚拟现实应用工作负载的性能。
目标
- 明确整体设计要点和预算建议,针对使用第七代智能英特尔® 酷睿™ i7 处理器和英特尔® 高清显卡 615 (GT2) 创建虚拟现实内容的开发人员。
- 提供指南和注意事项,以实现第七代智能英特尔® 酷睿™ i7 处理器的最佳图形性能。
- 提供关于最佳媒体(尤其是 3D 媒体)的建议。
- 获得设计虚拟现实应用的技巧,尤其针对移动设备提供持久动力。
- 寻找工具,以帮助开发人员确定虚拟现实就绪型硬件上存在的计算机图形问题。
开发人员建议的设计要点
针对独立软件开发商的设计要点和预算通用指南
- 三角形/帧 - 特定帧内 20 万 - 300 万个可见三角形。*使用视图体的强制遮挡、背面和闭塞减少发送到 GPU 的三角形数量。
- 绘制/帧 - 500 - 1000*。减少绘制调用的数量,以改进性能和功耗。借助着色器批量处理绘制,通过 3D 工作负载从前到后绘制(参阅 3D 指南)。
- 目标刷新率 - 至少每秒 60 帧 (fps),90 fps 可实现最佳体验。
- 分辨率 - 可按需将头盔式显示器 (HMD) 的分辨率缩小到 60 fps,但是不能低于 HMD 分辨率的 80%。*也可以考虑动态调整渲染目标分辨率,以达到帧速率的要求。*
- 内存 - 90 fps 需要每帧 180 MB ‒ 200 MB(DDR3,1600 MHz)。*
*数据为最初建议,可能会变化。
发挥通用硬件最佳性能的注意事项
纹理格式和过滤模式
- 纹理格式和过滤模式可能对带宽产生重要影响。
- 一般为多数过滤模式(双线性等)推荐 32 位和 64 位图像格式。
- 和 32 位案例相比,使用标准红绿蓝和高动态范围 (sRGB/HDR) 格式过滤三线性和体积表面的速度较慢。
未压缩纹理格式
未压缩格式—sRGB 和 HDR —消耗更多带宽。如果应用消耗过多带宽,请使用线性格式。
HDR 格式
建议使用 R10G10B10A2(而非 R16G16B16A16 )和浮点格式。
过滤模式
各向异性过滤等过滤模式可能显著影响性能,尤其是采用未压缩格式和 HDR 格式的模式。
各向异性 [CC6] 过滤可维持性能与质量的平衡。基于我们的性能和质量研究,通常推荐二级各向异性。MIP 贴图纹理和各向异性级别增加了过滤和硬件管线的开销。如果您选择各向异性过滤,建议您使用 bc1‒5 格式。
抗锯齿
暂时稳定的抗锯齿对卓越的虚拟现实体验至关重要。多点采样抗锯齿 (MSAA) 占用大量带宽和渲染预算。后期处理时暂时稳定的抗锯齿算法(如 TSCMAA)可提供毫不逊色的功能,成本降低了一半,可作为备选方案。
低延迟抢占
新一代硬件支持对象级抢占,通常转化为抢占三角形边界。及时抢占基元对高效调度编译器非常重要。为此,耗时 1 毫秒以上的绘制调用通常会有 64‒128 个三角形。一般而言,全屏后期处理应使用的网格应至少包含 64 个三角形,而不是 1 个或 2 个三角形。
应用调度
1.建议:无需额外添加。
在特定帧的理想情况下,应用有充足的时间完成垂直同步之间的任务,并且早于 late state request (LSR) 数据包的提交时间。在这种情况下,应用最好能够同步垂直同步,以便在最新 HMD 位置数据上执行渲染。这有助于最大程度缓解晕动症。
2.建议:在编译器开始工作时进行同步,而非垂直同步,提早开始。
当帧渲染时间不在间隔内时,回收所有可用的 GPU 时间,用于在 LSR 产生之前渲染帧。如果无法与间隔重叠,编译器可以将下一个可用渲染目标保留在交换链中,阻止应用渲染下一帧。将导致完成某个帧的当前工作负载之前,整幅帧被跳过,应用的 fps 也随之下降。应用应与编译器同步,这样,当前或 LSR 工作负载被提交后,将立即提交新渲染任务。通常借助编译器 API 提供的等待行为来实现。
3.建议:异步演示。
最坏的情况是帧渲染时间超过垂直渲染,应用应尽快提交渲染任务,使 GPU 满负荷运行,以支持编译器使用最新的帧数据,这个情况何时发生与 LSR 有关。为了实现这一目标,不要等到任何垂直同步或编译器事件发生后再继续渲染,如有可能,创建应用,以便将演示和渲染线程与剩余的状态更新分离。
例如,在 Holographic API 上,将 DoNotWaitForFrameToFinish
传输至 PresentUsingCurrentPrediction
,或在 DirectX* 中,将 SyncInterval=0
传输至 Present。
4.建议:异步演示。
使用 GPUView 等 GPU 分析工具查看您遇到的渲染性能问题,然后按照上文的介绍做出必要的调整。
其他设计注意事项
半浮点对比浮点:在没有出现精度问题的情况下,计算密集型工作负载可以借助半浮点提高吞吐率。混合半分辨率和完全分辨率将导致性能下降,应尽量避免。
工具
以下工具帮助您确认虚拟现实工作负载问题。
GPU View:具体解释发现的调度和掉帧问题。
英特尔® 图形性能分析器:详细分析虚拟现实工作负载和预期模式。例如,面向左眼和右眼的两组相同的调用。
其他资源
总结
虚拟现实工作负载面临的最大性能挑战源于带宽限制。纹理格式、融合着色器通道以及使用后期抗锯齿技术有助于减轻带宽压力。
贡献者
本文提供的开发人员指南由 VPG Arch 团队创建。