概念页
VR 与 AR 显示基础
VR & AR Display Fundamentals
虚拟现实 (VR) 完全替换用户所见的世界,增强现实 (AR) 把合成物体融入真实世界,二者常合称 XR。本页介绍与渲染相关的硬件与物理要素:追踪与显示设备、"动作到光子"延迟及其导致的模拟器晕动症、姿态预测、镜头光学畸变与色差的软件补偿、滚动与全局显示,以及立体视觉中的辐辏-调节冲突与瞳距。这些约束决定了 VR 渲染为何必须高帧率、低延迟并严格依赖厂商 SDK。
设备概览(21.1 节)
- 除 CPU/GPU 外,设备分为传感器(追踪用户旋转与位置、各种输入)与显示器。手机方案把一块屏幕逻辑上一分为二,专用设备通常有两块独立屏幕。
- 朝向(姿态 attitude)有 3 个自由度(偏航、俯仰、翻滚),API 可能以欧拉角、旋转矩阵或四元数返回。手机放入头显(从 Google Cardboard 到 GearVR)靠重力、磁北等传感器确定朝向;固定视点全景和视频在这类设备上效果好、成本低。手机的惯性测量单元虽有 6 自由度,但位置误差会迅速累积。
- 6-DOF 追踪(朝向 + 位置):Oculus Rift 用最多三个外部红外摄像头追踪头显上的红外 LED 阵列,属于由外向内 (outside-in) 追踪;HTC Vive 用一对"灯塔"以极快间隔向房间投射不可见光,由头显和手柄上的传感器检测并三角定位,属于由内向外 (inside-out) 追踪。
- 有线 (tethered) 设备牺牲移动性换取强大算力;移动设备受限于算力和功耗。还有背负式电脑、Intel WiGig 用短距 90 GHz 无线电从 PC 向头显传图、云端计算昂贵光照后传给轻量 GPU 等方案。
- AR 与 MR:任何把文字叠加在图像上的 HUD 都是基础 AR(如 Yelp Monocle、Google 翻译替换招牌、《Pokémon GO》、Snapchat 面部特效)。混合现实 (MR) 是 AR 的子集,真实与三维虚拟内容实时融合互动,如手术中把扫描器官与身体摄像画面合并、与被真实墙壁遮挡的虚拟袋鼠玩捉人游戏。
- 视频透视 (pass-through):头显前装摄像头,用户看到的是合成后的视频,便于控制虚实融合,但真实世界会有延迟。
- 光学透视(如 HoloLens):两块透明屏幕,真实世界没有延迟、显示问题或计算开销;但虚拟内容只能增加亮度,暗的虚拟物体挡不住后面更亮的真实物体,显得半透明(HoloLens 有 LCD 调光器缓解)。HoloLens 的 HPU 有 24 个 DSP 核、功耗不到 10 W,处理类 Kinect 摄像头数据做由内向外追踪、识别手势、提取平面与多边形用于碰撞(虚拟物体放在真实桌面上),并用空间锚点定位虚拟物体,锚点可共享给多用户。
- 手机 AR(ARKit、ARCore)通常单视图显示,物体可完全不透明;ARKit 结合运动传感器与摄像头特征点逐帧追踪做由内向外定位,并检测水平与垂直平面。
延迟与晕动症(21.2.1 节)
这里的延迟是整个系统的动作到光子 (motion-to-photon) 延迟:从头转到某方向,到该方向的画面显示出来,链路上每个硬件的处理与通信加起来可达数十毫秒。
- 普通显示器上延迟只是令人烦躁;AR/MR 中延迟越低,虚拟物体越"贴"在真实世界上,否则会漂浮游移;沉浸式 VR 中显示是唯一视觉输入,延迟会引发模拟器晕动症:出汗、头晕、恶心,可持续长达一天。感到不适应立刻摘下头显,硬撑只会更糟。
- 成因是画面与内耳前庭等其他感官不一致。有研究认为 15 ms 不可察觉,超过 20 ms 肯定能感觉到并有害。对比:普通游戏从鼠标移动到显示通常 50 ms 以上,关闭垂直同步约 30 ms。VR 常见 90 FPS,即每帧 11.1 ms;而典型桌面系统通过线缆把一帧扫描到显示器就要约 11 ms,即使渲染只要 1 ms 仍有 12 ms 延迟。
- 应用层缓解:减少视觉流动(前进时不诱导侧看、避免上楼梯)、环境音乐、渲染代表用户鼻子的虚拟物体、柔和颜色与较暗光照;所有物体都响应头部运动,不缩放相机或改变视场角,正确缩放世界,不夺走用户对相机的控制;固定的视觉参照(车或飞机座舱);用匀速代替加速。硬件上也有刺激前庭系统的耳机等尝试。
姿态预测:姿态 (pose) 是头部在真实世界中的朝向与(若可用)位置,用来构造相机矩阵。
flowchart LR A["帧开始: 粗略预测姿态, 用于模拟与碰撞"] --> B["渲染开始前: 取更新的预测, 更新相机"] B --> C["显示前: 取最准确的预测, 扭曲图像匹配"] C --> D["显示"]
如上图,越晚的预测越准、预测时长越短。后来的预测不能完全弥补基于早期错误预测的计算,但尽量使用能显著改善体验;各类硬件支持在需要时快速查询最新头部姿态。降低延迟、提升真实感有助于临场感 (presence)——界面消失,参与者感觉自己身处虚拟世界。
光学(21.2.2 节)
精确的头显光学非常昂贵,VR 之所以负担得起,是因为 GPU 生成的图像会在单独的后处理中被扭曲,以正确到达眼睛。
- 镜头产生广视场的枕形畸变(边缘向内弯),用桶形畸变扭曲每幅图像来抵消。
- 镜头还有色差(像棱镜一样分离颜色),厂商软件生成反向色散的图像加以补偿,因此扭曲后的图像边缘可见橙色镶边。
滚动与全局显示:图像都以串行流发送。
| 类型 | 方式 | 优点 | 缺点 |
|---|---|---|---|
| 滚动显示 | 收到即逐行显示 | 延迟最低,可按条带渲染"追光束 (racing the beam)" | 不同像素点亮时间不同,视网膜与显示相对运动时画面摇晃,AR 中尤其令人不安;合成器通常按扫描线块插值预测姿态来补偿头部快速旋转造成的晃动/剪切,但无法修正场景中物体的运动 |
| 全局显示 | 整幅接收后一次短促点亮 | 没有时序问题 | 技术挑战大;OLED 是当前最佳选择,足以跟上 VR 常见的 90 FPS |
立体视觉(21.2.3 节)
- 两幅偏移的图像激发立体视觉 (stereopsis);它随距离减弱,也不是唯一的深度感知方式——物体大小、纹理变化、阴影、运动视差等单眼线索同样有效。
- 调节需求 (accommodative demand):眼睛为对焦改变晶状体形状的程度,例如 Rift 光学相当于看约 1.3 m 外的屏幕。辐辏需求 (vergence demand):双眼为注视物体向内转的程度。现实中二者联动(调节-辐辏反射);头显的调节需求恒定而辐辏随感知深度变化,冲突导致眼疲劳。Oculus 建议用户长时间注视的物体放在约 0.75~3.5 m。AR 中用户看远处真实物体后,还得重新对焦到靠近眼睛固定深度的虚拟公告板。可变焦显示仍在研发中。
- 瞳距 (IPD):一项对 4000 名美国陆军士兵的研究中 IPD 范围 52~78 mm,平均 63.5 mm。系统有校准方法并把 IPD 纳入 API 的相机模型。不要为了效果修改用户感知的 IPD,例如加大眼距虽能增强深度感但会导致眼疲劳。
- VR 每只眼有独立显示,与偏振镜、快门眼镜等单屏立体系统的规则不同;为每只眼正确设置相机变换很难从零做对,应交给 API。
出处
- realtime_rendering_4ed.pdf 第 21 章 Virtual and Augmented Reality
相关页面
图形学VR 立体渲染优化VR Stereo Rendering OptimizationVR 每帧要为两只眼渲染,并经合成器做镜头畸变与色差校正。本页讲厂商 SDK/API 的帧流程与内建优化(分层合成、隐藏区域网格、裁剪过的畸变网格),立体渲染如何避免工作量翻倍(合并视锥剔除、实例化、多视图扩展、多 GPU 广播、远景单目渲染),以及利用光学和人眼特性减少外围像素着色的技术:多分辨率着色、镜头匹配着色、径向密度遮罩、固定注视点渲染与注视点渲染。图形学VR 渲染注意事项VR Rendering Considerations在单屏上效果良好的渲染技术,放到随头部移动的双目显示上可能失效甚至引起不适。本页汇总 RTR4 第 21.4 节列出的需要修改或避免的技术:HUD 深度、凹凸与视差贴图、公告板与天空盒、色调映射与屏幕空间效果、镜面高光视差、抗锯齿选择、色带、运动模糊与景深,以及混合现实中的光照匹配。核心原则:严格遵循厂商头部模型和投影矩阵,任何会让两眼图像难以融合或与前庭感觉冲突的效果都要谨慎。图形学时间扭曲与异步重投影Timewarp & Asynchronous ReprojectionVR 中即使追踪完美,生成一帧仍需时间;掉帧会造成抖动 (judder)。厂商提供基于图像的补偿:只修正头部旋转的二维时间扭曲 (timewarp)、利用深度做三维重投影的位置时间扭曲、外推缺失帧的空间扭曲 (spacewarp),并常以异步方式运行作为掉帧保险。配合晚期朝向扭曲、late latching 和 CPU/GPU 流水线(running start / adaptive queue ahead),在不掉帧的前提下进一步缩短动作到光子的延迟。图形学实时渲染Real-Time Rendering实时渲染是在计算机上快速生成图像、并让图像随用户输入即时变化的技术。RTR4 认为它由三个要素共同定义:交互性、三维空间感,以及图形加速硬件 (GPU)。游戏数学欧拉角与万向节锁Euler Angles & Gimbal Lock欧拉变换用 head(yaw)、pitch、roll 三个角度构造朝向矩阵,直观、易于用日常语言讨论,适合小角度调整和观察者朝向。但它依赖旋转顺序,两组欧拉角难以组合和插值,并且会出现万向节锁,因此更复杂的朝向处理需要四元数。游戏数学四元数Quaternion单位四元数可以紧凑地表示任意三维旋转,与轴-角表示互相转换很简单,并能做稳定、匀速的朝向插值(slerp),这些都是欧拉角做不好的。它可以高效地转换为矩阵以便与其他变换合并。游戏数学投影矩阵Projection Matrix投影矩阵把视景体变换到规范视体(OpenGL 为 [-1,1]^3,DirectX 的 z 为 [0,1]),在那里裁剪更高效。正交投影保持平行线平行、物体大小与距离无关;透视投影让远处变小,产生的深度与观察深度成反比,近平面位置和"反向 z"决定深度精度。图形学GPU 内存、缓冲压缩与多重缓冲GPU Memory, Buffer Compression & Multiple Buffering带宽是稀缺资源。GPU 通过独立显存或统一内存架构 (UMA)、多级缓存与按瓦片存储提高局部性,并用基于瓦片表的无损压缩和快速清除减少渲染目标的带宽(注意:无损压缩只省带宽,不省内存)。颜色缓冲有高彩、真彩、深色三种模式;显示控制器以固定刷新率或 FreeSync/G-sync 自适应同步把颜色缓冲送到显示器;单/双/三缓冲在撕裂、等待与延迟之间取舍。游戏策划临场感Presence第 3 版新增的第 22 章。Schell 认为 VR 与 AR 与其说是"骗眼睛"的技术,不如说是"骗身体"——更准确地说,是骗大脑对身体的感知,即本体感觉 (proprioception)。VR/AR 的真正魔力不是三维图像,而是让我们把身体带进模拟世界,由此产生的临场感 (presence) 是这类媒介的核心。临场感是脆弱的幻觉,本章列出六种破坏临场感的因素和六种建立临场感的手段,并给出鼓励环顾、"棕盒 (brownboxing)"原型和围绕硬件设计的建议,引入 93½ 临场感之镜(第 3 版第 22 章 Some Interfaces Create a Feeling of Prese