开发

异步时间扭曲 (ATW)(已停用)

更新时间: 2023年12月12日
Mobile SDK Deprecation
自 2022 年 8 月 31 日起,我们不再支持移动 SDK 和 VrApi 资源库。未来的更新将通过 OpenXR 扩展程序和我们的 OpenXR 移动 SDK,而非移动 Meta 或 PC API 的任何新更新提供。
停止支持移动 SDK 后,意味着:
  • 新应用将无法访问 Meta 原生移动 API,但现有应用可继续使用此类 API。
  • 对于使用 Meta 原生 API 创建新应用的,将不提供任何帮助。您可以在开发者指南中找到将现有应用迁移到 OpenXR 的建议。
  • 只有 Meta 原生 API 中的关键安全性、隐私或安全问题才会得到解决。
  • Meta 原生移动应用的任何测试都将仅限于自动化 QA 测试,以确保核心功能正常运作。
如需了解有关此次停用的更多信息,请访问 Meta 全面投入 OpenXR:停用专用 API
异步时间扭曲 (ATW) 根据最新的头部追踪信息对立体图像进行转换,大幅减少运动到光子的延迟,降低 VR 应用程序中的延迟和卡顿现象。

概览

在基本的 VR 游戏循环中,会发生以下情况:
  1. 软件会请求头部方位。
  2. CPU 为每只眼睛处理场景。
  3. GPU 渲染这些场景。
  4. 合成器会应用畸变并将场景显示在头戴设备上。
以下是一个游戏循环的基本示例:
Timeline diagram of a basic VR game loop from head tracking to display.
基本游戏循环
当帧率保持稳定时,体验会感觉真实且令人愉悦。如果这种情况没有及时发生,就会显示上一帧,这可能会让人感到迷惑。下图展示了基本游戏循环中卡顿的一个示例:
Timeline diagram showing judder when a frame misses its deadline in the game loop.
存在卡顿的基本游戏循环
当您移动头部而画面没有跟上时,这可能会让人感到突兀,从而打破沉浸感。
ATW 是一种通过轻微移动渲染图像以调整头部运动变化的技术。尽管图像修改了,但您的头部并没有移动太多,所以这种变化是细微的。
此外,为了缓解用户电脑、游戏设计或操作系统方面的问题,ATW 可以帮助解决不规则或帧率意外下降的情况。
下图展示了应用 ATW 时帧率下降的一个示例:
Timeline diagram showing ATW correcting a dropped frame to maintain stable display.
存在 ATW 的游戏循环
在刷新间隔期间,合成器会对最后一帧渲染的图像应用 ATW。因此,无论帧率如何,用户始终会看到应用了 ATW 的帧。如果帧率极低,在屏幕边缘就会观察到明显的闪烁。但图像仍然稳定。
合成器会自动应用 ATW,您无需启用或调整它。然而,尽管 ATW 能够减少延迟,也请确保应用程序或体验能够达到一定的帧率。

讨论

立体的眼睛视图渲染到纹理上,然后这些纹理会被扭曲投射到显示屏上,校正头戴设备中广角镜头造成的失真。
若要减少运动到光子的延迟,应在绘制时间扭曲之前检索头戴设备更新后的方位信息,并且计算出变换矩阵,该矩阵可将眼球纹理从其渲染时所在的位置扭曲到它们在显示时应处的位置。扭曲的像素几乎完全正确。急剧的旋转会让边缘的一些像素变为黑色,但结果表明这并不会太分散注意力。
时间扭曲会因变为“插值时间扭曲”而更进一步。因为视频是以每毫秒约 120 条扫描线的速率进行扫描输出,所以靠右的扫描线相较于靠左的扫描线会有更大的延迟。在反应迟缓的 LCD 显示屏上,这其实并不重要;但是在响应迅速的 OLED 显示屏上,用户在快速转动时可能会觉得整个世界都在微微拉伸或切变。这可通过预测每只眼睛开始(预测时间不到 8 毫秒)和结束(预测时间不到 16 毫秒)时头部的姿态来进行校正。这些预测值用于计算时间扭曲变换;对于绘制的每条扫描线,扭曲会在这两个值之间经过插值处理。
时间扭曲可以在 GPU 上通过使用片段程序渲染一个全屏四边形来实现,该片段程序会计算出扭曲纹理坐标,以便对眼球纹理进行采样。不过,为了提高性能,时间扭曲会在整个屏幕上渲染出一个均匀细分的三角形网格;在该网格中,纹理坐标设置为对眼球纹理进行采样。使用扭曲纹理坐标渲染三角形网格,基本上会形成时间扭曲的分段线性近似值。
如果时间扭曲与立体渲染异步运行,则其还可用于提高感知帧率,解决帧率不一致的问题。默认情况下,时间扭曲目前在原生应用程序和 Unity 应用程序中均以异步方式运行。