# 英伟达林耀南：如何用 5 大技术让 VR 产品告别体验差？

- 作者：VR 价值论
- 发布时间：2016-11-25 15:01
- 分类：新创
- 原文：https://www.ifanr.com/753251

![ask-an-expert-vr-safe-for-kids-0001-alt](https://s3.ifanr.com/wp-content/uploads/2016/11/Ask-An-Expert-VR-Safe-For-Kids-0001-Alt-1024x640.jpg)

> 编者按：本文转载自转载自微信公众号 VR 价值论（vr-value），转载时已获得作者授权。

如果你是一位刚入行的 CP，对于显卡优化的基本概念还不清楚；如果你在从事硬件开发，想系统了解如何优化 VR 体验；那么这篇文章，值得收藏、细读。

本文您将了解到：

1. 影响 VR 产品体验的原因是什么？
2. 如何提升 VR 产品体验？

VR 产品层出不穷，但用户的体验却一直没有达到最佳状态。画面真实度差和延迟造成的眩晕感是影响 VR 产品体验的两大重要原因。

既然从软件到硬件都急需进行优化，那么究竟产品的优化应该如何进行？这其中又有哪些方式？

> 本期来自英伟达亚太 GPU 产品总监林耀南在 VRWDC 世界虚拟现实开发者论坛的分享：**如何用 5 大技术提升 VR 产品的体验？**

在分享之前，我想先提一个问题：在你交男 / 女朋友的时候，第一次约会是否重要呢？

我相信在座大部分的朋友都会回答：重要。第一次约会对于双方而言，都是一个很重要的体验。一旦这次的体验出了问题，你就不再有和对方继续发展下去的欲望了。

![powerup-and-vr](https://s3.ifanr.com/wp-content/uploads/2016/11/powerup-and-VR-1024x683.jpg)

图片来源：[Wired](https://www.wired.com/2015/10/powerup-first-person-drone/)

回到我的主题，我想表达的是，对于虚拟现实产业而言，用户的体验也十分重要。

而 VR 产业现在恰恰面临着一种情况——在硬件设备并不普及的情况下，大多数用户通过一些并不舒适的或简易的设备来体验，这可是有点给 VR 产品的体验判了死刑。

明明有一些 VR 产品体验非常棒，但不少用户在第一次却经历了较差的体验，从此对 VR 产品不再感冒，岂不是很可惜？

到底是什么造成了用户比较差的 VR 体验呢？

### 1

造成用户体验差的原因是什么？

- **画面真实度差**

这主要取决于效能，效能是优质画面的基础力量。

通俗来讲，绝大多数的游戏玩家一般是以 1080p 与 30fps 来进行游戏，但 VR 的画质约为 2k，描绘必须接近 3k，且画面刷新率要高于 90fps 才会顺畅，代表执行 VR 游戏的 PC 效能必须达到传统 PC 的 7 倍。

但这很难，因此很容易造成画面失真，影响用户的体验。

- **延迟造成眩晕感**

玩家从当前位置改变到另一位置时的图像被 CPU 提交，GPU 渲染，同步刷新到头部显示设备上，如果每秒有 90 帧的画面，可是每一帧都比用户的移动慢一点，这中间的延迟超过 20ms 就会导致用户大脑因无力计算而发生错乱，临床表现就是头晕、头晕、头晕。

而这两点也大大降低了用户的 VR 产品体验。

所以我们不仅要解决效能的问题，还要解决延迟的问题，“天下武功，唯快不破”。那到底有哪些解决的方式呢？我们愿意把已经掌握了的功能分享给大家，共同解决 VR 产品体验差的问题。

### 2

如何改善 VR 产品体验？

一般来说，沉浸式 VR 体验（450MPixel/S）（价值菌注：MPixel/S 为每秒百万像素）对性能的要求是普通 PC 游戏 （60MPixel/S） 的 7 倍。

PC 游戏以 1080p 分辨率和 30FPS 刷新率为技术数据，而 VR 游戏的实际渲染分辨率为 1512×1680×2，刷新率需要达到 90FPS，才能带来良好的体验。

基于这样的痛点，我讲讲如何通过 5 种图形渲染方面的技术来解决这个问题，实现更好的体验。

![gear-vr-review-8](https://s3.ifanr.com/wp-content/uploads/2016/11/gear-vr-review-8-1024x768.jpg)

图片来源：[VRHeads](http://www.vrheads.com/troubleshooting-your-samsung-gear-vr-starts-our-ultimate-guide)

- **Multi-res shading 多分辨率着色**

讲白了，我们在 VR 的世界里看到直的是直的，横的是横的，这是因为有一个光学透镜，通过光学透镜可以看到图片，所以我们必须做反扭曲（undistortion），来看到一个完美的世界。

但是做反扭曲，却不是很容易的，这会浪费很多其他项目。

我们所看到的画面在眼镜里其实没有完全成像，只成像了一半，大部分的地方都是黑的，这些都没有成像，那我为什么要画那么大？

我画了 150 份最后只显示 100 份，太浪费。

而 Multi-res shading 的基本原理是，将图形渲染与 VR 头盔的光学变形情况结合起来。

由于 VR 头盔贴近眼球，所以需要一组镜片帮助用户对焦。但因为镜片的存在，会导致画面发生畸变，所以需要对画面进行畸变补偿。

畸变补偿的画面所需信息，比 GPU 渲染出的画面要少很多（镜片光路损失一部分，同时人眼对视觉中心比边缘看得更清楚）。所以 GPU 本质上做了很多无用功。

Multi-res shading 要做的就是，把每一帧的画面分成多个部分，中间保留更多细节，而边缘保留较少细节。换个角度就是压缩画面，从而提升渲染速度。

所以当我们把游戏切成 9 个部分，根据 9 个部分，中间形变最少采取 100% 的分辨率，剩下的开发商可以自己填，填完之后在没有减少视觉的差异下，还是 100%，不会浪费。

- **Front Buffer Rendering 前缓冲渲染**

我刚刚讲，天下武功为快不破，这里就要通过直接对前缓冲渲染来减少延迟。

前缓冲渲染技术原理跟直接模式相关。

简单来讲，如果电脑把 VR 头盔当做普通显示器的话，就需要通过标准的两级缓冲模式进行渲染。而识别成 VR 头盔的话，就可以越过 Back Buffer 直接进入 Front Buffer，从而减少延迟。

![facebook](https://s3.ifanr.com/wp-content/uploads/2016/11/FACEBOOK-1024x615.jpg)

图片来源：[Virtalis](https://www.virtalis.com/virtual-reality/)

- **Context Priority 上下文优先级**

Context Priority 可控制 GPU 调度以支持各种先进的 VR 功能，像是异步时间扭曲。

稍微解释一下什么是异步时间扭曲。

它是指在一个线程（称为 ATW 线程）中进行处理，这个线程和渲染线程并行运行。在每次同步之前，ATW 线程根据渲染线程的最后一帧生成一个新的帧。

可能不是很好理解，我用简单一点的语言来描述。

举个例子。

如果转头过快的话，新位置的画面还没渲染出来，或者出现的是前一个位置的画面，就会引起不适。

怎么解决这个问题呢？

技术专家想到一种方法，即人为插入一个根据位置计算出来的帧来占位。

GPU 需要一个独立的线程来做这件事，抢在下一帧出现之前占位，从而减少画面的延迟（或因为掉帧而引起的抖动）。

如此不仅能缩减延迟，当游戏玩家移动头部时还能快速调整显示影像，无须重新渲染画面。

- **VR SLI 多显卡支持**

这需要用到 CPU，以确保两个眼睛看到同一点。这里就需要通过增加显卡来增强渲染性能。

人有双眼，所以 VR 图像都被渲染成左右两个画面。但是这两个画面是不一样的，这就额外增加了 CPU 和 GPU 的占用。

虽然，有些计算不需要算两遍，比如物理计算，阴影图，游戏逻辑等，但实际视角包含的画面肯定需要重新计算，以保证正确的时差和深度信息。

![osvr-2-1200x0](https://s3.ifanr.com/wp-content/uploads/2016/11/osvr-2-1200x0-1024x683.jpg)

图片来源：[Digital Trends](http://www.digitaltrends.com/virtual-reality/acer-osvr-razer/)

所以说，在有些极端情况下，虚拟现实渲染模式下 GPU 用量是翻番了的。

在这种情况下，如果使用两块显卡，并行处理左右两个画面，就可以解决好了。

也就是说，一块显卡处理左眼的画面，另一块处理右眼的画面，最后整合在一起输出。

这个方法可以大大提升计算效率，却也不会增加延迟。举一个例子。

常规多显卡渲染即：

显卡 0 和显卡 1 轮流渲染第 n 帧和第 n1 帧，但是要求 CPU 提交得足够快，因为 CPU 要提交两份 DRAWCALL，CPU 不能成为瓶颈。

而经过改进之后：

让显卡 0 和显卡 1 分别负责绘制左右两眼，而 CPU 为两个显卡提供一模一样的 DRAWCALL，因为在 VR 的两眼绘制的东西基本是一样的，除了 PERSPECTIVE 矩阵不一样。

而 VRWORKS 通过其 API，实现了一组 DRAWCALL 对多个显卡的广播，可以为不同显卡设置不同的 PERSPECTIVE（常量）。这样 CPU 一份 DRAWCALL 对于两眼，而两眼的绘制在两个 CPU 并行，延迟大大节省。

![vr-games](https://s3.ifanr.com/wp-content/uploads/2016/11/vr-games-1024x576.jpg)

图片来源：[Glass Apps Source](http://www.glassappsource.com/sony-playstation-vr/vr-games-that-are-worth-playing-on-the-playstation-vr.html)

- **DIRECT MODE 直接模式**

这个模式使得 GPU 与头戴式可视设备之间，能够具备良好的即插即用兼容性。

它能兼容各种虚拟现实头盔，即插即用。传统的渲染，PC 显示器会把 VR 眼镜作为显示器的一个显示扩展，VR 眼镜和 GPU 是没有直接交互的。

而透过 Direct Mode （直连模式），我们的绘图处理器驱动程式就有能力，把头戴装置辨识成一部 VR 显示器，而不仅仅是一个标准的桌面显示器，因此能提供更接近无缝的用户体验。

VR 体验的重点，是得匹配人类的四大感官才可以得到很大的体验。我也希望以上所提到的五种技术，可以帮助开发者真正提升 VR 产品的用户体验。

题图来源：[Digital Trends](http://www.digitaltrends.com/virtual-reality/is-vr-safe-for-kids-we-asked-the-experts/)
