延遲是AR VR體驗的基礎

2021-07-16 13:40:39 字數 4793 閱讀 5450

原文:

譯者注: 原文發表於2023年, 雖然當時的一些硬體條件限制現在已經沒有了, 但我們可以從中學習到ar/vr的延遲解決思路. 另外, 譯文略過了顯示器的發展史

如果沒有足夠低的延遲, 根本不可能帶來好的體驗, 也就說大腦不會把眼睛看到的虛擬畫面當成真實的. 所謂的」真實」, 不是指你能不能用眼睛分辨出它們是否為虛擬的, 而是說你能不能在移動頭, 眼睛或身體時, 感覺出它們與真實物體不一樣. 這其中的關鍵是虛擬的物體在你移動時, 必須一直保持在正確的位置上.

如果從你轉頭開始到畫面繪製在新的位置上花了太長的時間, 那畫面就會偏移了很遠, 造成vr中的抖動或者拖影.

那多少延遲才算多呢? 比你想像的要少得多. 參考一下, 遊戲時從滑鼠移動到螢幕游標更新通常有50ms甚至更多的延遲. 個人經驗, 大於20ms對於vr來說是不可接受的, 有研究表明15ms(甚至是7ms)是乙個臨界值.

ar/vr對延遲的要求比傳統遊戲高得多, 是因為它們要求在你移動時保持真實世界的穩定性. 而傳統遊戲對於你來說, 大腦認為你是在看一幅影象. 當你移動時延遲會造成畫面出現偏移, 而不是在它原本應該在的位置

假設你以60度/秒的速度轉頭(雖然這聽起來很快, 但實際上比較慢, 因為人可以每秒轉頭超過100度), 延遲是50ms, 解析度是1k x 1k. 當你轉頭時, 虛擬畫面是基於50ms前的資料顯示的, 也就是說它們的位置已經落後了3度, 這比你伸直手臂後看到的拇指寬度都要大. 換一種說法, 物體的位置已經差了30個畫素, 也就是說看起來是非常明顯的.

當然可以通過**把繪製位置畫到正確的地方, 這在大多數情況下是表現良好的. 不過, 當突然出現方向的改變時, 這個差異甚至比沒有**時更大. 所以, 這種做法同樣會讓人感覺到非常大的差異, 因為轉向是常見的一種情況.

另外, 延遲看起來是直接與暈動症相關的, 延遲越大, 症狀就越明顯.

所以, 我們需要把延遲降低到20ms, 可能的話越少越好. 就算是20ms在現有的硬體條件下也是很難達成的, 至於7ms, 目前根本不可能. 讓我們來看一下為什麼.

下面這些就是畫一次ar/vr影象所經過的步驟:

追蹤頭戴顯示器的姿態, 也就是現實世界中的位置和朝向.

應用程式基於取得的姿態資料繪製立體的場景畫面.

圖形硬體需要把繪製的場景畫面傳輸到頭戴顯示器的螢幕上. 這一步叫做掃瞄輸出, 需要順序地從上到下, 從左到右地讀取幀快取, 並把畫素資料通過連線線(如hdmi)傳輸到螢幕上.

基於收到的畫素資料, 螢幕的每個畫素才會開始發射光子.

在某個時刻, 螢幕需要為每個畫素停止發射特定的光子, 這是因為畫素並不是持續點亮的, 或者因為下一幀需要顯示新的顏色.

在3d管線中還存在一些額外的幀快取, 這裡先忽略掉, 因為這不是產生一幀ar/vr畫面的組成部分.

我們依次來看一下這三部分:

追蹤延遲與採用的系統硬體高度相關. 乙個imu(3軸陀螺儀和3軸加速計)的延遲非常低, 差不多是1ms, 但是有偏差. 特別是位置資料是**於加速計的兩次積分, 偏差更大. 基於攝像頭的追蹤不會有偏差, 但是它的延遲更高, 因為要捕捉影象, 傳輸到計算機, 並進行影象處理來計算姿態, 很容易就花費了10-15ms. 當前有一種沒有偏差的的低延遲系統硬體, 來自於ndi, 可以做到4ms的延遲, 就是我們用來做延遲追蹤的.

渲染延遲取決於cpu和gpu的能力, 還有所要繪製場景的圖形複雜度. 大多數遊戲並不會一直保持60fps, 所以它們的渲染延遲都會大於16ms, 這對於ar/vr來說已經太高了. 老一點的遊戲可以執行的更快, 甚至可以達到幾百fps, 但是相對的它們的畫面比較樸素. 所以, 這裡我們假設渲染延遲是16ms.

渲染的畫面一旦生成, 就需要傳輸到螢幕. 特定畫素的延遲通過取決於使用的顯示技術, 而且與畫面相關. 但是對於最常見的掃瞄輸出技術來說, 最壞的情況是從幀緩衝繪製完畢到更新到螢幕上會花掉一整幀的時間. 如果是60fps, 那最壞的情況就是16ms. 例如, 假設一幀畫面正好在掃瞄輸出開始掃瞄最上面那行時繪製好, 那麼最上面那一行幾乎就沒有延遲, 但最下面那一行輸出到螢幕上差不多就有16ms的延遲(理論上不會有那麼多, 每兩幀之前是有空白時間的). 也就是說, 渲染完的畫面資料更新到螢幕上大約有16ms的延遲.

有時畫素資料可以在到達時立即顯示出來, 就是使用雷射和oled的螢幕. 有時會被快取起來再顯示, 就像順序制彩色lcos, 紅色是同時點亮的, 接下來 是綠色, 然後就是藍色. 有時畫素資料會立即應用, 但是距離可見的改變會一點延遲, 如lcd面板會花費幾ms切換狀態. 還有一些電視機甚至會快取多幀的畫面用於影象處理. 接下來的討論我會基於最優的情況, 也就是說我們使用的螢幕會在資料到達時立即把畫素轉化成光子.

一旦光子發射出去了, 幾乎不需要什麼時間就可以到達你的眼睛. 但是還有乙個地方存在延遲, 那就是畫素產生的光子停止到達你眼睛的時間. 這看起來好像沒什麼影響, 但當你戴著顯示器時是影響非常大的. 因為乙個畫素狀態持續的時間越長, 那它就距離正確的位置越遠, 也就是殘影越嚴重. 從延遲的角度來看, 像射線掃瞄那樣亮一下就滅, 遠比oled或lcd那樣一整幀的時間都亮著要好得多. 很多oled和lcd顯示器的殘影現象比crt要高, 這個

問題比較複雜, 這裡就不展開討論了, 我們暫且假設這部分的延遲是零. 不過需要明確的是, 如果持續時間不為零, 那麼對於60幀來說, 最壞的情況是額外多了16ms的延遲.

所以現的總延遲是4+16+16=36ms, 離20ms還差很多, 更不用說7ms了.

所以, 要想達到理想的延遲, 有一些規則必須做出改變.

在追蹤階段, 比較直觀的方式是通過感測器融合光學追蹤和imu. imu可以提供低延遲的狀態, 而光學追蹤可以用於修正imu的偏差. 做好這個是十分具有挑戰性的, 而且市面上也沒有現成的可用方案, 所以只能對硬體規則做出一些改變. 合理實現的話, 感測器融合可以降低追蹤延遲1ms左右.

對於渲染來說, 除了簡化場景外幾乎沒有什麼可以做的. 對於pc來說, 只有5年前的遊戲畫面才能滿足3-5ms的渲染延遲. 當然, 如果你想做可以到處走動的ar, 那需要在移動處理器上實現非常低的延遲, 或許只能做到2023年左右的遊戲畫質. 這就是為什麼我認為ar還有一段很長的路要走.

好了, 經過兩個階段, 我們降低了4-6ms, 很不錯! 但現在我們需要把渲染的畫素顯示到螢幕上, 這是需要改變硬體規則的地方, 因為60幀率的顯示器需要大約16ms把資料掃瞄到螢幕上, 這就成了我們降低延遲到20ms以下幾乎不可逾越的障礙.

我之所以說」幾乎」, 是因為這在理論上是有可能實現的, 就是」與光束比賽」(只是打個比方, 對於crt來說才有電子光束): 每條或每塊掃瞄線的渲染正好在讀取它們之前進行. 這個方案(對於快取整幀或順序制lcos是不起作用的)可以把延遲降低足夠多, 前提是保證每條或每塊掃瞄線在這些畫素掃瞄輸出之前渲染完成, 通常大約幾毫秒. 通過」與光束比賽」, 是有可能把總體的延遲降低到夢幻般的7ms.

很不幸, 與光束比賽需要一種非正規的底層渲染方式, 因為每條或每塊掃瞄線是分開渲染的, 並且在遊戲的時間線並不是在同乙個點. 每塊必須準確地在掃瞄輸出時渲染, 否則與光束比賽就沒有任何意義了. 這意味著你並不是每16.6ms渲染一次, 而是每次只渲染一小塊. 假設螢幕被分割成16塊, 那樣的話每1毫秒就需要渲染一塊. 既然還是有那麼多畫素要渲染, 那整個場景的資料結構同樣也需要分塊傳輸到指定區域. 這花費的時間應該比正常的幀渲染要高一點, 也就是說場景複雜度需要降低, 保證可以在3-5ms內畫完. 想還原現代的3d遊戲和真實度, 變得異常困難.

與光束賽跑還有乙個問題, 那就是需要避免區塊之間在視覺上出現邊界. 這可能是無法接受的, 因為就算是一些細線, 也會使人分散注意力. 為了解決這個問題, 需要扭曲一些線段來接合. 顯然, 這些線段的數量越多, 產生的瑕疵越少, 當然效能開銷就越大. 如果取得平衡, 與光束家賽跑就變得可行了, 但是它會增加複雜度和效能開銷, 對於降低顯示延遲來說, 這並不是乙個明智的的方案, 或許從根本上我就是錯誤的.

或許更簡單的可行方案是把顯示重新整理率提高到120hz, 這可以立即把顯示延遲降低到8ms左右, 總體的延遲達到12-14ms. 既然我們可以渲染到200-333 fps, 渲染是沒有問題的, 那240hz會更好, 總體的延遲會降低到8-10ms.

高幀率還可以提公升顯示質量, 像我之前說的, 可以降低暈動症. 現在只有乙個問題: 適用於頭戴顯示器的高重新整理率顯示屏多半還不存在.

舉個例子, 現在的oculus rift原型機使用了lcd的手機螢幕做顯示器. 這是可以理解的, 因為手機螢幕的產量巨大, 所以它們非常便宜並且廣泛使用. 但是手機螢幕並沒有理由執行在120hz, 因為這對使用者來說沒有益處, 也就沒有人會生產120hz的手機螢幕面板. 理論上這當然可以做到, oled也是, 但除非vr市場足夠大驅動廠商進行面板設計, 或者**進行定製, 否則市面上是不會出現的.

還有乙個相關的潛在方案: 在不提高幀率的前提下, 提公升掃瞄輸出的速度(也就是畫素資料轉化為光子的速度). 例如, 如果圖形晶元可以在8ms內掃瞄輸出一幀快取, 而幀率仍然是60hz, 那麼掃瞄輸出可以在半幀的時間內完成, 剩下的8ms就不會有資料了. 如果顯示屏可以在資料到達時立即轉化為光子, 那總體的延遲就可以降低8ms, 就算實際的幀率還是60hz. 當然, 更高的掃瞄輸出速度可以獲得更好的效果. 這個途徑不會像提高幀率帶來的顯示質量的提公升, 但它既不會提公升渲染的負擔, 也不會降低渲染的質量. 跟高幀率一樣, 這個方法只對ar/vr有意義, 所以需要顯示屏技術的革命才會使它變成現實.

除了與光束比賽之外, 在現有的硬體條件下是沒有方法達到足夠低的顯示延遲的, 這需要足夠高的解析度, 足夠低的**, 合適的影象大小, 小巧的體積和足夠輕的質量, 還有適合消費級別ar/vr的畫素質量. (你還會面臨vr的寬視角和ar的透視挑戰.) 有乙個人需要站出來改變硬體規則, 這樣顯示延遲才可以下降. 雖然不容易, 但遲早會出現的, 問題是何時, 何人. 我希望vr市場會隨著rift的發布而起飛, 那顯示延遲降低的日子也就不遠了.

如果你一直以為ar/vr只是簡單地在眼鏡內顯示一幅影象的話, 我希望這篇文章可以讓你明白呈現真實的虛擬影象有多麼複雜, 我們目前還處於蜻蜓點水的階段.

**:虛擬實境的發展史;虛擬實境發展史

技術是基礎,使用者體驗是靈魂

微軟一直以來以大型客戶端軟體office獲取豐厚利潤,但是saas的興起促使軟體巨人做出 s s 的對策。但網際網路的專案開發與傳統軟體開發處於兩種不同的模式,最明顯的特點就是在於開發周期,從以前需要十幾個月的專案,演變到1個月就要進行發布。從全程參與開發office2003到現在進入雅虎開發競價系...

筆記 演算法基礎 延遲決策的貪心問題

這一類的問題的共同特點是收到了乙個名額之後不急著把名額用出去,先保留著名額,當後面遍歷到不可抗力因素時把再把最差的若干個名額丟棄。注意有時候同乙個名額可能多次收到,有可能以最後一次收到時為準 當然也可以多次出入隊,不過這樣要在出隊時判斷是否是一次有效的出隊 還有ccpc的摸魚大師那題啥時候去補一下。...

海外APP Bigo Live是體驗生活的新方式

在全球擁有超過3億使用者。向fomo拒絕,分享您的生活,贏得粉絲,收到禮物,結交朋友,並活在當下。為什麼bigo live?上線 唱?舞蹈?有隱藏的才能嗎?炫耀自己的才能。得到追隨者,獲得粉絲,獲得禮物,結交朋友並成為許多人的偶像。直播 有乙個活躍的社群,以及數百萬才華橫溢的廣播員,舞蹈演員,歌手,...