vr的延迟和渲染效率优化与Nvidia VRWorks

vr如今正处于风生水起的阶段,可是vr的性能一直是大问题,最主要的问题就是响应延迟,玩家改变位置到这一位置的图像被cpu提交,gpu渲染,同步刷新到头部显示设备上,这中间的延迟会致使用户的头晕,减小相应的延迟,是vr从硬件到软件一直在优化的问题。Nvidia针对这个,新推出了VRWorks组件,这是一套软硬件结合的改善响应延迟以及提升vr渲染效率的方案,从硬件上作了一些改进和加速,同时也提供了一组api,去为你的vr应用和vr设备提供优化的方案,每当技术存在瓶颈时,硬件的改进永远是推进性巨大的。在vrwork的优化方案中,有不少很值得学习和研究的地方,也有助于咱们理解vr的性能瓶颈所在,这里作一下概括。算法

  vr的性能瓶颈来源

1.vr须要至少同时渲染2 张50fps的图像,比常规的pc渲染量都要大。
2.vr对输入延迟性要求很高,由于对输入超过20ms的延迟都会引发用户的不适。

VR WORKS的优化

1.vr sli 多显卡支持

经过增长显卡,增长渲染性能。

常规的多显卡渲染是这样的,



即显卡0和显卡1轮流渲染第n帧和第n1帧,可是要求cpu要提交的足够快,由于cpu仍是要提交两份drawcall,cpu不能成为瓶颈,这种方式从绘制n到n绘制出来的延时如图。

vrworks 作了改进,如图
让显卡0和显卡1负责绘制左右两眼,而cpu为两个显卡提供如出一辙的drawcall,由于zaivr的两眼绘制的东西基本是同样的,除了perspective矩阵不同。而vrworks经过其api,实现了一组draw call 对多个显卡的广播,并能够为不一样显卡设置不一样的perspective(常量)。这样cpu一份drawcall对于两眼,而两眼的绘制在两个cpu并行,延迟大大节省。固然这里还有一些可能能够优化的,好比不少东西,例如shadow map,基于gpu的一些物理可能不须要在两个gpu都作一遍,能够优化一下。

2.Multy Resolution Rendering 多分辨率渲染。

这个在vr领域算是经典的优化了,不少vr设备都作了这个,原理来源于,vr的图像为了适应眼镜的变形要作卷曲(wrap),如图windows


咱们须要获得的是右边的图,可是渲染出来的都是左图,因此通常都是在最后将左图在图像上作处理,变成右图,这样咱们能够看到其实左图在边缘处不少像素在卷曲后被浪费了,因而人们就像咱们是否是能够对vr的图像作不一样分辨率的渲染,即中心区域用比较高的分辨率,而边缘位置用较低的分辨率,极限状况下,将大部分边缘下降分辨率,能够减小50%的pixel的渲染,提升一倍的效率。
可是常规的渲染管线,要这样作,得不偿失,由于你要切分这个区域,定义多个不一样大小的viewport,而后将物体依次渲染到多个viewport上,固然你可能会想到对不一样的viewport能够剪裁掉不一样的物体。
可是nvidia的maxwell架构的芯片,即GTX900以上(也就是为何作vr要用好的显卡)支持了一种叫作multi-projection的技术,即在显卡层面,支持同时运行多个视口和投影,他不一样于常规管线,他在管线中并行了多个投影,同时渲染到多个viewport,pipeline仍是一次,只是在后面将这些像素绘制到多个viewport,这就是硬件层面的多适口多分辨率。

3.asyncchronous timewarp 异步时间卷曲


timewarp也是vr很经典的优化,在occlus等早已使用,若是没有timewarp,咱们会感受很大的延时和眩晕。由于就算帧率再高,咱们看到影响的那一刹那,渲染的也是过去某个时刻的图像,和咱们当时所处的位置是不同的,这种不一致随着帧渲染耗时的增加而增加,这种timewarp的作法是,在gpu绘制结束,扫描给显示屏前,将这个图像作一个图像空间的位移,以校准咱们当前的位置,也就是说处于p0位置渲染的图像,在p1位置绘制好给咱们,咱们须要将其校准成p1位置的样子,这种校准有不少算法,都是在图像处理上作的平移,这样咱们会感受到看见的和咱们的位置是同步的。api


可是在传统的渲染中,这些工做是在一个流水线上的,也就是同步的,当某一帧很耗时很卡时,用户会迟迟收不到当前位置校准的图片,一直停留在上一帧的图片,由于gpu卡住了,后面的校准(timewarp)也不能进行,用户会感受强烈的卡和眩晕。架构

这里就提出了一个异步 timewarp的概念,即在gpu上有一个独立的线程作这个warp,即无论你主线程渲染卡成什么样,我这个独立的线程会按照帧率给你每一个位置的warp,给你最新的基于你位置的图像,这能解决很卡很卡时咱们依然可以获得模拟的图像。可是传统的gpu不支持这种独立的线程。nvdia的vrworks加入了这个。他加入了一个high-priority context的概念,容许用户启动一个优先级最高的线程最warp,独立于你的渲染线程。异步

4. direct mode

传统的渲染,pc的显示器会把vr眼镜做为显示器的一个显示扩展,vr眼镜和gpu是没有直接交互的,而vrwroks里能够开启vr headset的直接模式,让gpui直接将图像扫描到vr设备。async


5.Front Buffer Rendering

在direct mode下容许直接渲染到vr设备的front buffer上,仍是为了减小延迟,可是直接到front buffer 上的画面撕裂问题怎么解决?性能



这就是nvidia vr works对vr的性能的优化,也许对于vr应用开发是个好的消息,同时从中咱们也能够一窥vr中的性能瓶颈和解决思路。学习

最后这是vr works 如今的软硬件支持状况:优化

pc, D3D11 only, windows7 +, Multi resulution rendrering 要gtx 900+(maxwell arc),其余的那些要GTX 500 +。ui


nvidia的开发者页面、

https://developer.nvidia.com/vrworks






相关文章
相关标签/搜索