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

巫盼 7年前 (2016-11-25)

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

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

本文您将了解到:

1.影响VR产品体验的原因是什么?

2.如何提升VR产品体验?

VR产品层出不穷,但用户的体验却一直没有达到最佳状态。

画面真实度差和延迟造成的眩晕感是影响VR产品体验的两大重要原因。

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

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

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

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

回到我的主题,我想表达的是,对于虚拟现实(价值菌:以下简称VR)产业而言,用户的体验也十分重要。

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

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

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

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

●画面真实度差

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

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

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

●延迟造成眩晕感

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

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

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

如何改善VR产品体验?

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

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

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

(价值菌:接下来一大堆专有名词来袭,请准备好词典哦。)

❶ 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,从而减少延迟。

❸ Context Priority上下文优先级

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

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

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

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

举个例子。

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

怎么解决这个问题呢?

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

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

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

❹ VR SLI 多显卡支持

这需要用到CPU,以确保两个眼睛看到同一点。

这里就需要通过增加显卡来增强渲染性能。

人有双眼,所以VR图像都被渲染成左右两个画面。

但是这两个画面是不一样的,这就额外增加了CPU和GPU的占用。

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

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

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

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

这个方法可以大大提升计算效率,却也不会增加延迟。

举一个例子。

常规多显卡渲染即:

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

而经过改进之后:

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

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

❺ DIRECT MODE 直接模式

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

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

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

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

最后,记得关注微信公众号:镁客网(im2maker),更多干货在等你!

镁客网


科技 | 人文 | 行业

微信ID:im2maker
长按识别二维码关注

硬科技产业媒体

关注技术驱动创新

分享到