讓你頭暈的VR頭顯,背後發生了什麼?
【編者按】本文作者@台伯河,VR行業從業者。
隨着虛擬現實漸漸興起,國內現在做虛擬現實的廠商也增多了起來。但是我經常聽到有體驗者向我表示:他戴上國外大廠諸如Oculus、Sony和Valve的VR頭顯的時候,體驗十分出色,但是戴上國產的VR頭顯,不動的時候還好,一動起來就會讓人極度眩暈,這是為什麼?按照一般的看法,VR頭顯無非是戴在頭上的顯示器,暈動(Motion Sickness)到底是怎麼回事?
實際上人對於VR的眩暈很大程度上,與暈船暈車沒啥區別:人耳朵裏的前庭系統所感受到的運動狀態和視覺系統不一致,就會在大腦裏“打架”——人就會覺得暈乎乎的。總的來説,暈動症分為三種:
對於VR,情況可能要更加複雜一些。用户的全部視野都被VR頭顯所覆蓋,VR頭顯極力欺騙你已經到了另一個世界,此時視覺系統所感受到的東西就不僅僅是視野中的一塊屏幕上顯示的畫面,而是整個視野,在這種情況下,VR導致的暈動症就會有很多種因素。
第一個因素當然是你身體的運動和你的視野中所觀測到的運動不匹配。
比如説你在坐VR的過山車的時候,視覺上是在高速運動,但是前庭系統卻表示你並沒有在運動,這時就會導致頭暈。從邏輯上,這與打FPS遊戲造成的頭暈沒有什麼區別,每個人都會有不同的感受。
第二個很重要的原因,是頭部運動和視覺觀測到的頭部運動的不匹配。
這才是今天我們要説的重點,也是VR頭顯能夠從技術上加以改善的部分。其中這一點包括兩個部分:幀間延遲和幀內延遲。
幀間延遲很好理解。人類對於頭部轉動和相對應的視野的變化是極度敏感的。如果用户的頭轉動了,而相對的,視野轉動有延遲,只要很微小的延遲就能感覺得到。有多微小呢?研究表明,頭動和視野的延遲不能超過20ms,不然就會非常明顯。
不要小看20ms:實際上人頭部運動的速度很容易就能夠達到每秒上百度。假設頭部轉動速度為100度/秒(其實隨便轉頭就能達到這個速度),20ms的延遲意味着視野中物體的轉動延遲為2度,把手伸直,豎起大拇指,大拇指的寬度大概就是2度。
20ms的延遲時間對於VR頭顯而言是一個非常大的挑戰。首先設備需要足夠精確的辦法來測定頭部轉動的速度、角度和距離,這可以使用慣性陀螺儀(反應靈敏但是精度差)或者光學方法來實現。然後計算機需要及時渲染出畫面,顯示器也需要及時地顯示出畫面,這一切都需要在20ms以內完成。相應的,如果每一幀顯示的時間距離上一幀超過20ms,那麼人眼同樣也會感到延遲。所以,VR頭顯的畫面刷新率應該超過50FPS,目前來説60FPS是一個基準線。要在這麼短的時間內搞定這一切,本身就是巨大的挑戰。
那麼是不是單純把幀率提高到60FPS以上,拼死將延遲做到20ms以內就可以了呢?其實除了幀間延遲之外,VR所造成的眩暈還有更加複雜的成因。下面我用幾張示意圖演示。
我們可以看到,左邊這張圖是真實的世界中,一個物體從左往右移動時眼睛看到的情況:隨着時間的推移,物體的軌跡是一條線;而右邊的圖則是任何一種顯示器顯示出來的情況:物體的圖像在每一個點顯示一段時間之後,就跳到下一個點;它並非是連續的運動。
但是一旦當人的頭部運動,那麼人眼也會相對於顯示的物體有相對的運動,這時物體在人眼中的軌跡就變了一個樣子:
右圖中頭部往左轉時,原來靜止不動的物體的軌跡就變成了右圖這個樣子,不再是一個點,而是在每一幀結束之時跳回到它“應該”在的位置。然而人眼的視覺暫留現象則會保留上一幀和這一幀的圖像,於是圖像就會造成拖影,從而導致眩暈。
假如我們仍然假設60hz的刷新率,頭部轉動速度為120度/秒,那麼一幀內頭部轉動為2度,以DK2的分辨率,一幀內的延遲為19像素,這個時候頭顯顯示的圖像將會是相當模糊的。而分辨率越高,這個問題就越嚴重。以人眼理論極限分辨率來計算,一幀內延遲會達到600像素。
這個問題怎麼解決呢?想要讓物體的圖像更加連續的移動,最好也是最簡單粗暴的辦法是提高刷新率。
從60到90,到120,到200……可能最後到1000hz,那時我們的視覺系統就徹底分辨不出真實或者是虛擬了。 但顯然我們現在無法將刷新率提高到1000hz,目前Oculus Rift CV1和HTC Vive採用了90hz刷新率,而Sony Project Morpheus採用的是120hz刷新率。
另外一個辦法,就是降低餘暉(Persistence)。
餘暉(Persistence)是一個在CRT顯示器時期的概念。CRT顯示器是電子束激發屏幕上的熒光粉發光,所以實際上CRT顯示每一幀之內只有很短一段時間像素是發光的,其餘時間像素是暗的,示意圖如下:
可以看到液晶顯示器,每一幀內像素總是在發光,所以液晶顯示器就被稱之為“全餘暉”(Full Persistence)顯示。
中間這張圖只有一半時間像素髮光;而右邊這張圖是理想情況下只有非常短的時間內屏幕在發光,也就是“零餘暉”(Zero Persistence)。由於人眼的視覺暫留效應,刷新率足夠高就不會察覺到屏幕只有每一幀很短時間發光。但是為了彌補亮度的不足,每一幀內像素髮光的強度要大大提升。
低餘暉顯示對VR頭顯的意義在於,頭動時物體的軌跡更加接近於物理世界的真實軌跡:
這時頭部運動帶來的拖影會大大降低。假設假設同樣頭部轉動為120度/秒,頭顯刷新率60hz,一幀內屏幕發光2ms,以DK2分辨率和視角計,那麼在發光2ms之內頭部轉動人眼所觀察到的視覺延遲僅為2像素,眩暈感就隨之而去。
但是我們都知道LCD的基本顯示原理:通過讓液晶翻轉來選擇性透過光線。這意味着LCD很難使用低餘暉顯示。
(TN-LCD的基本顯示原理)
液晶翻轉的響應時間最快也有2-4ms,而背光原理也導致LCD不能做到全黑。相比之下傳統的CRT顯示器是天然的低餘暉顯示。
想要解決這個問題,VR頭顯必須使用主動發光的顯示屏,比方説OLED。由於其每個像素都是主動發光的,所以OLED屏幕可以做到低餘暉。
實際上,Oculus和Valve都使用了AMOLED的低餘暉顯示屏,Sony則使用了自家的OLED顯示屏。目前國產的VR頭顯大多采用傳統的LCD顯示屏,所以其造成眩暈是很自然的。
但是低餘暉也並不是什麼都好。它也會帶來副作用:由於每一幀圖像顯示的時間都很短,所以移動的物體顯示出的軌跡是斷續的,視覺系統會認為其為不同的物體,而在顯示屏全亮的情況下,視覺系統則有足夠的時間將其界定為同一個物體。從這個意義來説,這是一個trade-off:在解決暈動和拖影的同時,低餘暉顯示會導致頭動時物體閃爍和跳躍。
好了,説了這麼多,我想大家也都明白了:虛擬現實並不是在眼睛前面放兩塊顯示屏加一個陀螺儀就能搞定的。在此也希望國內的廠商能夠沉下心做好產品,把虛擬現實的基本體驗做好,我們才能夠像智能手機那樣從蘋果Google到小米華為。
資料來源:雷鋒網
作者/編輯:台伯河
隨着虛擬現實漸漸興起,國內現在做虛擬現實的廠商也增多了起來。但是我經常聽到有體驗者向我表示:他戴上國外大廠諸如Oculus、Sony和Valve的VR頭顯的時候,體驗十分出色,但是戴上國產的VR頭顯,不動的時候還好,一動起來就會讓人極度眩暈,這是為什麼?按照一般的看法,VR頭顯無非是戴在頭上的顯示器,暈動(Motion Sickness)到底是怎麼回事?
實際上人對於VR的眩暈很大程度上,與暈船暈車沒啥區別:人耳朵裏的前庭系統所感受到的運動狀態和視覺系統不一致,就會在大腦裏“打架”——人就會覺得暈乎乎的。總的來説,暈動症分為三種:
引用你看到動了,感覺沒有動:比方説打FPS遊戲就是這種情況;
你感覺動了,但是看到沒有動:比方説暈車暈船暈機就是這種情況;
感覺的運動情況與看到的運動情況不匹配:宇航員在做離心機訓練的時候就會遇到這種情況。
對於VR,情況可能要更加複雜一些。用户的全部視野都被VR頭顯所覆蓋,VR頭顯極力欺騙你已經到了另一個世界,此時視覺系統所感受到的東西就不僅僅是視野中的一塊屏幕上顯示的畫面,而是整個視野,在這種情況下,VR導致的暈動症就會有很多種因素。
第一個因素當然是你身體的運動和你的視野中所觀測到的運動不匹配。
比如説你在坐VR的過山車的時候,視覺上是在高速運動,但是前庭系統卻表示你並沒有在運動,這時就會導致頭暈。從邏輯上,這與打FPS遊戲造成的頭暈沒有什麼區別,每個人都會有不同的感受。
第二個很重要的原因,是頭部運動和視覺觀測到的頭部運動的不匹配。
這才是今天我們要説的重點,也是VR頭顯能夠從技術上加以改善的部分。其中這一點包括兩個部分:幀間延遲和幀內延遲。
幀間延遲很好理解。人類對於頭部轉動和相對應的視野的變化是極度敏感的。如果用户的頭轉動了,而相對的,視野轉動有延遲,只要很微小的延遲就能感覺得到。有多微小呢?研究表明,頭動和視野的延遲不能超過20ms,不然就會非常明顯。
不要小看20ms:實際上人頭部運動的速度很容易就能夠達到每秒上百度。假設頭部轉動速度為100度/秒(其實隨便轉頭就能達到這個速度),20ms的延遲意味着視野中物體的轉動延遲為2度,把手伸直,豎起大拇指,大拇指的寬度大概就是2度。
20ms的延遲時間對於VR頭顯而言是一個非常大的挑戰。首先設備需要足夠精確的辦法來測定頭部轉動的速度、角度和距離,這可以使用慣性陀螺儀(反應靈敏但是精度差)或者光學方法來實現。然後計算機需要及時渲染出畫面,顯示器也需要及時地顯示出畫面,這一切都需要在20ms以內完成。相應的,如果每一幀顯示的時間距離上一幀超過20ms,那麼人眼同樣也會感到延遲。所以,VR頭顯的畫面刷新率應該超過50FPS,目前來説60FPS是一個基準線。要在這麼短的時間內搞定這一切,本身就是巨大的挑戰。
那麼是不是單純把幀率提高到60FPS以上,拼死將延遲做到20ms以內就可以了呢?其實除了幀間延遲之外,VR所造成的眩暈還有更加複雜的成因。下面我用幾張示意圖演示。
我們可以看到,左邊這張圖是真實的世界中,一個物體從左往右移動時眼睛看到的情況:隨着時間的推移,物體的軌跡是一條線;而右邊的圖則是任何一種顯示器顯示出來的情況:物體的圖像在每一個點顯示一段時間之後,就跳到下一個點;它並非是連續的運動。
但是一旦當人的頭部運動,那麼人眼也會相對於顯示的物體有相對的運動,這時物體在人眼中的軌跡就變了一個樣子:
右圖中頭部往左轉時,原來靜止不動的物體的軌跡就變成了右圖這個樣子,不再是一個點,而是在每一幀結束之時跳回到它“應該”在的位置。然而人眼的視覺暫留現象則會保留上一幀和這一幀的圖像,於是圖像就會造成拖影,從而導致眩暈。
假如我們仍然假設60hz的刷新率,頭部轉動速度為120度/秒,那麼一幀內頭部轉動為2度,以DK2的分辨率,一幀內的延遲為19像素,這個時候頭顯顯示的圖像將會是相當模糊的。而分辨率越高,這個問題就越嚴重。以人眼理論極限分辨率來計算,一幀內延遲會達到600像素。
這個問題怎麼解決呢?想要讓物體的圖像更加連續的移動,最好也是最簡單粗暴的辦法是提高刷新率。
從60到90,到120,到200……可能最後到1000hz,那時我們的視覺系統就徹底分辨不出真實或者是虛擬了。 但顯然我們現在無法將刷新率提高到1000hz,目前Oculus Rift CV1和HTC Vive採用了90hz刷新率,而Sony Project Morpheus採用的是120hz刷新率。
另外一個辦法,就是降低餘暉(Persistence)。
餘暉(Persistence)是一個在CRT顯示器時期的概念。CRT顯示器是電子束激發屏幕上的熒光粉發光,所以實際上CRT顯示每一幀之內只有很短一段時間像素是發光的,其餘時間像素是暗的,示意圖如下:
可以看到液晶顯示器,每一幀內像素總是在發光,所以液晶顯示器就被稱之為“全餘暉”(Full Persistence)顯示。
中間這張圖只有一半時間像素髮光;而右邊這張圖是理想情況下只有非常短的時間內屏幕在發光,也就是“零餘暉”(Zero Persistence)。由於人眼的視覺暫留效應,刷新率足夠高就不會察覺到屏幕只有每一幀很短時間發光。但是為了彌補亮度的不足,每一幀內像素髮光的強度要大大提升。
低餘暉顯示對VR頭顯的意義在於,頭動時物體的軌跡更加接近於物理世界的真實軌跡:
這時頭部運動帶來的拖影會大大降低。假設假設同樣頭部轉動為120度/秒,頭顯刷新率60hz,一幀內屏幕發光2ms,以DK2分辨率和視角計,那麼在發光2ms之內頭部轉動人眼所觀察到的視覺延遲僅為2像素,眩暈感就隨之而去。
但是我們都知道LCD的基本顯示原理:通過讓液晶翻轉來選擇性透過光線。這意味着LCD很難使用低餘暉顯示。
(TN-LCD的基本顯示原理)
液晶翻轉的響應時間最快也有2-4ms,而背光原理也導致LCD不能做到全黑。相比之下傳統的CRT顯示器是天然的低餘暉顯示。
想要解決這個問題,VR頭顯必須使用主動發光的顯示屏,比方説OLED。由於其每個像素都是主動發光的,所以OLED屏幕可以做到低餘暉。
實際上,Oculus和Valve都使用了AMOLED的低餘暉顯示屏,Sony則使用了自家的OLED顯示屏。目前國產的VR頭顯大多采用傳統的LCD顯示屏,所以其造成眩暈是很自然的。
但是低餘暉也並不是什麼都好。它也會帶來副作用:由於每一幀圖像顯示的時間都很短,所以移動的物體顯示出的軌跡是斷續的,視覺系統會認為其為不同的物體,而在顯示屏全亮的情況下,視覺系統則有足夠的時間將其界定為同一個物體。從這個意義來説,這是一個trade-off:在解決暈動和拖影的同時,低餘暉顯示會導致頭動時物體閃爍和跳躍。
好了,説了這麼多,我想大家也都明白了:虛擬現實並不是在眼睛前面放兩塊顯示屏加一個陀螺儀就能搞定的。在此也希望國內的廠商能夠沉下心做好產品,把虛擬現實的基本體驗做好,我們才能夠像智能手機那樣從蘋果Google到小米華為。
資料來源:雷鋒網
作者/編輯:台伯河