當前位置:
首頁 > 科技 > 深度對比分析VR頭顯Vive、Rift的解析度:渲染、失真與校正

深度對比分析VR頭顯Vive、Rift的解析度:渲染、失真與校正

文章相關引用及參考:doc-ok

本文來自美國加州大學戴維斯分校的研究類計算機科學家Oliver Kreylos

映維網 2018年05月10日)美國加州大學戴維斯分校的研究類計算機科學家Oliver Kreylos在今年年初詳細介紹了關於VR頭顯解析度的問題,但由於當時手上沒有Oculus Rift,他只是分析了HTC Vive。現在Kreylos已經拿到並分析Oculus Rift的頭顯顯示器解析度,同時撰寫了一篇與Vive進行對比的文章。以下是映維網的具體整體:

我在今年年初撰寫了一篇關於VR頭顯解析度的文章。遺憾的是,我當時只是分析了HTC Vive。與此同時,我手上拿到了Oculus Rift,這樣我就能夠從中獲取必須的原生數據。

延伸閱讀:深度分析VR頭顯解析度:渲染、失真與校正

有了這些新數據,現在是時候撰寫一篇後續文章了。為了更易於閱讀,我在本文使用一種新方法來重新創建了年初文章中的HTC Vive圖表,具體請參見下圖:

1. HTC Vive

前兩張圖表(1和2)是通過Vive右邊顯示器透鏡中心觀察到的水平橫截面和垂直橫截面顯示解析度,單位為像素/度。

圖1:水平線下的顯示解析度,單位是像素/度

圖2:垂直線下的顯示解析度,單位是像素/度

顯而易見的是,顯示器不同位置的解析度並非恆定,而且對於每種基色都有所不同。有關這些觀察的詳細解釋,請參閱年初發布的文章。另一方面,透鏡中心周圍有一個大片「平坦區域」,解析度幾乎不變。因此,我建議在透鏡正中心採用綠色通道解析度,以作為VR頭顯「真實」解析度的簡便度量。

需要注意的是,紅色和藍色通道的解析度是標稱(名義)解析度,即每度渲染的像素數量。由於Vive(和Rift)採用了PenTile亞像素布局,這兩個通道的有效子像素解析度低於sqrt(2)/2=0.7071,因為紅色和藍色通道使用了相對於綠色通道像素網格旋轉了45度的像素網格。

第二組圖(3和4)使用了默認渲染目標尺寸(1512×1680像素)來說明顯示像素與中間切線空間渲染目標上的像素的尺寸關係。小於1的因子表示顯示像素小於中間像素;而大於1的因子則表示顯示像素覆蓋多個中間像素。關於切線空間渲染和渲染後鏡頭畸變校正的解釋,請再次參閱年初發布的文章。

圖3:水平線下顯示渲染目標和中間渲染目標之間的採樣因子

圖4:垂直線下顯示渲染目標和中間渲染目標之間的採樣因子

這些採樣因子是設計VR渲染管道時的重要考慮因素。在顯示器的上下邊緣(見圖4),像4.0這樣的高因子意味著渲染器必須(在水平透鏡中心)繪製四個像素,或者在一個圖像角落渲染最多16個像素,從而生成單個顯示像素。這不僅浪費了大量的工作,而且還會在鏡頭校正步驟中引起混疊。紋理映射中使用的標準雙線性濾波器不能很好地處理高採樣因子,而諸如4:1這樣特別高各向異性的採樣因子需要轉向更複雜和更昂貴的高階濾波器。透鏡匹配著色(lens-matched shading)等渲染技巧是維持大多數標準3D渲染管道,同時不需要高採樣因子的一種方法。

有趣的是,在標準渲染目標尺寸下,透鏡中心周圍的採樣因子小於1.0,這意味著渲染目標的解析度比實際顯示解析度略低。這可能是為了創建更大的視場區域,其中顯示像素和中間像素的尺寸大致相同。

本節中的最後一張圖表(圖5)展示了鏡頭畸變校正網格,以及實際顯示渲染目標(左)和中間渲染目標(右)之間的空間關係。右邊的黑色矩形表示中間渲染目標的正切空間邊界,即頭顯視場的上限。

圖5:Vive鏡頭畸變矯正的可視化圖例。左邊:顯示空間中的畸變矯正網格;右邊:映射至中間渲染目標的畸變矯正網格。只顯示與渲染目標範圍(黑色矩形)相交的部分網格。

請注意,在Vive的情況下,不僅某些顯示像素無法顯示有效數據(即映射至黑色矩形之外的失真網格部分),而且中間圖像的所有部分都不參與顯示。渲染目標會超出顯示器的左邊緣,導致圖表出現了透鏡形狀(半圓狀)的「缺失區域」。

2. Oculus Rift

跟上文一樣,前兩張圖標(6和7)是通過Oculus Rift右邊顯示器透鏡中心觀察到的水平橫截面和垂直橫截面顯示解析度,單位為像素/度。

圖6:水平線下的顯示解析度,單位是像素/度

圖7:垂直線下的顯示解析度,單位是像素/度

跟上一節不同的是,每個主色通道只有一條解析度曲線,而不是說每個原色通道各一條曲線。這是因為Oculus將鏡頭畸變矯正方法視為商業秘密,而我是採用了某些技巧才獲得了一條曲線。遺憾的是,我不太確定這條曲線屬於哪個原色通道。根據我重建它的方式,它應該屬於綠色通道,但基於曲線的形狀,它看起來更像是紅色通道。請注意透鏡中心的「雙駝峰」。這與Vive的紅色通道曲線形狀相同,而Vive的綠色通道和藍色通道曲線都不存在這種「駝峰」。這將成為下面比較部分的一個要點。

圖8和圖9是默認渲染目標尺寸(Rift是1344×1600)的水平採樣因子和垂直採樣因子。

圖8:水平線下顯示渲染目標和中間渲染目標之間的採樣因子

圖9:垂直線下顯示渲染目標和中間渲染目標之間的採樣因子

最後一張圖表中(10)與之前在Rift渲染管道最後使用的鏡頭畸變校正步驟的可視化效果一樣。

圖10:Rift鏡頭畸變矯正的可視化圖例。左邊:顯示空間中的畸變矯正網格;右邊:映射至中間渲染目標的畸變矯正網格。只顯示與渲染目標範圍(黑色矩形)相交的部分網格。

3. 對比

根據這兩款頭顯的結果,HTC Vive和Oculus Rift之間最明顯的光學特性差異在於:Oculus用視場的減少換來了解析度的提高。Oculus Rift的「單一數字」解析度13.852像素/度明顯高於HTC Vive。假設我從Rift提取的單曲線屬於綠色通道,Rift的解析度將比Vive高出21.2%。如果曲線代表紅色通道(正如「雙峰駝」所示),Rift解析度仍然比Vive高出20.6%。

前面章節的圖表(1和6)展示了解析度在顯示器像素空間上的變化,但由於視場不同,比較效果並不是太好。在同一個圖表中繪製它們需要將水平軸的像素空間轉變成角度空間,如圖11所示:

圖11:水平顯示解析度對比

圖11還闡明了兩款頭顯之間像素採樣因子的明顯差異。根據圖3和圖4,Vive的渲染管道必須在整個顯示器上處理4.5的採樣因子動態範圍(從0.875到4.0),而Rift僅需要處理2.9的範圍。 這是Rift減少視場的第二個影響。Vive使用了更多的透鏡邊緣部分,而這裡的採樣因子出現了明顯的上升。通過緊靠透鏡中心,Rift避開了那些危險區域。

4. 解析度與視場

考慮到兩款頭顯的顯示器在像素數目上相同(單眼1080×1200),很明顯的是,有人為了獲得更高的解析度而減少了視場。然而,由於切線空間渲染和透鏡畸變校正的非線性關係,解析度和視場之間並不存在簡單的負相關關係。

幸運的是,如果知道中間渲染目標的切線空間投影參數和鏡頭畸變校正過程中使用的係數,我們可以計算出精確的視場並直接進行比較。第一種方法是比較圖5和圖10,兩者都是以相同的比例繪製。為了方便起見,我在這裡複製了圖5和圖10:

圖5:Vive鏡頭畸變矯正的可視化圖例。左邊:顯示空間中的畸變矯正網格;右邊:映射至中間渲染目標的畸變矯正網格。只顯示與渲染目標範圍(黑色矩形)相交的部分網格。

圖10:Rift鏡頭畸變矯正的可視化圖例。左邊:顯示空間中的畸變矯正網格;右邊:映射至中間渲染目標的畸變矯正網格。只顯示與渲染目標範圍(黑色矩形)相交的部分網格。

然而,比較這兩個圖表多少會令人產生誤解(所以我沒有將它們疊加在一起)。它們都是繪製在切線空間之中,而切線空間對於VR渲染管道非常重要,切線空間大小的差異與觀察到的視場差異不存在線性關係。

對於在2D圖標中繪製頭顯視場,沒有一種方法適用於所有的條件,但在這種情況下,我們可以將視場範圍轉換為極坐標,從而繪製出更好的比較結果。其中,顯示器上的每個點都繪製在正方向的測角,而顯示點到中心點的距離與該點與正方向的角度成正比。

圖12和13分別以極坐標顯示Vive和Rift的視場。在Vive的情況下,圖11沒有顯示中間渲染目標隱含的完整視場區域(減去「缺失區域」,參見圖5),因為Vive的渲染管道沒有調用至整個中間目標,而僅僅只是圍繞正方向的圓的內部。

圖12:極坐標中HTC Vive的組合視場(雙眼)。每個灰色圓圈表示距離正方向5度。

圖13:極坐標中Oculus Rift的組合視場(雙眼)。每個灰色圓圈表示距離正方向5度。

另外為了說明兩款頭顯之間不同的雙眼重疊數量,我同時展示了每款頭顯的雙眼視場組合。在圖12中,Vive的整體視場大致是圓形,在任一眼睛的內側都具有透鏡形狀的「缺失區域」。除了該區域之外,單眼視場的重疊非常優秀。

在圖13中,Rift的視場更像矩形,因為它使用中間渲染目標的整個矩形,而且在兩隻眼睛之間有明顯的位移,這是以雙眼重疊為代價來增加總的水平視場。另外值得注意的是,Rift視場在垂直方向並不對稱。為了更好地將較小的視場放置在用戶的整體視野之中,透鏡比屏幕下移了一點。

與切線空間不同的是,直接比較極坐標圖十分有意義,參見圖14:

圖14:極坐標下HTC Vive和Oculus Rift的視圖重疊圖。每個灰色圓圈表示距離正方向5度。

值得注意的是,Rift的完整雙目視場都完全包含在Vive的雙目重疊區域之內。

5. 提取Oculus Rift的鏡頭失真校正係數

正如我在開始時所提到的那樣,Oculus將Rift的鏡頭畸變校正方法視為商業秘密。與Vive不同,Vive通過OpenVR提供了計算顯示器上任意點的鏡頭校正切線空間位置的函數,而Oculus的VR運行時則在後台進行所有渲染後處理。

所以,我是如何產生圖6到圖10,以及圖13中的數據的呢?笨方法。我編寫了一個基於libOVR的VR應用,它會忽略3D和頭部追蹤等其他一切,只是在切線空間中直接將棋盤網格渲染至中間渲染目標。然後,我在libOVR鏡像窗口設計功能中使用了一種調試模式,在計算機主顯示器上顯示棋盤的桶形失真視圖,並在其中截取了屏幕截圖(參見圖15)。

圖15:libOVR鏡像窗口的屏幕截圖,其顯示了棋盤的桶形失真視圖。遺憾的是,圖片沒有任何關於色差校正的跡象。

令我感到意外的是,桶形失真視圖沒有任何關於色差校正的跡象。所以正如我想像中那樣,Rift顯示器上的影像不是1:1地對應(證據可見圖16,Rift的透鏡確實受色差的影響),但一些偽影可能是由不同鏡頭失真係數組而造成。即使在最好的情況下,這也意味著我無法為三個原色通道創建單獨的解析度曲線。

儘管是這樣,但我還是繼續朝這個方向前進,而且由於我得到的結果有意義,我認為這個調試輸出和真實顯示圖像之間至少存在一定的關係。接下來,我將屏幕截圖投影到鏡頭畸變校正實用程序中,後者提取了畸變網格的內角點,然後通過非線性優化程序運行角點。最後,這個優化程序輸出了這樣一組將輸入圖像映射至我在切線空間中製作的原始圖像的畸變校正係數,像素容差大約為0.5。藉助這些校正係數,再加上由libOVR給出的切線空間投影參數,我可以生成所需的圖表和圖形。

圖16:通過透鏡看到的顯示校正網格的Rift顯示器圖片。我們可以明顯看到因色差造成的顏色邊緣,這意味著Oculus的渲染管道確實可以進行校正,但這沒有反映在調試鏡像窗口模式之中。

另外,當我把Rift塞到了相機裝置時,我拍攝了一張很久之前所無法捕捉到的圖片:Oculus Rift的炫光測試。

圖17:Oculus Rift的炫光測試,我們可以看到Rift所採用的薄脊混合型菲涅爾透鏡造成了朦朧的炫光。

文章《深度對比分析VR頭顯Vive、Rift的解析度:渲染、失真與校正》首發於 映維網。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 映維VR 的精彩文章:

Oculus申請數據手套專利
《頭號玩家》綠洲烹制指南

TAG:映維VR |