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),如圖


我們需要得到的是右邊的圖,但是渲染出來的都是左圖,所以一般都是在最後將左圖在圖像上做處理,變成右圖,這樣我們可以看到其實左圖在邊緣處很多像素在捲曲後被浪費了,於是人們就像我們是不是可以對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位置的樣子,這種校準有很多算法,都是在圖像處理上做的平移,這樣我們會感覺到看見的和我們的位置是同步的。


但是在傳統的渲染中,這些工作是在一個流水線上的,也就是同步的,當某一幀很耗時很卡時,用戶會遲遲收不到當前位置校準的圖片,一直停留在上一幀的圖片,因爲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設備。


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 +。


nvidia的開發者頁面、

https://developer.nvidia.com/vrworks






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章