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