Meta(Facebook)分享:什么是Application SpaceWarp
查看引用/信息源請點(diǎn)擊:映維網(wǎng)
正式可用
(映維網(wǎng)?2021年11月16日)Meta早前發(fā)布了Application SpaceWarp(AppSW)。這是是一種面向開發(fā)者的優(yōu)化技術(shù),可以為合適的內(nèi)容釋放額外的計(jì)算能力。在Meta的初始測試中,AppSW為應(yīng)用提供了高達(dá)70%的額外計(jì)算,而且?guī)缀鯖]有可感知的瑕疵。
延伸閱讀:Meta為Quest推出“應(yīng)用空間扭曲”渲染技術(shù),App性能提升70%
盡管早前已經(jīng)進(jìn)行過一番介紹,但為了進(jìn)一步幫助大家了解這項(xiàng)技術(shù),Meta日前通過一篇博文解釋了AppSW,并提供了相關(guān)的常見問題回答。下面是映維網(wǎng)的具體整理:

憑借AppSW提供的額外CPU/GPU性能,我們相信你可以將虛擬現(xiàn)實(shí)體驗(yàn)提升到一個(gè)全新的水平?,F(xiàn)在隨著V34操作系統(tǒng)和SDK的發(fā)布,所述功能已準(zhǔn)備好供你使用。我們非常期待看到你在自己的應(yīng)用中進(jìn)行測試,并向大家分享你的經(jīng)驗(yàn)。
1. 什么是AppSW?
Application SpaceWarp允許應(yīng)用以實(shí)際顯示刷新率的一半進(jìn)行渲染,例如72fps的一半36fps。除了標(biāo)準(zhǔn)的眼睛緩沖區(qū)外,應(yīng)用同時(shí)必須渲染運(yùn)動(dòng)矢量緩沖區(qū)和深度緩沖區(qū),然后我們的系統(tǒng)將使用所述緩沖區(qū)合成新幀,并向顯示器輸出72 FPS。

2. 它能提供多少幫助?
當(dāng)應(yīng)用可以以顯示速度的一半進(jìn)行渲染時(shí),它現(xiàn)在的計(jì)算預(yù)算幾乎是以前的兩倍。當(dāng)然,AppSW存在自己的開銷,運(yùn)動(dòng)矢量生成和幀合成都需要一定的時(shí)間。運(yùn)動(dòng)矢量生成增加了應(yīng)用進(jìn)程的GPU總成本,幀合成則增加了合成器的GPU總成本。
幸運(yùn)的是,瑕不掩瑜。在對第一方應(yīng)用的初始測試中,我們看到了計(jì)算預(yù)算增加了70%。

3. 它的工作原理?
要從舊幀合成新幀,我們需要知道每個(gè)給定像素的未來位置。一種方法是通過幀外推和幀重投影,借助于運(yùn)動(dòng)矢量數(shù)據(jù)和深度數(shù)據(jù)。運(yùn)動(dòng)矢量描述每個(gè)像素的移動(dòng)速度,所以我們可以使用它來預(yù)測像素的未來位置。深度緩沖區(qū)可以告訴像素到渲染camera的距離,從而用于執(zhí)行基于深度的重投影,以減少頭顯延遲。
生成運(yùn)動(dòng)矢量的方法有很多,但它們大多屬于兩大類:
通過分析歷史幀執(zhí)行運(yùn)動(dòng)估計(jì)
應(yīng)用分析性渲染
AppSW正在使用第二種方法。生成的數(shù)據(jù)更可靠(基本是ground truth),并且可以實(shí)現(xiàn)比第一種方法高得多的分辨率。實(shí)際上,實(shí)時(shí)渲染行業(yè)已經(jīng)廣泛采用這種技術(shù)。如果你熟悉運(yùn)動(dòng)模糊或時(shí)間消除混疊等標(biāo)準(zhǔn)圖形功能,其使用了與我們非常相似的方法來生成運(yùn)動(dòng)向量(或稱為速度緩沖區(qū))。所以,AppSW自然適合游戲引擎和3D渲染應(yīng)用。
有關(guān)如何在代碼中準(zhǔn)確生成運(yùn)動(dòng)向量的詳細(xì)信息,請參考我們的開發(fā)者指南(Unreal、Unity、Native)。下圖顯示了運(yùn)動(dòng)矢量和深度數(shù)據(jù)的實(shí)際情況。請注意,AppSW所需的運(yùn)動(dòng)矢量和深度數(shù)據(jù)的分辨率可能遠(yuǎn)低于彩色眼睛緩沖區(qū),而這是運(yùn)動(dòng)矢量生成開銷非常低的原因之一。

當(dāng)XR應(yīng)用以較低的幀速率渲染時(shí),延遲是舒適體驗(yàn)的最大挑戰(zhàn)之一,因?yàn)閹艿佬枰L的時(shí)間,并且姿態(tài)預(yù)測變得不準(zhǔn)確。為了減少使用AppSW時(shí)的延遲,我們使用了以下技術(shù)提供了完整的管道優(yōu)化:
Phase Sync:協(xié)調(diào)應(yīng)用框架,并根據(jù)應(yīng)用的工作負(fù)載使其在正確的時(shí)間啟動(dòng)。盡可能晚地執(zhí)行頭顯和控制器傳感器讀取,以減少頭顯和控制器延遲。
Late Latching:進(jìn)一步將傳感器讀取時(shí)間延遲到CPU渲染幀結(jié)束,從而節(jié)省一幀延遲。
Positional TimeWarp(PTW):Asynchronous TimeWarp(ATW)可以在顯示之前糾正頭顯旋轉(zhuǎn)錯(cuò)誤,這在每個(gè)Quest應(yīng)用中都有啟用。PTW可以使用深度緩沖區(qū)數(shù)據(jù)進(jìn)一步糾正頭顯轉(zhuǎn)換延遲,而這將由AppSW應(yīng)用自動(dòng)啟用。從純頭顯延遲的角度來看,我們甚至可以說AppSW應(yīng)用在使用PTW時(shí)比沒有AppSW的完整FPS應(yīng)用具有更少的延遲。
從時(shí)間軸的角度來看,下圖顯示了每項(xiàng)技術(shù)在框架管道上的位置。

總的來說,AppSW不僅僅是幀合成,它是一組結(jié)合在一起的技術(shù),并可提供最佳的半刷新率XR體驗(yàn)。
4. 限制和最佳實(shí)踐
AppSW是一個(gè)非常強(qiáng)大的工具。但我們想明確的是,AppSW并不是什么靈丹妙藥,可能不適合所有類型的應(yīng)用。最終,開發(fā)者自己有責(zé)任決定如何以及何時(shí)使用這個(gè)工具,并徹底測試,以確認(rèn)應(yīng)用中沒有圖形故障或質(zhì)量影響。
對于這個(gè)特定的主題,我們可以談?wù)摵芏啵热缤该鞫蠕秩?、運(yùn)動(dòng)矢量精度、控制器延遲或圖像失真。最重要的是理解技術(shù)的基本理論,這不僅可以幫助你識(shí)別AppSW的潛在問題用法,而且可以幫助你找出解決方案。我們鼓勵(lì)你參閱我們的開發(fā)者指南。
5. 完整開發(fā)包
V34操作系統(tǒng)和SDK版本提供了完整的AppSW開發(fā)包。以下是所包含的內(nèi)容:
Unity:Unity的AppSW支持托管在我們的github上。我們展示了一個(gè)關(guān)于如何將技術(shù)集成到應(yīng)用程序中的參考實(shí)現(xiàn)。具體請?jiān)L問這個(gè)頁面。
Unreal:我們在UE4.27-V34分支共享了一個(gè)復(fù)選框解決方案。具體請?jiān)L問這個(gè)頁面。
Native:我們的AppSW擴(kuò)展以官方OpenXR規(guī)范發(fā)布。為了在源代碼級(jí)別更好地理解它,我們在SDK包中包含了一個(gè)源代碼示例XrSpaceWarp。具體請?jiān)L問這個(gè)頁面。
工具:OVRMetrics Tool已更新至包含AppSW度量。
開發(fā)者教育:請參考我們的開發(fā)者指南(Unreal、Unity、Native)
討論和同行支持:請前往開發(fā)者論壇。
6. 結(jié)論
如果使用得當(dāng),Application SpaceWarp是一個(gè)強(qiáng)大的功能,可以為應(yīng)用提供顯著的額外計(jì)算能力。除了在文檔中提到的以外,你可能會(huì)遇到非常見的情況并對性能造成影響。你可以選擇通過調(diào)整內(nèi)容或?qū)ふ易约旱慕鉀Q辦法。關(guān)鍵是要理解這項(xiàng)技術(shù)和應(yīng)用的圖形管道。
為大家?guī)鞟ppSW只是旅程的開始。我們期待聽到你的問題、反饋和bug報(bào)告。
7. 常見問題
AppSW和Rift?ASW之間的區(qū)別是什么?
對于一直關(guān)注Oculus渲染功能的人而言,你可能相當(dāng)熟悉PC ASW。這是一個(gè)專為Oculus Rift應(yīng)用發(fā)布的功能。盡管存在相似之處,但我們想指出的是,PC ASW與Application Spacewarp是截然不同的技術(shù)。
PC ASW使用歷史幀分析生成的運(yùn)動(dòng)矢量,而AppSW使用應(yīng)用生成的運(yùn)動(dòng)矢量。由于應(yīng)用具有關(guān)于對象運(yùn)動(dòng)的所有信息,所以運(yùn)動(dòng)向量不依賴于要生成的任何估計(jì)/猜測。這將允許AppSW使用更高質(zhì)量的運(yùn)動(dòng)矢量,更接近“ground truth”運(yùn)動(dòng)矢量,從而提高整體視覺質(zhì)量。
在功能類型級(jí)別,PC ASW是一種系統(tǒng)功能,并在低規(guī)格機(jī)器自動(dòng)觸發(fā)。Application SpaceWarp則是完全由開發(fā)者驅(qū)動(dòng)的功能。開發(fā)者可以在開發(fā)/設(shè)計(jì)階段管理功能的激活。更重要的是,開發(fā)者可以完全控制每一個(gè)運(yùn)動(dòng)矢量/深度,這為開發(fā)者的創(chuàng)新留下了大量的空間。
即使在使用PC ASW時(shí),你的目標(biāo)是幫助大多數(shù)最終用戶以全幀速率運(yùn)行,而ASW只是一種在需要時(shí)啟動(dòng)的功能。
PC ASW提供給你的額外計(jì)算能力不會(huì)經(jīng)常能用到。AppSW可允許應(yīng)用始終以半速率運(yùn)行,而整個(gè)應(yīng)用都有可能獲得更高的計(jì)算預(yù)算。當(dāng)然,這同時(shí)意味著任何AppSW偽影都將更加嚴(yán)重,因?yàn)樗鼈儗?yīng)用于所有用戶,而不僅僅是一小部分用戶。
我一定會(huì)得到70%的額外計(jì)算嗎?
不一定總是這樣,但理論上非常接近。AppSW的效率將受到一系列變量的影響,如場景復(fù)雜度、圖形復(fù)雜度、目標(biāo)幀速率、顯示分辨率等。根據(jù)你的實(shí)際內(nèi)容,性能的確切提升程度將有所不同。我們的“70%”數(shù)據(jù)來自于對內(nèi)部UE4內(nèi)容的測試。我們認(rèn)為所述內(nèi)容可以當(dāng)成是一般內(nèi)容的代表,但你的內(nèi)容可能會(huì)得到不同的數(shù)字,大于或小于70%。
AppSW支持什么刷新率?
AppSW支持所有可用的刷新速率:Quest 1和Quest 2頭顯的72/90/120,相應(yīng)的半速率AppSW應(yīng)用渲染速率為36/45/60。確定目標(biāo)刷新率是開發(fā)者自己的選擇。
當(dāng)以更高的刷新率為目標(biāo)時(shí),總體延遲會(huì)更好,AppSW的偽影同樣更少。然而,由于AppSW的合成器開銷固定,平均AppSW開銷的百分比會(huì)更高。
例如,70%的額外計(jì)算數(shù)字是完整FPS 72 FPS應(yīng)用 vs 36/72 AppSW應(yīng)用的差異。
如果選擇更高的刷新率,則性能提升將更小。例如,45/90 AppSW的性能提升會(huì)小于36/72,而60/120則甚至更少。
AppSW是否強(qiáng)制啟用Late-Latching?
我們鼓勵(lì)開發(fā)者啟用Late-Latching以改善延遲,特別是控制器延遲。從Oculus github的UE4.23開始,UE4 Late-Latching就已經(jīng)可用。另外,Unity Late-Latching處于實(shí)驗(yàn)特性階段。為了避免增加Unity應(yīng)用中的集成過程復(fù)雜度,我們建議首先確保AppSW在你的應(yīng)用中正常工作,然后才啟用Late-Latching。如果你看到任何bug,請告知我們知道。
AppSW是否必須使用OpenXR?
是的,我們只支持OpenXR下的AppSW,因?yàn)槲覀兺耆铝τ谥С諳penXR API的發(fā)展。例如,在Unity應(yīng)用中,你依然可以使用Oculus XR插件,但要使用OpenXR后端。
AppSW是否需要Vulkan?
我們的UE4/Unity AppSW集成僅支持使用Vulkan+Multiview的應(yīng)用。
從技術(shù)上講,如果你是使用GLES的本地開發(fā)人員,AppSW依然可以正常工作,但支持Late-Latching需要Vulkan的內(nèi)存模型,所以我們通常建議在Vulkan下使用AppSW。
AppSW是否屬于“要么完整啟用,要么完全禁用”的功能?
不是。你可以隨時(shí)按每幀粒度啟用AppSW。例如,在GitHub附帶的簡單Unity測試應(yīng)用中,點(diǎn)擊“B”按鈕將在每幀打開/關(guān)閉AppSW。
所以,你不必為這個(gè)功能始終打開或關(guān)閉而感到壓力。當(dāng)然,在你的應(yīng)用程序中,有些場景你可以打開的,有些場景你可以關(guān)閉。
---
原文鏈接:https://news.nweon.com/91590