Anti-Aliasing SSAA MSAA MLAA SRAA 简介
http://blog.csdn.net/codeboycjy/article/details/6312758
?
?
前兩天在瀏覽游民星空的時(shí)候,小編居然在文章中掛了一篇技術(shù)文章,是關(guān)于SRAA的。對(duì)于AA的了解很少,正好入職之前還有幾天的空閑時(shí)間,所以就這個(gè)機(jī)會(huì)把AA的一些基本算法簡(jiǎn)單學(xué)習(xí)了一下,不過(guò)也只是學(xué)習(xí)到了一點(diǎn)皮毛而已。
本文將簡(jiǎn)單介紹四種反走樣算法,他們分別是:
SSAA: Super Sampling Anti-Aliasing
MSAA: Multi Sampling Anti-Aliasing
MLAA: Morphological Anti-Aliasing
SRAA: Sub-pixel Reconstruction Anti-Aliasing
當(dāng)然,AA算法的種類實(shí)在是很多,還有CSAA,ADAA,Transparent AA等等。本文就簡(jiǎn)單介紹上面四種吧。
首先,什么是走樣呢?我們?cè)诂F(xiàn)實(shí)生活中觀察到的物體經(jīng)常是細(xì)節(jié)非常豐富的,而大部分信息的頻率遠(yuǎn)遠(yuǎn)高于人眼的識(shí)別能力。而計(jì)算機(jī)中的圖像是由一個(gè)一個(gè)離散的pixel組成的,其實(shí)是個(gè)有限的集合。所以它只能用來(lái)逼近現(xiàn)實(shí)中的場(chǎng)景,并不能完美的重現(xiàn)。走樣有很多表現(xiàn)形式,例如邊緣的鋸齒,采樣頻率過(guò)低等。本文的AA算法都是針對(duì)鋸齒邊緣的。一般而言,紋理的采樣頻率過(guò)低都是通過(guò)AF或者更復(fù)雜的采樣算法來(lái)解決的。
?
舉個(gè)簡(jiǎn)單的例子,我們放大一條直線所經(jīng)過(guò)的兩個(gè)pixel。由于對(duì)于每個(gè)像素,我們只在像素的中心采樣,所以對(duì)于上圖而言,上面的像素中的采樣點(diǎn)是在直線上面的,而下面采樣點(diǎn)則在直線的下面。假設(shè)我們要把直線下面的圖像填充成黑色,如果沒(méi)有AA,那么下面的像素就會(huì)是純黑色,而上面是純白色。而這種情況會(huì)產(chǎn)生三角形邊緣的鋸齒現(xiàn)象,我們稱之為走樣。下圖為經(jīng)過(guò)MLAA處理前后的圖像變化。
當(dāng)然,如果屏幕分辨率的細(xì)致程度已經(jīng)超過(guò)了人眼的識(shí)別能力的話,例如iphone4的retina屏幕,那么由于幾何體邊緣帶來(lái)的走樣現(xiàn)象也會(huì)基本沒(méi)什么影響了。不過(guò)大部分的顯示器還是能用肉眼觀察到鋸齒的。
首先我們了解下SSAA的算法吧。幾何體的邊緣在理論上來(lái)說(shuō)是無(wú)限細(xì)致的,因?yàn)槭怯脭?shù)學(xué)公式表達(dá)的。所以如果投影到光柵屏幕上的話,無(wú)論如何都會(huì)有細(xì)節(jié)損失的,只不過(guò)是不是明顯罷了。當(dāng)屏幕分辨率增加或者屏幕分辨率不變,而每個(gè)像素的采樣點(diǎn)增多的時(shí)候,這種細(xì)節(jié)會(huì)更好的表現(xiàn)在用戶面前,所以解決AA的一個(gè)最直觀的辦法就是通過(guò)增加分辨率。如果在圖像的長(zhǎng)度和寬度都增加2倍的條件下(4 X SSAA ),再次渲染圖像。然后做一個(gè)downfiltering,那么圖像的細(xì)節(jié)會(huì)表現(xiàn)的更好一些,鋸齒會(huì)明顯的減少。這種辦法就是SSAA了,挺Brute Force的辦法。這種方法的好處在于可以更完美的表現(xiàn)畫面,不過(guò)問(wèn)題在于其計(jì)算代價(jià)是與屏幕分辨率成正比的。4 x SSAA 的速度要比沒(méi)有AA慢4倍左右的時(shí)間,對(duì)于大多數(shù)應(yīng)用來(lái)說(shuō),是得不償失的。從性能角度而言,SSAA是不實(shí)際的。
當(dāng)然,即使確定了SSAA算法后,也還有一些其他的細(xì)節(jié)需要考慮。例如,16 x SSAA可以被理解為每個(gè)像素有十六個(gè)采樣點(diǎn),而采樣點(diǎn)的分布是
而這種分布對(duì)于反走樣并不是特別有效的,可以采用如下幾種分布來(lái)替換
?
從左到右依次是隨機(jī)分布,泊松分布和Jittered分布。隨即分布的問(wèn)題在于采樣點(diǎn)數(shù)量不多的時(shí)候,算法的結(jié)果不是特別穩(wěn)定。泊松分布的問(wèn)題在于并不能輕易計(jì)算出泊松分布的位置,而且位置計(jì)算代價(jià)很大。當(dāng)然還有很多其他的分布,這里就不多介紹了。不同的采樣點(diǎn)分布算法可以不同程度的改變反走樣的效果。
由于SSAA的算法代價(jià)過(guò)于大,所以應(yīng)用價(jià)值相對(duì)而言較小。MSAA假設(shè)一個(gè)像素內(nèi)的顏色變化是不大的,從而有效的把顏色和頂點(diǎn)的位置,法線等信息分離開(kāi)來(lái)了。這種算法在很早的Geforce3中,有硬件實(shí)現(xiàn)。由于在當(dāng)時(shí)的硬件條件下,紋理的讀取的開(kāi)銷很大,所以把這部分獨(dú)立出來(lái)就充分的節(jié)省了bandwidth與fillrate。假設(shè)這里是4 x MSAA,每個(gè)像素的四個(gè)采樣點(diǎn)中,除了沒(méi)有顏色信息,會(huì)有其他位置等信息。注意這里面的深度信息也是存儲(chǔ)在每個(gè)采樣點(diǎn)中的,就是說(shuō)深度比較也是基于sub-pixel級(jí)別的。Geforce 4系列的AA沒(méi)有本質(zhì)的變化,不過(guò)在采樣點(diǎn)的分布上做了一些調(diào)整。
藍(lán)色的為像素的中心,而紅色的為4 x MSAA的實(shí)際采樣點(diǎn)。由于平均距離小了很多,所以反走樣的效果有了一定的提升。而同期的AMD的硬件的AA效果要好一些,主要是采樣分布的原因。Geforce 4用的采樣分布屬于ordered grid sampling,而AMD采用了另一種rotated grid sampling。
?
從反走樣的質(zhì)量而言,AMD的R300系列要遠(yuǎn)遠(yuǎn)領(lǐng)先與Nv30。
隨著游戲產(chǎn)業(yè)的不斷發(fā)展,游戲場(chǎng)景也更加的復(fù)雜。很多游戲中利用alpha test簡(jiǎn)化場(chǎng)景的復(fù)雜度。例如下面的鐵絲網(wǎng):
問(wèn)題就出現(xiàn)了,由于MSAA的紋理采樣頻率依舊和沒(méi)有AA的時(shí)候一樣,所以對(duì)于上圖左邊而言,沒(méi)有MSAA和經(jīng)過(guò)MSAA處理的效果基本沒(méi)有區(qū)別。因?yàn)樯厦娴蔫F絲網(wǎng)是通過(guò)alpha test來(lái)模擬的,而沒(méi)有實(shí)際的網(wǎng)格。MSAA的紋理采樣率導(dǎo)致了其在這種情況下的無(wú)能為力。當(dāng)然后來(lái)就有了adaptive AA來(lái)改進(jìn)這種問(wèn)題。
上述的MSAA算法還有一個(gè)很嚴(yán)重的問(wèn)題,就是他們只能與forward rendering結(jié)合。而隨著游戲中光源效果的復(fù)雜,deferred rendering越來(lái)越受到關(guān)注。而無(wú)論是defered rendering還是msaa都是通過(guò)把顏色的計(jì)算與幾何體計(jì)算分離開(kāi)來(lái),而兩者是不能并存的。這就導(dǎo)致了很多麻煩。從某種程度上,MLAA和SRAA可以理解為后處理運(yùn)算,所以是可以和deferred rendering結(jié)合的。
MLAA更像是一種圖像處理方法,它不需要任何前驗(yàn)信息,只根據(jù)像素的顏色進(jìn)行處理。它可以和raster、ray tracing或者其他算法結(jié)合,而且完全不需要生成任何多余的信息。MLAA的算法相對(duì)來(lái)說(shuō)復(fù)雜很多,這里就不介紹了。
不過(guò)由于MLAA只是根據(jù)顏色進(jìn)行判定,所以很多時(shí)候可以影響一些高頻紋理。當(dāng)然這些紋理很可能在AF采樣后,自動(dòng)適應(yīng)MLAA算法了。至少該算法的作者稱MLAA不會(huì)對(duì)紋理的采樣其反作用。
MLAA的算法速度可能相對(duì)慢一些,作者的數(shù)據(jù)是在一個(gè)單核3GHz的處理器下,每秒可以處理20M的像素。對(duì)于大分辨率而言,這個(gè)速度可能還不能算是實(shí)時(shí)。如果利用GPU或者larrabee,可能速度會(huì)有些提升吧。論文中是在ray tracing的渲染方法下實(shí)驗(yàn)的,由于對(duì)于動(dòng)態(tài)場(chǎng)景的ray tracing需要更新空間劃分結(jié)構(gòu),所以可以利用空余線程處理圖像,基本不會(huì)帶來(lái)什么開(kāi)銷。對(duì)于實(shí)時(shí)渲染可能就需要用其他手段了。
由于MLAA的一些限制,SRAA就提出了解決方案。SRAA雖然也相當(dāng)于后處理,不需要任何forward rendering的元素。不過(guò)SRAA需要一個(gè)G buffer,這個(gè)G buffer的分辨率一般要大一些,這里就假設(shè)是4 x SRAA吧,那么G Buffer就是back buffer分辨率的4倍。SRAA根據(jù)G Buffer中的幾何信息,把每個(gè)像素與周圍一定范圍的像素進(jìn)行混合。由于引入了幾何信息,所以可以避免很多MLAA的錯(cuò)誤。
我們可以看到(c)圖中的MLAA算法把右下角本來(lái)清晰的矩形模糊化了,而SRAA由于引入了幾何信息,很好的保持了其清晰的特性,而又模糊了上面的鋸齒。
SRAA算法可以在保持算法性能的條件下生成與16 x SSAA相媲美的畫面,當(dāng)然有些細(xì)節(jié)可能還是要差一點(diǎn)。畢竟有些情況下,其算法中的部分假設(shè)是不成立的。
基本就介紹到這里吧,沒(méi)有怎么細(xì)致介紹,只是概要的提到了一些算法而已。
再分享一下我老師大神的人工智能教程吧。零基礎(chǔ)!通俗易懂!風(fēng)趣幽默!還帶黃段子!希望你也加入到我們?nèi)斯ぶ悄艿年?duì)伍中來(lái)!https://www.cnblogs.com/captainbed
轉(zhuǎn)載于:https://www.cnblogs.com/skiwnchiwns/p/10167893.html
總結(jié)
以上是生活随笔為你收集整理的Anti-Aliasing SSAA MSAA MLAA SRAA 简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。