虚拟现实内容开发人员指南

获得关于开发和设计虚拟现实 (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.建议:无需额外添加。

screenshot of frame rendering values

在特定帧的理想情况下,应用有充足的时间完成垂直同步之间的任务,并且早于 late state request (LSR) 数据包的提交时间。在这种情况下,应用最好能够同步垂直同步,以便在最新 HMD 位置数据上执行渲染。这有助于最大程度缓解晕动症。

2.建议:在编译器开始工作时进行同步,而非垂直同步,提早开始。

screenshot of frame rendering values

当帧渲染时间不在间隔内时,回收所有可用的 GPU 时间,用于在 LSR 产生之前渲染帧。如果无法与间隔重叠,编译器可以将下一个可用渲染目标保留在交换链中,阻止应用渲染下一帧。将导致完成某个帧的当前工作负载之前,整幅帧被跳过,应用的 fps 也随之下降。应用应与编译器同步,这样,当前或 LSR 工作负载被提交后,将立即提交新渲染任务。通常借助编译器 API 提供的等待行为来实现。

vector image

3.建议:异步演示。

最坏的情况是帧渲染时间超过垂直渲染,应用应尽快提交渲染任务,使 GPU 满负荷运行,以支持编译器使用最新的帧数据,这个情况何时发生与 LSR 有关。为了实现这一目标,不要等到任何垂直同步或编译器事件发生后再继续渲染,如有可能,创建应用,以便将演示和渲染线程与剩余的状态更新分离。

例如,在 Holographic API 上,将 DoNotWaitForFrameToFinish 传输至 PresentUsingCurrentPrediction,或在 DirectX* 中,将 SyncInterval=0 传输至 Present。

4.建议:异步演示。

使用 GPUView 等 GPU 分析工具查看您遇到的渲染性能问题,然后按照上文的介绍做出必要的调整。

其他设计注意事项

半浮点对比浮点:在没有出现精度问题的情况下,计算密集型工作负载可以借助半浮点提高吞吐率。混合半分辨率和完全分辨率将导致性能下降,应尽量避免。

工具

以下工具帮助您确认虚拟现实工作负载问题。

GPU View:具体解释发现的调度和掉帧问题。

英特尔® 图形性能分析器:详细分析虚拟现实工作负载和预期模式。例如,面向左眼和右眼的两组相同的调用。

其他资源

总结

虚拟现实工作负载面临的最大性能挑战源于带宽限制。纹理格式、融合着色器通道以及使用后期抗锯齿技术有助于减轻带宽压力。

贡献者

本文提供的开发人员指南由 VPG Arch 团队创建。

附件大小
PDF icon Intel_VR developer_Guide_FINAL.pdf667.78 KB
有关编译器优化的更完整信息,请参阅优化通知