查看引用/信息源請點擊:映維網
只需兼容的USB數據線和PC即可解鎖PC VR內容
(映維網 2019年11月23日)只需兼容的USB數據線和PC,Oculus Link即可為Oculus Quest用戶解鎖PC VR內容,同時無需開發者付出任何額外的開發努力。
Oculus Link是PC和移動Runtime之間的獨特交集。對於如何整合VR運行,並通過USB數據線來提供高質量低延遲的VR體驗,Oculus日前撰文介紹了其中的挑戰和解決方案。下面是映維網的具體整理:
1. 構建一個混合架構
要在VR中實現儘可能低的延遲,你需要理解系統中將要發生的一切。如果管道中的延遲導致虛擬世界落後於玩家所感,結果就是糟糕的體驗。但如果可以預判延遲,VR Runtime就可以進行補償,從而減輕特定的偽影。
從作業系統的調度程序到顯示器的照明模式和人類感知機制,大多數VR優化的核心是理解系統各組成部分的工作。為了從流式傳輸中獲取最大性能,並利用PC和Oculus Quest Runtime中內置的優化功能,Oculus Link需要擁有一個完整的VR管道:從PC端的應用程式到Oculus Quest端的內容顯示。
1.1 Oculus Link管道解釋
在最上層,Oculus Link主要是利用Oculus PC Runtime和Oculus Quest客戶端應用程式之間的流式輸入與輸出。
PC端程序或Oculus Quest的合成器均無改動。不是為頭顯渲染後緩衝區,PC合成器將使用H.264視頻壓縮對眼睛紋理進行編碼,然後將圖像作為slice並通過USB發送到遠程客戶端。
Oculus Quest的遠程流客戶端負責解碼,糾正幀,並將幀提交給合成器,充當遠程PC應用程式的代理。客戶端同時會將包含當前頭顯位置,輸入狀態和VSync時序的更新發送至PC Runtime。這不包含預測,PC VR Runtime會外推所述值,以匹配目標顯示周期。
實際上,VR合成器的職責會分配給移動VR和PC VR Runtime,從而將普通的VR管道變成了混合架構。這種分配存在兩個優勢:
Oculus Link能夠在兩側利用VR Runtime,不會因通過USB傳輸輸入和輸出而產生質量減損,管道在提交結束時能夠實現糾正,這將減輕一定的傳輸延遲。
如果正確實現,現有的Rift和Rift S應用程式無需任何流式傳輸後端信息都能繼續運行。
1.2 預測精度的挑戰
VR Runtime的一項重要職責是精確預測管道的延遲,從而支持應用程式在目標顯示時段內渲染幀。另一個重要的職責是確保在錯誤的顯示期間內不要繪製幀。如果顯示的時間過早或太晚,虛擬世界就會晃動延遲。
從這個角度來看,混合管道不能即開即用:當兩個Runtime一起使用時,彼此都不會添加額外的管道階段。
Oculus的解決方案是採用一種全新的幀範例,其中PC和移動Runtime相互映射:從PC Runtime的角度來看,USB的流式傳輸延遲和Oculus Quest的未知路徑變成了更長的合成器階段;從移動Runtime的角度來看,從應用程式渲染到幀提交的未知路徑看起來像是一個動態應用程式。
1.3 幀定時概述:PC
預測的顯示時間是Oculus PC Runtime最小化應用程式延遲的重要方式。如果應用程式不能假定幀正在為特定的顯示周期進行準備,則它們將需要為提交應用程式幀之後的未知管道階段提前緩衝數幀。
與在Oculus Quest不同,PC VR應用程式不能假定固定的硬體配置:管道的運行時長將始終取決於PC中的CPU和GPU。所以,Runtime將根據四個管道階段的歷史平均值來創建預測:應用程式的幀循環(CPU和GPU)合成器時間,以及掃描到顯示。
對於Oculus Link,Rift PC管道估計不足。但是,可以將這一思想擴展為解決流式傳輸所添加的其他階段。當Oculus Quest顯示一幀時,流式傳輸客戶端將結束時間戳發送回PC Runtime;然後在VSync計算中,將流式傳輸管道端的時間戳替換為合成器端的時間戳;因為PC Runtime已經具備處理可變合成器時間的能力,所以它可以動態調整預測並匹配流式傳輸的端到端延遲,不必降低幀速率。
1.4 幀時序概述:Oculus Quest
一般來說,Oculus Quest應用程式接收一個姿態,渲染所述姿態,然後在目標顯示期間予以提交。Oculus Link的不同之處在於,預測幀來自遠程設備。如果一幀的預測顯示時間與實際顯示時間不一致,結果將是錯誤的預測。一幀或兩幀的錯誤預測通常不可見;但是,預測衝突會產生抖動。
為了解決這個問題,Oculus Link利用了PC Runtime的異步時間扭曲(Asynchronous Timewarp;ATW)和自適應合成器啟動(Adaptive Compositor Kickoff;ACK)。ATW保證總有一幀為即將到來的顯示期間準備;ACK則確保ATW有足夠的時間。
對於流式傳輸,ACK可確保為Oculus Quest的每個幀間隔準備好提交正確顯示周期的幀。當流式傳輸延遲添加到ACK對顯示管道的總預測中時,ATW能夠確保及時啟動幀,以便在即將到來的顯示期間對其進行解碼,糾正和呈現。
2. AADT可帶來更高的視覺質量
從PC到Oculus Quest傳輸高解析度圖像非常具有挑戰性,因為視頻編解碼器(編碼器和解碼器)的整體延遲直接與需要編碼的位數有關。你可能會選擇降低圖像解析度以減少等待時間,但這會損害視覺質量。通過利用頭顯的透鏡畸變,以及人類視覺系統的工作原理,我們可以實現更優的方案。
在顯示圖像之前,Oculus頭顯都會在渲染的最後階段應用畸變校正。這是為了抵消由透鏡引起的光學枕形畸變。結果是,桶形畸變會「壓縮」VR應用程式的像素,從而令其更接近於頭顯邊界。這意味著對於顯示器的每一半,邊緣的每度像素都比顯示器的中心低。
上圖是一個徑向桶形畸變示例。
最終像素密度與GPU應用的畸變曲率有關。對於給定的透鏡,應用這一校正對於VR體驗而言至關重要。但對於Oculus Link,由PC GPU生成的圖像不一定反映Oculus Quest透鏡所需的確切畸變曲率,因為與Oculus Rift不同,Oculus Quest內置GPU,可以進一步處理傳入圖像。所以,Oculus PC Runtime在傳輸之前存在優化圖像的空間。一種主要的優化來基於下面這個事實:透鏡令外圍區域略微模糊,從而降低了感知解析度。
這時,軸對準畸變傳輸(Axis-Aligned Distortion Transmission;AADT)就能派上用場。Oculus PC Runtime不會直接發送VR應用程式渲染的未畸變圖像,而是會使用軸對準畸變來應用一種固定注視點壓縮。儘管用於透鏡校正的徑向畸變會根據與圖像中心的距離而應用畸變函數,但AADT會分別將畸變函數應用於每個軸。換句話說,AADT利用了矩形圖像中的所有可用空間。Oculus Quest在收到AADT圖像後會令圖像恢復至原裝(即校正),然後再將其傳輸到Oculus Quest合成器。
藉助AADT,可以將一對以3616×2000解析度渲染的未畸變眼圖緩衝器壓縮至2016×1120,從而節省了將近70%的視頻編解碼器預算。AADT不僅可以節省編解碼器帶寬,同時可以通過確保編碼器和解碼器處理較小的圖像來節省延遲。儘管所述數字已針對Oculus推薦規格進行了調整,但為了提高視覺保真度,將來的版本可能會進行更新。
人體視覺系統特別擅長於識別外圍視場的閃爍。如果Oculus Link直接將未畸變圖像發送到Oculus Quest,則Oculus Quest GPU的稀疏採樣將導致外圍發生混淆。利用AADT,當Oculus PC合成器在準備要傳輸的圖像時,系統將能利用帶有Mipmap的各向異性濾波。這能夠消除欠採樣問題,並減少了Oculus Quest進行校正後的外圍偽影。
下面我們來看看AADT的實際應用。請留意第一個示例的上方網格。在應用AADT之後,未畸變的中心區域將被放大。在Oculus Quest進行校正後,外圍略微模糊,同時保留了中心區域的質量。
3. 總結
本文主要講解了如何支持Oculus Link實現低延遲,精確時序,以及高質量的視覺體驗。
提醒一下,你始終可以使用Oculus Performance HUD來監視PC VR應用程式的性能統計信息,包括應用程式和PC合成器延遲。啟用Oculus Link時,這個工具將為Oculus Quest開箱即用。
---
原文連結:https://yivian.com/news/69196.html