从延迟的角度来看,虚拟现实(Virtual Reality,VR)技术是一项最需要人在回路(human-in-the loop)的应用。对于高质量的VR体验而言,最重要的是用户头部物理运动与头盔显示器(Head Mounted Display,HMD)上实时刷新图像到达用户眼睛之间的延迟时间。人类的感官系统能在一定范围内感知到视觉和听觉中相对较小的延迟,但是当绝对延迟控制在大约20毫秒以内的时候,这些延迟几乎就不可察觉了。目前互动式的3D系统造成的延迟要比这个数字高上几倍,但是如果不断调试同一组硬件的话,我们终究会满足要求。
- John Carmark

延迟问题似乎OculusVR所面对的主要问题,当然这也是VR整体需要解决的问题。延迟会导致不连续的游戏体验,并导致玩家的呕吐和不适应,所以找出造成这一问题的所在和解决方法是十分重要的。

目前针对这些问题已经有了一些答案。在AltDevBlogADay网站上,卡马克最近花时间解决了其中的一些问题,并向不明真相的群众解释了VR的真相。

那个帖子干货颇多,以下是其中的要点:
- 整个系统的延迟控制在50ms就会感觉相对不错,但是还能感觉到。
- 当延迟低于20ms,人就无法感知出来了,这可以说是VR最佳体验的标准。
-预测传感器数据可以被用于减缓一些系统延迟,但即使是最精准的人类头部移动模型,在用户实际使用的时候,还是会有预测不准的时候。
-滤波和通讯所带来的延迟是持续存在的,但大多数传感器不同步的刷新会引入了一个可变延迟,或者说当渲染的帧率与传感器的刷新率不同的时候,也会造成延迟的不规律波动。
-早期的 LCD 屏幕在画面滚动和变化的时候,因会有几十毫秒的残影而饱受诟病,但在过去二十年里,这一技术有了长足的进步。LCD 每一个像素点的转换时间取决于色彩变化的程度,一块优秀的面板的转换时间能控制在大约 10ms 之内,而为 3D 显示和游戏而优化过的显示器能减少一半左右的切换时间。
-一些不常见的显示技术比 LCD 面板的刷新速度更高;OLED 子像素的刷新时间低于 1ms,而激光显示屏和 CRT 反应一样及时。
-另一个不易察觉的延迟是:大多数显示器是逐行显示图像的,而显示器的图像是从计算机里读取的,但由于计算机自身的原因,会导致帧率为 60fps 显示器上,屏幕底部的画面要比顶部的刷新时间慢 16ms 左右。
-在静止的屏幕上,这根本算不上问题。然而在 HMD 里,因为源图像是即时渲染出的,但不同的部分显示在屏幕上的时间是不同的,所以它可能造成图像的左边或右边被裁剪掉;或转动头部时,图像出现晃动。这个效应在使用 LCD 屏幕的 HMD 上不易察觉,但在刷新更快的 OLED 屏幕的 HMD 上却更容易显现出来。
-立体渲染降低延迟的一个诱人的解决方案是:将图形处理系统分拆成两个,并分别配备一个 GPU,每个 GPU 只需单独渲染一只眼睛的图像,这样可以达到最佳的性能表现和最低的延迟,其代价是要求设备能够管理两个相互独立的渲染内容的缓存。
-但它的问题是如果设备无法维持两个 GPU 的缓存,设备的数据吞吐性能会下降,在缓存过载的情况下,还会导致帧率更严重地下降。
-大多数模拟输入的任务不直接依赖于用户的输入数据,换而言之,这一数据的输入对一帧的延迟并不敏感。如果在需要用户输入的数据时采样,而不是在一开始就离线缓存输入数据,则能减少总体的延迟。(这种方法被称之为 late frame scheduling,延迟帧调度)。
-late frame scheduling 也是一种解决方案,但其缺点在于它使得调度需求非常紧凑——通常情况下,late frame scheduling 需要一定的时间,并会造成电力浪费。不过如果你的帧率是由视频回扫决定的,而不是随机读取视频片段,那么通过图片驱动辅助确定目前需要扫描输出的准确位置,也会有助于降低延迟。
-另一个与 late frame scheduling 一样,可以降低延迟的方法是:允许渲染编码根据底层的游戏编码,以及用户输入的最新样本,修正输入到渲染编码中的参数(这种方法称之为 View bypass)。对比用户前后输入样本,设备可以确定出哪一个是用户输入的变量。而变量可以被用于修正游戏提交给渲染编码的视觉矩阵。
-这种变量处理的方式可以最小化处理的复杂程度,不过游戏中也经常会有无需用户输入的渲染场景,比如经典镜头的剪辑或者玩家死亡的情形。一个为 VR 而生的游戏应该是否应该避免这样的情形尚有争议,因为在 HMD 里一个无法响应的视角是会让人感到迷惑或者不快,但在传统游戏设定里会有很多这样的场景,这样的场景很常见。
-如果我们能知道渲染一帧具体需要花费多长时间,那么一些额外的延迟可以通过整个渲染任务的 late frame scheduling 来节省下来,但这显然不实际,因为渲染时间难以预估。但渲染好的图像后是可以往后安排处理任务的,并且能争取到一段可预测的时间,从而使得 late fram scheduling 更容易。(这一方法被称之为 time warp)。
-绘制出一副高质量的图像之后(使用过 View bypass),这幅图像不是直接呈现出来,而是让开发者继续抓取用户输入的最新的数据,生成更新的视觉参数,然后计算出与输入数据相匹配的已渲染图像需要变形成什么样,放置在什么位置。经过这一次转换之后,渲染变形后的图像能与与用户实际操作后应该看到的图像更相符。
-「view bypass」和「time warping」是两种互补的技术,它们既可以单独使用,也能够共同使用。time warping 可以将源图像的任意时间和位置变形成另一个,但是由于尽可能使用最新渲染出的图像,内部视差和屏幕边缘的细节会丢失,而 view bypass 渲染则可以帮助提供这部分细节。
-动作状态改变的操作,比如按下开关或者扣动扳机,通过线缆传输信号,延迟依然只能控制到大概在 32-48ms 之间,但不可能低于使用过 view bypass 技术的 16-32ms 延迟。
-通过 bypass 的优化,关键的头部转动反馈在 60hz 的屏幕刷新率下,延迟能够保证控制在 2-18ms 之间。如果结合低延时传感器和屏幕,人们甚至觉察不到延时。连续不断的 time warp 有可能将延迟降到 3ms 以下,这可能踏入人类和计算机都未曾探索过的领域。
-传统的电脑交互界面大体上都没有 VR 所需的那么低的延迟,但是敏感的用户能够感觉出 20ms 或更低延迟之间的差异,这使得这项技术还能被用于 VR 之外的领域。
-一个比较有趣的应用场景是云游戏——用户通过简单的客服端或者应用发送至远程服务器,然后服务器持续不断地回传游戏的视频流。这能给予用户难以想象的便利——但是由于受到网络和压缩延迟的限制,这也降低了游戏的体验。
-View bypass 和 time warping 两者也能在服务器中起到作用,帮助减少由网络造成的很大一部分延迟。如果云端游戏客户端能设计的足够精巧,那么 time warping 完全可以储存在本地客户端里,但是它可能会明智地将减少的总延迟时间控制在 30-40ms 之间,避免与源图像之间差异过大。


英文原文链接
中文翻译链接

Oculus CTO卡马克:延迟背后的真相相关推荐

  1. 卡马克揭开VR延迟背后的真相

    原文:http://oculusrift-blog.com/john-carmacks-message-of-latency/682/ 延迟是OculusVR所面对的最大挑战之一,  它不仅会分散玩家 ...

  2. 传奇工程师卡马克入坑 AI:徒手一周实现反向传播和 CNN

    约翰 · 卡马克是何方神圣? 谁是约翰 · 卡马克? 他是一位集传奇工程师.大神.疯狂程序员.黑客之神.第一人称射击游戏之父.业界活化石.一代玄学码神所有称号为一身的老牌程序员,一举一动都牵动人心. ...

  3. Meta官方吐槽大会?Connect 2022卡马克演讲全文回顾

    在上周举行的Meta Connect期间,Reality Labs顾问CTO John Carmack(约翰·卡马克)按惯例发表了一年一度的脱稿演讲.我们知道,卡马克脱稿演讲是每年Connect大会的 ...

  4. 3D 游戏之父卡马克再创业:“我自己出得起 2000 万美元,但花投资人的钱会更有责任心”...

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) John Carmack,一代传奇游戏程序员,被誉为 3D 游戏之父. 近日,他在 Twitter 上透露,将再次进行创业,成立了一家新公 ...

  5. 厌倦 Meta 内斗与低效,​传奇大神卡马克愤然离职

    "这是我在 VR 领域十年的结束" 整理 | 何苗 出品 | CSDN(ID:CSDNnews) 上周五,前 Meta CTO.传奇程序员约翰·卡马克(John Carmack) ...

  6. 游戏界的扛把子、3D 游戏之父约翰•卡马克的传奇人生

    作者 | 年素清  责编 | 张文 出品 | 程序人生 (ID:coder _life) 约翰•卡马克(John D. Carmack II)是电脑游戏界的传奇人物,你可能没听过这个名字,但你肯定玩过 ...

  7. 约翰·卡马克和他的id Software

    上帝花了6天创造了这个世界,id software和它的创始人.引擎师约翰·卡马克(John Carmack),则用6款游戏创造了个人电脑的3D世界. 1992年,id做出了<德军总部>, ...

  8. 游戏界的“扛把子”,“3D 游戏之父”, 约翰•卡马克的传奇人生

    作者 | 年素清 责编 | 王晓曼 出品 | 程序人生 (ID:coder _life) 约翰•卡马克(John D. Carmack II)是电脑游戏界的传奇人物,你可能没听过这个名字,但你肯定玩过 ...

  9. cf3月14服务器维护,CF3月14在线活动背后的真相详情

    穿越火线官方即将在3月14日为所有的小伙伴们准备一个3.14在线盛典好礼活动,大量黄金武器.英雄级武器以及稀有永久武器等着小伙伴们来领取.但是有论坛水友分析出这个活动背后的真相,一起随我们看看吧! C ...

最新文章

  1. php多表头表格,HTML多表头表格代码示例
  2. 验证Linux主机是否支持RDMA
  3. jquery 实现智能炫酷的翻页相册效果
  4. net Core做一个webApi的简单实例
  5. 曾为浮云遮望眼,平沙莽莽黄入天。 终有一缘得一道,拨开云雾见青天! ——论如何快速删除上亿级数据集思路
  6. Windows server 2016 安装补丁报错 - The update is not applicable to your computer Error:0x800f0823
  7. java 方法互斥_Java 两个互斥方法同时访问一个成员变量
  8. c++11 多线程编程(二)------ 线程类构造函数深入理解
  9. 应急响应常用的工具说明
  10. Java国际手机号正则校验
  11. 编程”灵魂之心“之消息机制
  12. 拉链表取某一天的历史快照
  13. cuda学习(5):使用cuda核函数加速warpaffine
  14. 云课堂C++类10T级课程第十课
  15. 性能测试:深入理解并发量,线程数,吞吐量,TPS
  16. 蚂蚁金服Java后端(一面)面试题
  17. 垂杨柳中学2021年高考成绩查询时间,2021年中考成绩
  18. 文件隐藏(windows文件隐藏,利用类标识隐藏)
  19. 【计算机系统结构】~ MCU、AXI、IIC、SPI、GPIO、JTAG 接口、指令执行步骤、晶体与晶振的区别
  20. 基于matlab的磁悬浮控制系统,基于matlab的磁悬浮控制系统研究.docx

热门文章

  1. ACC——carsim与simulink联合仿真
  2. Python-loss和acc曲线分析
  3. 新学期,新气象,新起点,新征程。
  4. 计算机专业学生的自我介绍英语翻译,大学生自我介绍英文版带翻译.doc
  5. IEEE letter,magazine,journal/transaction
  6. gitlab配置SMTP方式发送邮件
  7. 华为2020手机鸿蒙计划,华为鸿蒙 OS 2020 计划曝光!手机仍然优先用安卓
  8. 2.6.36.2 s3c6410 触摸屏驱动移植。
  9. 公司某应用服务器被挂挖矿病毒处理流程
  10. Matlab 图像傅里叶变换