用ARM Mali GPU驅動實現移動VR
移動VR的性能要求
本文引用地址:http://www.104case.com/article/201706/360265.htmVR不是一個新話題,早在上世紀90年代就有提到,那時設備還比較貴,性能也不能滿足比較好或者是讓人可以接受的用戶體驗。在2014、2015年,VR重新熱起來,市場上可以看到Oculus Rift、SONY的PlayStation VR以及HTC的Vive等,這些設備的價格都超過500美元。
基于手機的VR也不斷出現,像三星的Gear VR設備。可以看到隨著手機處理器能力的增加,手機VR已經能夠提供較好的用戶體驗了,同時傳感器的技術也在不斷跟進,另外,這類設備對功耗也有嚴格要求,需要控制在5W以內。
ARM認為,移動產品形態是更容易被客戶接受的產品形態。VR包括AR(增強現實)都能很好地拉動高端手機市場的應用場景,這類應用對性能的要求非常高,而且性能不只是來自于GPU,也來自于CPU,包括AR可能還需要攝像頭的參與,所以VR/AR是全系統的運算方案。
如圖1,左側為VR游戲的例子,可以看到在高端的VR游戲運算的情況下,需要很強的GPU、CPU處理能力,以及很強的系統設計,所以對整個硬件的要求是非常高的;右邊是VR的360°視頻播放的應用場景,它除了對GPU有要求以外,對視頻編/解碼器也有較高的要求,需要高分辨率,配合VR設備得到一個沉浸式的體驗。
圖1 VR游戲與VR 360°視頻播放的比較
因此,VR需要幾個重點:
第一點就是立體顯示是如何實現的,通過我們左右眼的渲染,使左眼和右眼的圖像通過角度的細微差別去得到這樣一個立體的視覺效果(如圖2),這對處理器的性能要求會翻番。
圖2 左右眼的立體視覺效果需要CPU處理速度翻番
還有一點是對頭部動作的捕捉,這是通過一些傳感器可以實現的。從VR的處理流程可以看到我們需要渲染左右眼兩幅圖像,這兩幅圖像通過人眼的位置對幾何圖形做了投影,再通過光學透鏡看到在屏幕上顯示的左右眼的兩幅圖像,處理過程中需要兩倍的CPU處理,同時需要兩倍幾何頂點的處理能力,在最后顯示的像素處理這塊,它的性能要求也是在不斷提升的。
那么,如何得到一個好的VR體驗?第一點是延時。延時可能是從系統來的,也可能是從傳感器,到你的軟件運行,再到硬件的加速……整個延時你需要控制得非常小,才可以得到較好的體驗。我們現在的設備需要把延時控制在16ms,但是實際上在下一代我們看到的需求是在10ms以下。
還有一點是高的幀率,現在的設備可能是在60Hz范圍內,但是在未來的設備需要達到120Hz。
在分辨率這塊,高分辨率也是VR非常重要的需求。其實分辨率也是越高越好,目前我們看到的VR設備,1080p是一個門檻,大部分是在2K左右的分辨率,未來這個分辨率需要進一步的達到4K的量級。
所以延時的挑戰來自于VR全通道,可以從圖3看到從一開始的傳感器的數據處理,再到應用層面(注:可能是UI或者是VR的應用),再到API的驅動,再到你的渲染,到后面的緩存機制,包括雙緩存到三緩存,以及最后顯示到屏幕頂上。ARM現在要做的就是和GPU相關的,也就是圖2右側藍色框內的部分,以把這部分的延遲降到最低。
圖3 可能發生延遲的部分
用Mali實現VR/AR體驗
VR體驗
ARM很早就在參與VR產業了,ARM GPU是在2013年,也就是三星的Gear就已經作為硬件的加速單元做了這樣的產品。
第二點就是ARM基于VR技術也做了很多的貢獻,第一就是之前提到的ARM GPU的多核的可擴展的設計,能夠更好地支持不同的VR運算的要求。第二點是在OpenGL ES和OpenEGL這塊有很多的擴展,去減小延時。
第三是之前提到的4倍全屏抗鋸齒或者是全屏反走樣功能,可以更好地減少體驗上的不足。
第四點就是AFBC(ARM Frame Buffer Compression)的技術,該技術是在全系統減少系統帶寬,可以節省功耗,同時也能夠增加整體的性能表現。
ARM和Google在Daydream platform也有非常近的合作。
這里再強調ARM AFBC技術。UI的帶寬節省可以到50%。GFXBench的帶寬節省可以達到46%的量級。
VR在應用場景里面也是要求各種各樣IP的支持,在video這一塊,在VR這個場景底下也是有很多應用的方式,比如360°的VR場景的視頻應用。ARM video IP也是可以支持多種編碼以及解碼的功能的,可以支持2K到4K高清的內容的解碼。
AR體驗
回到AR的應用場景,其實AR的應用場景的計算要求和VR非常像,無論從性能上,還是從低延遲的要求來看,但是AR應用是需要非常強的各種處理模塊的互動的,包括CPU、GPU以及display的IP在里面的。ARM是通過異構運算(圖4),通過內存的一致性,能夠把所有的運算單元組合在一起,能夠提供一個最好的對AR加速的計算平臺。
圖4 通過異構運算實現AR
Mali VR的外部支持
第一個是multiview(多畫面)的渲染的能力。首先VR是需要左右眼兩個畫面做渲染的,可能需要兩個draw-call實現這樣的功能,通過multiview這樣一個擴展的支持,我們可以通過單個的draw-call實現這兩個應用場景的渲染,可以極大程度上降低CPU的應用負載。
第二個擴展是Context Priority(內容上下文優先)的擴展。它的功能主要是現在我們在VR處理的時候需要60幀、90幀甚至120幀這樣一個高的屏幕刷新率,在處理的時候,如果這個場景過于復雜,我沒有辦法滿足這樣一個刷新率的情況下,我可以通過對前一幀的后處理,去補足當前沒有處理到的這一幀,能夠得到更好的體驗效果。
ARM這個地方是我們的一個技術貢獻,它叫視網膜中央凹渲染。它可以用到前文提到的multiview(多畫面)渲染技術。如圖5,中間部分是人最關注的,我們人眼在看的時候最關注的是一個場景中間的,或者是你眼球中心這塊,視網膜也是分辨率最高的部分,因此我們可以把這部分渲染得更精細,但是它周圍的人眼不關注的地方,可以把它渲染得沒有那么精細,這樣可以把性能完全發揮出來,得到一個更好的VR性能表現,因為整體的負載相比你全渲染整幅圖而言,你是有一個節省的,這部分節省就可以體現在你的VR的性能上。
圖5 視網膜中央凹渲染示例
Mali VR SDK是免費的,之前ARM提到的很多技術,包括擴展及其實現,都可以從這個SDK里面找到,這樣可以使我們開發者很容易在開發者項應用的時候用到這樣一些新的技術。
另外,Enlighten(全局光照)技術對于VR的用戶體驗來講是一個非常重要的技術。Enlighten是一個非常好的能夠實現高效的全局光照的技術實現,前面提到我們VR在挑戰上是非常多的,比如刷新率低延時以及GPU這塊很重的負載,從光照這個角度來看,通過引入Enlighten,我們可以只計算一次,去渲染兩次,這樣可以很大程度上降低這樣一個負載。
評論