版本:Unity 6 (6000.0)
语言:English
注视点渲染
XR 音频

VR 帧时序

VR虚拟现实 更多信息
参见 术语表
模式下的帧时序与启用 VSync 的非 VR 模式下的帧时序完全相同(请参阅有关事件函数的执行顺序的文档)。唯一的区别在于 Unity 不依赖于底层 3D SDK 的VSync垂直同步 (VSync) 是一种显示设置,它将游戏的帧率限制为与显示器的刷新率匹配,以防止图像撕裂。
参见 术语表
,而是依赖于其当前渲染的 VR SDK。渲染速度快于显示器刷新速度没有任何益处。相反,Unity 专注于最有效地利用时间。

在多线程渲染中,Unity 会在 CPU 上同步模拟线程和渲染线程。这减少了延迟。模拟线程主要执行脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见 术语表
、声音、AI 和模拟运行所需的其它任务。渲染线程专注于向图形驱动程序提交绘制调用,图形驱动程序依次验证这些调用并将它们发送到 GPU。为了在线程之间实现最大的并行性,Unity 会根据绘制调用的到来顺序执行这些调用,并同时模拟下一帧。

Unity 等待 GPU 完全渲染并显示上一帧,然后提交下一帧的渲染命令。

尽可能低的延迟

在 Unity 能够提交第一个依赖于视变换矩阵的渲染命令之前,它必须首先从 VR SDK 获取视矩阵。为了尽可能降低延迟,VR SDK 每帧预测头部变换两次

  • 一个预测用于渲染当前帧。此预测对应于帧到达屏幕时,您的头部在实际空间中的位置。

  • 一个预测用于模拟下一帧。

Unity 将当前帧的渲染预测应用于摄像机一个组件,它创建场景中特定视点的图像。输出要么绘制到屏幕上,要么捕获为纹理。 更多信息
参见 术语表
、控制器以及场景渲染所需信息的任何内容。场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,从本质上讲是分段设计和构建您的游戏。 更多信息
参见 术语表
渲染。

有关硬件如何处理渲染的更多信息,请参阅头戴式显示器的制造商文档。

Unity 丢帧时会发生什么?

如果 Unity 未能在下次显示刷新之前及时提交完全渲染的帧,则可能会发生一些情况,具体取决于哪个 VR SDK 处于活动状态。VR SDK 可能

  • 显示先前提交的帧。这看起来像抖动,并且会大大降低体验质量。

  • 根据当前头部姿势重新投影先前提交的帧。这是一种粗略的近似值,作为静态内容的回退效果很好,但任何包含动画或位置移动的内容看起来都不正确。

  • 应用某种形式的位置重新投影。这可能是时间上的,以填充缺失的细节。

有关重新投影(有时称为时间扭曲)的更多信息,请参阅 XinReality wiki 中的时间扭曲条目。

所有这些都会自动发生。此时,Unity 通常为时已晚,无法成功完成它应该已经在渲染的下一帧。相反,VR SDK 获取它接收到的最后一帧并将其重新投影到最新的预测姿势,Unity 等待下一次渲染完整帧的机会以恢复正轨。如果您的应用持续丢帧,Unity 仅渲染隔帧。

有关硬件如何处理渲染的更多信息,请参阅头戴式显示器的制造商文档。

VR 中的 GPU 受限与 CPU 受限

每个显示器都有一个特定的刷新率,Unity 绑定到该刷新率。您可以在运行时使用VRDevice.refreshRate获取此值。值为 1 除以 refreshRate,即可得到分配给单个帧的时间。

例如,如果刷新率为 90 赫兹,则此值可能为 11.1 毫秒。

  • 如果您的应用是 GPU 受限的,则 Unity 探查器一个帮助您优化游戏的窗口。它显示在游戏各个区域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
    参见 术语表
    显示 XR.WaitForGPU 超过一帧时间的毫秒数。

  • 如果您的应用是 CPU 受限的,则一帧的时间将超过指定的帧时间,但 Unity 探查器显示 XR.WaitForGPU 短于一帧时间。

注视点渲染
XR 音频