延遲是OculusVR所面對(duì)的最大挑戰(zhàn)之一薪夕,? 它不僅會(huì)分散玩家體驗(yàn)游戲時(shí)的注意力爪喘, 還會(huì)導(dǎo)致暈動(dòng)癥姥闭, 所以找出它背后的原因并消除它是非常重要的巧婶。
整個(gè)系統(tǒng)保持在50ms已經(jīng)很快了, 但是還是可以感覺到延遲
20ms是可接受的最大延遲
傳感器數(shù)據(jù)的推導(dǎo)預(yù)測(cè)可以緩解部分的系統(tǒng)延遲壕翩。但即使有一個(gè)非常復(fù)雜的人類頭部運(yùn)動(dòng)模型蛉迹, 也不能很好地處理開始運(yùn)動(dòng)和運(yùn)動(dòng)突變時(shí)的情況
濾波和傳輸是固定延遲, 但是離散的傳感器數(shù)據(jù)包也會(huì)帶來一個(gè)可變的延遲放妈, 因?yàn)殇秩镜膸逝c傳感器的幀率是不一致的
早期的LCD在運(yùn)動(dòng)時(shí)有拖影北救, 盡管現(xiàn)在的工藝已經(jīng)進(jìn)步了很多, LCD的像素從一個(gè)值轉(zhuǎn)變到另一個(gè)值大約仍要10ms, 專為3D游戲優(yōu)化過的可以降低到一半以下
OLED的像素切換時(shí)間在1ms以下大猛, 激光顯示甚至與CRT一樣快
有一個(gè)不易察覺的延遲扭倾, 多數(shù)顯示器顯示一幅圖像時(shí)是逐漸出現(xiàn)的, 就像從計(jì)算機(jī)中掃描出來一樣挽绩。 這就導(dǎo)致了60Hz刷新率的屏幕底部比頂部晚了16ms
這對(duì)于固定的顯示器不是什么問題膛壹, 但是對(duì)于頭戴式的顯示器,它會(huì)引起畫面左右割裂或者轉(zhuǎn)頭時(shí)的晃動(dòng)唉堪。 這是因?yàn)樵瓐D像是即時(shí)生成的模聋, 但不同部分卻不是同一時(shí)間顯示的。 這個(gè)現(xiàn)象在LCD頭戴顯示器上會(huì)因切換時(shí)間的問題被忽視唠亚, 但是在OLED頭戴顯示器上非常明顯
有一個(gè)非常有吸引力的立體渲染方向链方, 就是雙眼的畫面各由一個(gè)GPU渲染, 這樣可以帶來最好的性能和最小的延遲灶搜, 只是需要應(yīng)用程序管理好兩個(gè)獨(dú)立的渲染上下文
阻止GPU緩存的負(fù)面影響是會(huì)降低吞吐量祟蚀, 造成高負(fù)載時(shí)的幀率下降
多數(shù)的模擬并不直接依賴用戶的輸入工窍,可能在一幀的延遲中并不明顯。如果輸入數(shù)據(jù)是在使用到時(shí)再采樣前酿,就會(huì)比在幀開始時(shí)保存下來延遲要低
延遲幀調(diào)度(late frame scheduling)通常需要等待患雏,浪費(fèi)了一些性能。 如果你的幀率依賴video retrace而不是固定的時(shí)間片罢维, 那么從顯示驅(qū)動(dòng)中獲取當(dāng)前的掃描輸出位置會(huì)有幫助
另一個(gè)降低延遲的方法是允許渲染層基于最新的采樣數(shù)據(jù)修改游戲?qū)觽鬟^來的參數(shù)(VIEW BYPASS)淹仑。簡(jiǎn)單地說, 可以計(jì)算出本次用戶輸入與上次采樣的差值肺孵,用于修改游戲?qū)犹峤唤o渲染層的視圖矩陣
差值處理是最小程度的侵入匀借, 但也有一些情況是用戶輸入不能影響渲染的,如玩家死亡時(shí)的過場(chǎng)動(dòng)畫平窘∠爬撸或許VR游戲從設(shè)計(jì)上就應(yīng)該避免在頭戴顯示器中出現(xiàn)不能響應(yīng)的情況,但是依照傳統(tǒng)游戲的慣例這種設(shè)計(jì)還是有很多的
如果你十分了解渲染一幀所花的時(shí)間初婆,那么一些額外的延遲可以通過整個(gè)渲染任務(wù)的延遲幀調(diào)度來節(jié)省下來蓬坡,但這對(duì)于頻繁變化的幀渲染時(shí)間并不是一件容易的事。然而一個(gè)后期處理任務(wù)(TIME WARPING)可以降低意料之中的一些時(shí)間磅叛, 這樣就可以更加容易地進(jìn)行延遲調(diào)度
從你的角度盡可能使用最好的信息繪制了一幀后(已經(jīng)應(yīng)用了view bypass),不要急著直接顯示出來萨赁, 開發(fā)者還可以再次獲取最新的用戶輸入弊琴, 生成一個(gè)更新過的視圖矩陣, 把渲染的畫變換到更新過參數(shù)的位置上杖爽。 使用這個(gè)變換敲董, 顯示到屏幕上的畫面就反映了最新的輸入
view bypass和time wraping是互補(bǔ)的技術(shù), 它們既可以獨(dú)立使用也可以一起使用慰安。time warping可以變換一個(gè)源圖像的任意時(shí)間或位置到另一個(gè)腋寨, 一些視差和屏幕邊緣的瑕疵又可以通過view bypass來彌補(bǔ)
需要模擬狀態(tài)變更的動(dòng)作, 如切換開關(guān)或武器開火化焕, 仍然需要大約32-48ms的延遲通過整個(gè)管線萄窜, 顯示出對(duì)應(yīng)的畫面信息時(shí)的延遲并不會(huì)低于bypass優(yōu)化過的16-32ms。而最重要的頭部朝向反饋卻可以在60Hz的刷新率下延遲控制在2-18ms撒桨。結(jié)合低延遲的傳感器和顯示屏查刻, 甚至可以做到不可察覺。連續(xù)的time warping讓延遲低于3ms成為了可能凤类,為人機(jī)交互打開了一片未曾探索過的新天地
傳統(tǒng)的計(jì)算機(jī)交互并沒有VR的延遲要求這么高穗泵, 但是敏感的人卻可以說出20ms級(jí)別的鼠標(biāo)反應(yīng)差異, 所以這項(xiàng)技術(shù)對(duì)于非VR的應(yīng)用也是值得推廣的
一個(gè)有趣的應(yīng)用就是云游戲谜疤, 客戶端發(fā)送操作信息給遠(yuǎn)程服務(wù)器佃延, 并返回游戲的視頻流现诀。這為玩家提供了極大便利,但網(wǎng)絡(luò)和壓縮的延遲使得動(dòng)作向的游戲體驗(yàn)比較差履肃。view bypass和time warping都可以在服務(wù)器上應(yīng)用仔沿,能夠抵消相當(dāng)大一部分網(wǎng)絡(luò)延遲。再進(jìn)一步榆浓,time wraping如果可以在客戶端本地運(yùn)行于未,理論上可以降低到與本地應(yīng)用程序相同的水平,不過把time wraping限制在30或40ms比較好陡鹃,避免與源圖像的距離差異過大烘浦。