溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VR是TAA的終結(jié)者嗎?

發(fā)布時間:2020-06-30 23:23:08 來源:網(wǎng)絡(luò) 閱讀:635 作者:theGIbook 欄目:開發(fā)技術(shù)

在剛剛發(fā)布的Unreal Engine 4.14中,其第一個重要的特性就是增加了在VR開發(fā)中對Forward Shading的支持。我們都知道在很多方面Deferred Shading都優(yōu)于Forward Shading,它也是時下主流游戲引擎使用的渲染架構(gòu),而僅有在移動等設(shè)備中由于缺乏MRT的支持時才不得不選擇Forward Shading,那么為什么Unreal Engine 4會在VR開發(fā)中選擇使用Forward Shading?

VR是TAA的終結(jié)者嗎?

“The forward renderer supports both multi sample anti-aliasing (MSAA) and temporal anti-aliasing (TAA). In most cases TAA is preferable because it removes both geometric aliasing and specular aliasing. In VR, the constant sub-pixel movement introduced by head tracking introduces unwanted blurriness, making MSAA a better choice.”

這里指出了Deferred Shading的其中一個重要的缺點,那就是不支持MSAA。MSAA一般是由硬件支持的反走樣(anti-aliasing,AA)技術(shù),它在光柵化階段在一個像素區(qū)域內(nèi)對每個像素使用多個深度采樣值,但是每個像素內(nèi)的這些深度采樣值共享一個著色計算,即是每個像素仍然只執(zhí)行一次fragment shader的計算,然后計算的結(jié)果被復(fù)制到每個子深度采樣點上,這樣一個像素內(nèi)深度測試失敗的子采樣點將不會包含顏色信息,從而能夠更使最終的顏色過渡更平滑。MSAA與SSAA的不同就在于MSAA的每個像素只執(zhí)行一次著色計算,因此比SSAA具有較大的性能優(yōu)勢,但是也因此MSAA不能處理由于著色計算中對函數(shù)(如高光)采樣不足導(dǎo)致的走樣(如Shader Aliasing),但是由于人眼對于幾何邊緣的敏感度更高于對顏色的敏感度,因此MSAA是一種相當受偏愛的技術(shù)。

然而在Deferred Shading中,為了避免無數(shù)被深度測試剔除的像素的著色計算,它將著色計算從光照方程中分離出來,并將它延遲到深度測試之后使用單獨的通道進行計算,通過深度測試的那些像素的材質(zhì)參數(shù)被寫入到G-buffer中,這樣Deferred階段就可以使用G-buffer中的材質(zhì)數(shù)據(jù)僅對那些通過深度測試的像素進行計算,從而大大增加渲染性能,這也就是Deferred一詞的來歷。然而,MSAA被集成于光柵化階段,也即是生成G-buffer的階段,MSAA輸出的是比屏幕分辨率更高的輸出辨率,因此4xMSAA也就意味著4xG-buffer,這大大增加了顯存的性能開支,更重要的,由于Deferred階段讀取這些G-buffer數(shù)據(jù)帶來的帶寬占用和內(nèi)存讀取延遲。

所以,Deferred Shading更偏愛也是目前主流的反走樣技術(shù)是TAA,即時間反走樣(temporal anti-aliasing),TAA的思路就是每幀還是執(zhí)行一個正常的對每個像素執(zhí)行單次采樣和單次著色的計算,但是它在每一幀對攝像機的位置在屏幕區(qū)域內(nèi)執(zhí)行一個在一個像素尺寸內(nèi)的抖動操作,這樣如果將鄰近的多個幀的數(shù)據(jù)混合起來,就相當于對每個像素執(zhí)行了多次深度采樣,如下圖所示。TAA相當于SSAA的效果,它將多個采樣點從單幀內(nèi)的空間分布轉(zhuǎn)化到時間上,使得每一幀繪制并不會增加多次采樣導(dǎo)致的性能開支,又能達到像SSAA一樣的圖像品質(zhì),因此TAA是時下相當受偏愛的一種在Deferred Shading渲染架構(gòu)下的反走樣技術(shù)。

VR是TAA的終結(jié)者嗎?

然而TAA技術(shù)看似美好,其背后仍然存在很大的問題,這些問題從宏觀角度來講可以分為兩類:即模糊(blur)和重影(ghosting),從原理上講它們其實可以歸為一個問題,即ghosting消除到一定程度就是blur,然而由于TAA的天生特性,這種模糊基本上是無法絕對消除的。

為了混合在一個像素內(nèi)的多個子采樣點的結(jié)果,TAA需要對一個歷史緩沖進行采樣,將歷史顏色和當前幀計算的結(jié)果以一定的比例進行混合,當前幀顏色混合的比例越大,則越快逼近最終結(jié)構(gòu),但是品質(zhì)更差,反之逼近過程更慢,但是品質(zhì)更好。但是對歷史顏色的獲取不是一個例如從數(shù)組中獲取某個數(shù)據(jù)的問題,而是一個對紋理進行采樣的問題,因為我們不可能在下一幀得到一個和上一幀完全一模一樣的位置,所以只能使用紋理采樣技術(shù),而紋理的采樣涉及過濾(filtering)的過程,它是對采樣位置周圍一定范圍內(nèi)的像素的值進行加權(quán)混合的結(jié)果,所以每次混合計算每個像素融合了周圍比如4個像素的顏色結(jié)果,而這4個顏色值則混合了來自它們周圍4個顏色的混合結(jié)果,以此類推,隨著時間的推移,TAA中每個像素會包含周圍很大范圍內(nèi)的顏色的信息,造成了嚴重的模糊現(xiàn)象,如下圖所示。

VR是TAA的終結(jié)者嗎?

這種模糊效果可以通過增加當前幀顏色的混合比例來減少歷史顏色的比值而有所緩解,例如下圖所示,或者一些引擎使用銳化過濾器(sharpen filter)來提升鄰近像素的比重,但由于TAA歷史累計以及顏色過濾的特性,本質(zhì)上這種模糊是不可絕對消除的。

VR是TAA的終結(jié)者嗎?

在這個歷史混合過程中,如果每個像素上一幀和當前幀沒有發(fā)生太多變化,例如畫面完全是靜態(tài)的,則這種累計過濾結(jié)果僅會導(dǎo)致模糊現(xiàn)象。然而如果屏幕顏色發(fā)生了變化,例如物體移動,則當前幀和上一幀的顏色信息發(fā)生了完全的變化,如果我們不能夠區(qū)分一個像素內(nèi)多個子像素之間的這種絕對變化,而仍然將它們混合,則會產(chǎn)生嚴重的重影現(xiàn)象,即一些物體內(nèi)的顏色被混合近另一個物體內(nèi),如下圖所示。

VR是TAA的終結(jié)者嗎?

關(guān)于重影及模糊相關(guān)的問題及弱化方案,請參考《游戲引擎全局光照技術(shù)》第4章的內(nèi)容,本篇僅簡單討論TAA模糊的問題。這種模糊現(xiàn)象在VR開發(fā)中會顯得更加嚴重,因為VR頭盔頻繁的移動,以及VR相對普通屏幕對清晰度的更高要求都會進一步放大TAA的模糊問題,所以Unreal Engine 4在最新的版本中針對VR使用了Forward Shading。

那有沒有什么更好的方案用于在Deferred Shading架構(gòu)中替代TAA,這里筆者能夠想到的就是Nvidia最新的AGAA(Aggregate G-Buffer Anti-Aliasing)技術(shù),Nvidia已經(jīng)將AGAA技術(shù)實現(xiàn)在Unreal Engine 4(還沒有在UE4主分支)當中。與TAA的思路不一樣,AGAA并不累計歷史顏色,因此不存在TAA的歷史累計混合問題,AGAA使用MSAA的思路,在同一幀內(nèi)使用多個子采樣點,例如8x,由于這在Deferred Shading會導(dǎo)致8x的G-buffer,所以AGAA是利用pre filtering的思路將這8x的材質(zhì)參數(shù)pre filter成2x(或更多,但通常2個足夠)的G-buffer,因此稱作為Aggregate G-Buffer,這樣8x的深度采樣只輸出2x的G-buffer,這樣就減少了G-buffer的內(nèi)存占用以及導(dǎo)致的帶寬占用性能問題,如下圖所示。

VR是TAA的終結(jié)者嗎?

然而AGAA對硬件是有要求的,聚集幾何緩存數(shù)據(jù)生成階段的主要目的是將n個子采樣點的數(shù)據(jù)過濾到c個(c<n)聚集中,這需要用到目標無關(guān)光柵化(target independent rasterization)技術(shù),這是NVIDIA的NV_framebuffer_mixed_samples擴展提供的一個功能,它可以對深度測試使用更高的采樣率,而對輸出顏色目標使用更低的分辨率,在每個片元著色器僅輸出到c個顏色目標中的一個,這通過一個目標覆蓋的位掩碼設(shè)置:NV_sample_mask_override_coverage。

AGAA適用于Deferred Shading,同時沒有時間累積混合的問題,它可以產(chǎn)生媲美SSAA的品質(zhì),因此在當前TAA對VR極度不友好,F(xiàn)orward Shading又由于眾所周知的性能問題下,AGAA或許未來會有一定的舞臺。

然而AGAA也是有缺點的,它的主要問題是由于Pre filtering要求每個像素內(nèi)的材質(zhì)類型必須一致,否則pre filtering的結(jié)果必定是錯誤的,這在當前PBR主流的光照計算中,場景中大部分物體都可以使用統(tǒng)一的一套材質(zhì)參數(shù)表述,因此還是能夠適應(yīng)大部分場景,少部分特殊材質(zhì)類型可以使用單獨的渲染通道來解決。另外,Pre filtering還要求光照方程中能夠被Pre filter的參數(shù)必須是相互獨立的。這兩個問題是AGAA今后優(yōu)化發(fā)展的重點方向。

本篇僅就Unreal Engine 4引出的TAA的模糊問題的原因及問題展開相關(guān)的分析討論,關(guān)于本篇的全部詳細內(nèi)容都可以在《游戲引擎全局光照技術(shù)》試讀章節(jié)中找到。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI