Facebook 收购 Oculus VR 后,大众对 VR 的关注度和热情重新被唤起,上游供应链也很快开始了适用于 VR 设备的技术研发。 作为 GPU 的发明者,NVIDIA 一直与 Oculus 等公司密切合作,以改善虚拟现实体验。
从消费级的 GeForce、专业级的 Quadro 到移动级的 Tegra,NVIDIA 已经为 VR 做好了全方位的布局:GeForce 主要用于 VR 游戏和 360 度视频;Quadro 面向 B 端用户,如 VR 体验馆;Tegra 则瞄准了移动 VR 头显。
其中,NVIDIA 完整的 GeForce VR 图形平台囊括显卡、驱动、优化和开发工具:基于 Maxwell 架构的 GeForce GTX 显卡、GeForce Experience 以及 GameWorks VR 开发平台。
Maxwell 架构 GPU 借助 VR Direct 能为 VR 头戴式显示器提升性能、降低延迟以及增强兼容性,比如多投影特性应用于多分辨率着色技术,提升渲染效率。 Oculus 官方则推荐 ,Geforce GTX 970 或以上的显卡才能有良好的 VR 游戏体验。
软件方面,有专门的 Game Ready 驱动和 GeForce Experience 进行优化,还有为开发者提供 GameWork VR 平台。这个开发平台包含了相应的 API 和代码库,不同的功能分别面向不同的开发者。
面向游戏和应用开发者,NVIDIA 提供了多分辨率着色(Multires Shading)和 VR SLI 两项功能。面向 VR 头显开发者和供应商,NVIDIA 提供了上下文优先级(Context Priority)、直接模式(Direct Mode)以及前缓冲渲染(Front Buffer Rendering)。
多分辨率着色(Multires Shading)
目前的头戴式 VR 设备都通过透镜让用户拥有更大的视角,但透镜同时会使画面扭曲。为了抵消这些扭曲,电脑会先对画面进行反向扭曲,
按照主流的渲染方案,显卡会倾尽其所有性能来输出全分辨率的正常图像,接着再进行反向扭曲。事实上,反向扭曲后,画面边缘像素被压缩,可以用更少的渲染性能来输出。
多分辨率着色技术把整个画面分割成 3 x 3 的分区,接着用不同的分辨率去渲染。中间区域用高分辨率渲染,周围的区域用低一点的分辨率,这样就可以在不影响最终画面显示效果的前提下,减少显卡计算资源的浪费。
以 Oculus CV1 为例,其 2160 x 1200 像素的屏幕采用多分辨率着色技术所需要的显卡性能会比原来下降 30% 到 50%。多分辨率着色技术也让虚幻 4 游戏引擎得到了 50% 的性能提升。
VR SLI
从输入 (移动头部) 到输出 (在头显中看到游戏中出现动作) 的标准虚拟现实流水线大约耗时 57 毫秒 (ms)。要获得良好的虚拟现实体验,这一延迟时间应该低于 20ms。
目前,绝大部分延迟时间是 GPU 渲染场景所花费的时间以及将场景显示在头盔显示器上所花费的时间 (大约 26ms)。NVIDIA 解决这一问题的方案是 VR SLI。
SLI 全称为 “可扩展连接接口”(Scalable Link Interface),是一种可把两张或以上的显卡连在一起,作单一输出使用的技术,从而大幅提升图形性能。
在传统游戏中,SLI 可令性能翻倍,让用户能够以更高的分辨率和更高级的游戏设置畅玩游戏。但在虚拟现实游戏中,SLI 渲染会产生一帧的延迟。
为了避免这一帧的延迟,NVIDIA 开发了 VR SLI,两颗 GPU 同时独立渲染头显左右眼画面,而不再像以前那样先渲染左边的画面,再渲染右边的画面。这让游戏画面渲染同时充分利用了两颗 GPU。
上下文优先级
上下文优先技术允许开发者执行异步时间扭曲(Asynchronous Timewarp,简称 ATW),以减少对头部转动的延迟。
据极客视界编译 Tom’s Hardware 作者 Niel Schneider 的解释 ,时间扭曲通过扭曲一帧已经渲染完成但还未在屏幕上显示的图像,生成一个中间帧用以弥补头部运动所造成的画面延迟。中间帧是一种后处理效果,它改变的是已经被渲染好的图像来匹配用户最新的头部位置。
时间扭曲的局限性在于,它要依赖于显卡所渲染好的那一帧图像,因为中间帧的调整是发生在这一帧的渲染完成之后。另外,时间扭曲是一个额外的进程,如果此刻计算机正在运行着一个进程的话,画面可能会更加延迟。
异步时间扭曲致力于通过一个独立于显卡渲染周期的处理进程来持续追踪头部位置,这个进程和渲染进程平行运行(异步)。
每一次垂直同步前,该异步进程根据渲染进程最新完成的那一帧生成一个新的帧。相比于时间扭曲,异步时间扭曲能够获取得更低的延迟以及更高的准确度。
NVIDIA 还在推广的一个概念是高优先级图形上下文。通过传统的 DirectX 接口进行渲染时,当你头部从 A 点转动到 B 点,开发者用一个固定进程来处理画面。NVIDIA 放宽了进入渲染路径的窗口,使得头部追踪所带来的不可预估的变化可以被开发者更为迅速地修正。
直接模式和前缓冲渲染
当 VR 头显连接到电脑,NVIDIA 的驱动能识别出它和普通桌面显示器的不同。VR 平台的服务能接管头显,直接渲染画面到上面。这样电脑系统就不会将桌面的画面扩展到 VR 头显上,破坏用户使用过程中完整的体验。
直接模式的另一个好处是,允许访问前缓冲。VR 头显开发者可以利用前缓冲渲染进行低层次的延迟优化。不过,一般情况下,D3D11 是不能访问的。