在談?wù)揂R和VR系統(tǒng)時,預(yù)測性追蹤是指預(yù)測對象或身體部位的未來方向和/或位置的過程。 例如,人們可能想要預(yù)測頭部的方向或手的位置。
尤瓦爾·博格(Yuval Boger)是Sensics的執(zhí)行總監(jiān)兼OSVR的聯(lián)合創(chuàng)始人。尤瓦爾與他的團隊設(shè)計了OSVR的軟件平臺。他經(jīng)常都會在自己的博客上分享他的觀點和經(jīng)驗。下面是 來自尤瓦爾的分享。
1. 為什么預(yù)測性追蹤很有用
預(yù)測性追蹤的一個常見用途是減少“運動到光子”延遲,這意味著運動到運動之間的時間,以及運動呈現(xiàn)在顯示器上的時間。由于運動到運動之間存在部分延遲,當關(guān)于運動的信息最終投影在屏幕上時,將預(yù)測的未來方向和位置作為更新屏幕的數(shù)據(jù)可以有效縮短感知延遲。
雖然人們十分關(guān)注針對虛擬現(xiàn)實應(yīng)用程序的預(yù)測性追蹤,但這項功能對增強現(xiàn)實也是非常重要,尤其是因為存在用戶在現(xiàn)實世界的瞬時移動,以及需要與增強現(xiàn)實的數(shù)字覆蓋進行比較。比方說,你需要將數(shù)字影像疊加在物理對象中,這一數(shù)字疊加“鎖定”于物理對象將會變得尤為重要。攝像頭或許能識別對象,但攝像頭捕捉一幀需要時間,處理器確定對象位于一幀的位置需要時間,顯卡渲染數(shù)字疊加的新位置也需要時間。借助預(yù)測性追蹤,你可以減少數(shù)字疊加相對于真實世界的運動。
2. 預(yù)測性追蹤是如何工作的
如果你看到一輛汽車以恒定的速度行駛,并且想要預(yù)測一秒鐘后汽車的位置,那么你可能會做出相當準確的預(yù)測。你知道汽車的當前位置,你可能還知道(或估計)當前的速度,因此你可以推斷一定時間后的汽車位置。
當然,如果將你的預(yù)測與在一秒后的實際情況進行對比,你的預(yù)測不太可能每次是100%準確:在這段時間里,汽車可能改變方向或速度。預(yù)測時間的越短,預(yù)測就越準確:預(yù)測汽車在一秒鐘后的位置可能比預(yù)測在一分鐘后的位置更 。
你對汽車及其行為的了解越多,預(yù)測準確的機會就越大。例如,如果你不僅知道汽車速度,而且還知道加速度,你將可以進行更準確的預(yù)測。
如果你有關(guān)于追蹤對象行為的其他信息,這也可以提高預(yù)測精度。比如在進行頭部追蹤時,用戶頭部可能的旋轉(zhuǎn)速度和常用的旋轉(zhuǎn)速度可以改善追蹤模型。同樣,如果你正在進行眼動追蹤,你可以使用眼睛追蹤信息來預(yù)測頭部追蹤(在本文后面討論)。
3. 延遲的原因
之所以需要執(zhí)行預(yù)測性追蹤的原因在于,實際運動到運動之間存在一些延遲,以及將該運動的圖像呈現(xiàn)在顯示器上需要時間。延遲的來源包括很多,如:
· 感應(yīng)延遲:傳感器(例如陀螺儀)可能會因為帶寬限制而不會立即報告方向或位置變化。類似地,在攝像頭傳感器上的像素接收到來自追蹤對象的光和當該幀準備好發(fā)送到主處理器之間,基于攝像頭的傳感器可能會出現(xiàn)延遲。
· 處理延誤:傳感器數(shù)據(jù)通常會根據(jù)某種傳感器融合的算法組合在一起,而執(zhí)行該算法會在接收數(shù)據(jù)和算法輸出答案之間增加延遲。
· 數(shù)據(jù)平滑處理:傳感器數(shù)據(jù)有時存在噪聲點,為避免錯誤的抖動,需要執(zhí)行基于軟件或基于硬件的低通算法。
· 傳輸延遲:例如,如果使用USB連接的設(shè)備進行方向感知,主機處理器的數(shù)據(jù)收集和通過USB傳輸數(shù)據(jù)之間需要一段時間才能完成。
· 渲染延遲:對于渲染復(fù)雜的嘲,處理器需要一定時間才能決定將每個像素放置在一幀上的位置,以及該幀何時準備好發(fā)送到顯示器。
· 幀速率延遲:例如,如果顯示器的幀率為100Hz,那從一幀到下一幀的時間為10毫秒。
其中一些延遲非常小,但所有一切都會加起來,從而出現(xiàn)較大的延遲。預(yù)測性追蹤以及諸如時間扭曲的其他技術(shù)有助于減少延遲。
4. 預(yù)測時間的長短
答案是:視情況而定。你需要把預(yù)測系統(tǒng)端到端的延遲作為起點,然后根據(jù)喜好優(yōu)化時間。
你可能需要在任何給定的時間內(nèi)預(yù)測未來的幾個時間點。以下是部分原因:
部分對象具有不同的端到端延遲。例如,與頭部追蹤器相比,通過攝像頭追蹤手部可能會出現(xiàn)不同的延遲,但兩者都需要在同一嘲中同步繪制。
在使用單屏幕(例如智能手機屏幕)來為雙眼提供圖像的配置中,通常情況下一只眼睛的圖像相對于另一只眼睛會出現(xiàn)半幀延遲(例如1/60秒的一半) ,或約8毫秒)。
5. 預(yù)測性算法的共性
以下是部分預(yù)測性追蹤算法:
航位推測法:這是一個非常簡單的算法。如果在給定時間已知位置和速度(或角位置和角速度),預(yù)測位置會假設(shè)最后已知位置和速度正確,同時速度保持不變。例如,如果最后一個已知位置為100單位,最后一個已知速度為10單位/秒,則未來10毫秒的預(yù)測位置是100 + 10 x 0.01 = 100.1。雖然這是非常簡單的計算,但它假定最后的位置和速度是準確的(例如不受任何測量噪聲),速度是恒定的。然而,這兩個假設(shè)往往并不正確。
〃爾曼預(yù)測:這是基于流行的卡爾曼濾波器。卡爾曼濾波器是一種用于時變線性系統(tǒng)的遞歸濾波器。這種濾波器是將過去的測量估計誤差合并到新的測量誤差中來估計將來的誤差。
Alpha-beta-gamma預(yù)測:ABG預(yù)測與卡爾曼預(yù)測密切相關(guān),但不常見,而所需數(shù)學(xué)更簡單。ABG會不斷地估計速度和加速度,并將其用于預(yù)測。由于估算值會參考實際數(shù)據(jù),因此它們可以測量部分噪聲點。配置參數(shù)(alpha,beta和gamma)提供了強調(diào)響應(yīng)的能力,而非降噪。
預(yù)測性追蹤是一種有效的常用技術(shù),通常用于減少延遲。它提供了簡單或復(fù)雜的實施方法,同時需要一些思考和分析。但對今天VR和AR系統(tǒng)實現(xiàn)低延遲追蹤來說,預(yù)測性追蹤至關(guān)重要。
投稿郵箱:chuanbeiol@163.com 詳情請訪問川北在線:http://m.sanmuled.cn/