相信對于玩過CS的人來說,Valve并不陌生,他于去年推出一個全新的SteamVR beta版來回應Oculus的“異步時間扭曲”技術。說到這,可能很多朋友對Oculus的ATW異步時間扭曲技術感到陌生,但如果你經常聽國內一些技術流的VR創(chuàng)業(yè)公司的演講,那么你對“異步時間扭曲”這個詞肯定不會陌生。例如自稱國內第一家掌握ATW技術的焰火工坊,在他們的第一次發(fā)布會上CTO王明楊就提到了這項技術。當時他嘗試了進行解釋,但后來放棄了,只說“你們知道這很牛逼就行了”。此后CEO婁池也在各種場合提起ATW,包括微信朋友圈。另外一家公司樂相也是。
焰火工坊CEO婁池和樂相CEO陳朝陽的朋友圈
ATW到底牛逼在哪?
異步時間扭曲英文是Asynchronous Timewarp,簡稱ATW。簡單來說,這是一種生成中間幀的技術。當游戲畫面無法保持足夠的幀率時,它能產生中間幀進行彌補,從而維持較高的畫面刷新率。這項技術的提出者John Carmack目前是Oculus的CTO。
在采訪中,王明楊解釋ATW,他是這樣說的:
正常情況下,我們的手機大部分是60hz刷新,也就是說,在理想情況下我們的手機大概要處理有60幀/秒。那么,從數(shù)據(jù)到渲染就有 1000 /60 ~= 16.6666ms的時延。
那么,如何抵消這個時延呢?卡馬克(John Carmack)提出一種方法,通過大量采集陀螺儀數(shù)據(jù),在樣本足夠多的情況下,就可以預測出16.66ms后你頭部應有的旋轉和位置,按照這個預測的數(shù)據(jù)來渲染,他管這個技術叫Timewarp。
然而問題又來了,一般VR場景很復雜,我們很難保證每次都在16.66ms內完成一次渲染,也就是我們很難保證每個應用都是60fps。那么卡神又提出一個ATW,就是異步的Timewarp。
他把VR應用的渲染管線設計成兩個線程,渲染線程(生產者)和Timewarp線程(消費者),兩者異步工作,生產者生產足夠多的Framebuffer,消費者把生產者生產的東西做Timewarp之后貼在屏幕上。也就是說,無論你當前游戲的fps是多少,Timewarp始終被設計成保持在60fps(視刷新率而定)。
這就是ATW的核心細節(jié),把Timewarp和產生Framebuffer分離,用高刷新率的Timewarp來換取低時延。
ATW技術在VR中應用的先驅是Oculus,早在兩年多以前他們就在Gear VR上應用了這項技術,直到去年3月25日宣布在PC端的SDK上加入ATW的支持。
具體怎么做?
圖片來源:Oculus博客(下同)
Oculus在博客里對ATW做了詳細的解釋。如上圖所示,GPU給左右眼的畫面分別進行渲染,然后在畫面顯示出來之前插入一個ATW的處理過程。在左邊這幀的處理中,畫面渲染及時完成,此時直接顯示就行了;中間的第二幀渲染未能及時完成,此時如果什么都不做就會出現(xiàn)畫面抖動,而有了ATW的話,它會將前面一幀調用出來重新顯示,同時加上頭盔運動變化,從而保持幀率。
這技術很難嗎?
據(jù)王明楊表示,ATW技術很簡單,核心代碼僅5行。但如果要達到最好的效果,還需要以下幾點:
1. GPU必須支持搶占式上下文(GPU preemption)。這個還好,大部分Mobile GPU都支持,但是桌面GPU大部分還不支持;
2. 系統(tǒng)最好支持主表面寫入,這個跟GPU有一定關系,但是跟操作系統(tǒng)關系比較大;
3. GPU必須有較高的性能,這個很好理解,Timewarp線程實際上加重了渲染負擔。
Oculus先在Gear VR上實現(xiàn)ATW,原因就是上面的第1點。他們將ATW帶到PC平臺上,是在微軟、英偉達和AMD支持的情況下實現(xiàn)的。英偉達開發(fā)了VRWorks,AMD則有Liquid VR。
國內廠商中,樂相陳朝陽表示ARM對大朋VR提供了Front Buffer和Context Priority的支持,用以在移動VR上實現(xiàn)ATW。
沒有定制硬件的焰火工坊則在Oculus的基礎上修改了一部分Timewarp的實現(xiàn)?!拔覀冊阡秩揪€程那里會監(jiān)控Timewarp線程的工作情況,動態(tài)的平衡GPU附載,保證Timewarp線程工作在比較高的幀率下。”王明楊說。
評論