vr如今正處於風生水起的階段,可是vr的性能一直是大問題,最主要的問題就是響應延遲,玩家改變位置到這一位置的圖像被cpu提交,gpu渲染,同步刷新到頭部顯示設備上,這中間的延遲會致使用戶的頭暈,減小相應的延遲,是vr從硬件到軟件一直在優化的問題。Nvidia針對這個,新推出了VRWorks組件,這是一套軟硬件結合的改善響應延遲以及提升vr渲染效率的方案,從硬件上作了一些改進和加速,同時也提供了一組api,去爲你的vr應用和vr設備提供優化的方案,每當技術存在瓶頸時,硬件的改進永遠是推進性巨大的。在vrwork的優化方案中,有不少很值得學習和研究的地方,也有助於咱們理解vr的性能瓶頸所在,這裏作一下概括。算法
這個在vr領域算是經典的優化了,不少vr設備都作了這個,原理來源於,vr的圖像爲了適應眼鏡的變形要作捲曲(wrap),如圖windows
timewarp也是vr很經典的優化,在occlus等早已使用,若是沒有timewarp,咱們會感受很大的延時和眩暈。由於就算幀率再高,咱們看到影響的那一剎那,渲染的也是過去某個時刻的圖像,和咱們當時所處的位置是不同的,這種不一致隨着幀渲染耗時的增加而增加,這種timewarp的作法是,在gpu繪製結束,掃描給顯示屏前,將這個圖像作一個圖像空間的位移,以校準咱們當前的位置,也就是說處於p0位置渲染的圖像,在p1位置繪製好給咱們,咱們須要將其校準成p1位置的樣子,這種校準有不少算法,都是在圖像處理上作的平移,這樣咱們會感受到看見的和咱們的位置是同步的。api
可是在傳統的渲染中,這些工做是在一個流水線上的,也就是同步的,當某一幀很耗時很卡時,用戶會遲遲收不到當前位置校準的圖片,一直停留在上一幀的圖片,由於gpu卡住了,後面的校準(timewarp)也不能進行,用戶會感受強烈的卡和眩暈。架構
這裏就提出了一個異步 timewarp的概念,即在gpu上有一個獨立的線程作這個warp,即無論你主線程渲染卡成什麼樣,我這個獨立的線程會按照幀率給你每一個位置的warp,給你最新的基於你位置的圖像,這能解決很卡很卡時咱們依然可以獲得模擬的圖像。可是傳統的gpu不支持這種獨立的線程。nvdia的vrworks加入了這個。他加入了一個high-priority context的概念,容許用戶啓動一個優先級最高的線程最warp,獨立於你的渲染線程。異步
傳統的渲染,pc的顯示器會把vr眼鏡做爲顯示器的一個顯示擴展,vr眼鏡和gpu是沒有直接交互的,而vrwroks裏能夠開啓vr headset的直接模式,讓gpui直接將圖像掃描到vr設備。async
在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