在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 未能在下次显示刷新之前及时提交完全渲染的帧,则可能会发生一些情况,具体取决于哪个 VR SDK 处于活动状态。VR SDK 可能
显示先前提交的帧。这看起来像抖动,并且会大大降低体验质量。
根据当前头部姿势重新投影先前提交的帧。这是一种粗略的近似值,作为静态内容的回退效果很好,但任何包含动画或位置移动的内容看起来都不正确。
应用某种形式的位置重新投影。这可能是时间上的,以填充缺失的细节。
有关重新投影(有时称为时间扭曲)的更多信息,请参阅 XinReality wiki 中的时间扭曲条目。
所有这些都会自动发生。此时,Unity 通常为时已晚,无法成功完成它应该已经在渲染的下一帧。相反,VR SDK 获取它接收到的最后一帧并将其重新投影到最新的预测姿势,Unity 等待下一次渲染完整帧的机会以恢复正轨。如果您的应用持续丢帧,Unity 仅渲染隔帧。
有关硬件如何处理渲染的更多信息,请参阅头戴式显示器的制造商文档。
每个显示器都有一个特定的刷新率,Unity 绑定到该刷新率。您可以在运行时使用VRDevice.refreshRate获取此值。值为 1 除以 refreshRate
,即可得到分配给单个帧的时间。
例如,如果刷新率为 90 赫兹,则此值可能为 11.1 毫秒。