Version: 6000.3
语言: 中文
多视图渲染区域(Multiview Render Regions)
URP 应用程序 Spacewarp

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 删除帧时会发生什么?

如果 Unity 没有及时提交完全渲染的帧,以便为下一次显示刷新做好准备,则可能会发生一些情况,具体取决于处于活动状态的 VR SDK。VR SDK 可能会:

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

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

  • 应用某种形式的位置重新投影。这可能是填补缺失细节的临时性的。

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

这一切都会自动发生。此时,Unity 通常为时已晚,无法成功完成它应该已经渲染的下一帧。相反,VR SDK 会获取它收到的最后一帧并将其重新投影到最新的预测姿势,然后 Unity 会等到下一次机会渲染完整帧才能回到正轨。如果您的应用程序不断丢帧,Unity 仅每隔一帧渲染一次。

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

VR中的GPU绑定与CPU绑定

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

例如,在刷新率为 90 Hz 的情况下,这可能是 11.1 毫秒。

  • 如果您的应用受 GPU 绑定,则 Unity探查器帮助你优化游戏的窗口。它显示在游戏各个区域花费的时间。例如,它可以报告渲染、动画或游戏逻辑所花费的时间百分比。更多信息
    请参阅术语表
    显示XR.WaitForGPU超过一帧的时间(以毫秒为单位)。

  • 如果您的应用受 CPU 限制,则帧花费的时间会长于指定的帧时间,但 Unity Profiler 会显示XR.WaitForGPU比一帧短。

多视图渲染区域(Multiview Render Regions)
URP 应用程序 Spacewarp