Translate

2015年3月27日 星期五

Antialiasing 遊戲中的反鋸齒入門介紹


遊戲中有個常見的問題就是鋸齒化的邊緣

這東西可以用以下示意圖表示:
可以看見直線或橫線不論怎麼放大都不會產生鋸齒狀
但斜線一放大就產生看起來像撕裂的圖案
這是因為圖像到螢幕上必須先像素化,像素是一小格一小格的格點
要用小格點表現斜線的結果就是會產生鋸齒狀的失真

至於在遊戲中則是因為要把原本的3D圖樣像素化到有限解析度的螢幕所產生的缺陷
這種缺陷會在3D物件的邊緣特別明顯
多種反鋸齒展示


像在下圖中有個頃倒的竹棍,看就會發現邊緣充滿鋸齒
這種缺陷在畫面移動時會因為與周圍顏色的反差出現閃爍


鋸齒化可以藉由增加解析度(像素點)來消除
或是使用之前介紹的DSR(點我)先增加解析度在降階到螢幕解析度
但是這些方法都有很高的硬體需求
這就是為什麼會有Antialiasing反鋸齒存在

反鋸齒大致上是將那一點與周圍取樣的顏色做平均再塞入,已達到看起來較平滑的表面
簡單的示意如下

傳統反鋸齒

1.SSAA Supersample Anti-aliasing or FSAA

最早出現的反鋸齒是超級取樣SSAA
概念有點像DSR,將畫面放大後在降階到原本畫面
取樣周圍的點平均顏色後在塞入
取樣有多種方法

因為他的無差別處理特性SSAA需要極大的VRAM跟記憶體頻寬,顧名思義,你的硬體要夠強

2.MSAA Multisample Anti-aliasing

SSAA的省資源改良版MSAA
簡單來說就是只處理多邊形邊緣的SSAA,相較SSAA單一像素點多次計算,MSAA只需一次
這也會導致若有後期光源處理會使反鋸齒化無效

至於選項裡常看到的2xMSAA、4xMSAA等等則是代表要反鋸齒附近要取多少像素點的差異
越高反鋸齒效果越好,硬體需求也越高




非傳統反鋸齒(後處理)

1.FXAA Fast Approximate Anti-aliasing

非傳統反鋸齒,由名稱可知其只是"近似"
不處理3D畫面而是從顯示在螢幕上的像素來分析(遠景無法處理)

比起一般的AA省很多電腦資源,但是因為其特性,若沒有先經過FXAA的話,會連顯示在畫面上的HUD或字體一起反鋸齒,導致字體邊緣圓弧/模糊化

從下圖可看出近景經過處理的柱子跟遠景的橋無法經FXAA改善鋸齒化(點圖可放大)


2.SMAA Subpixel Morphological Antialiasing

SMAA 也是後處理的AA類似FXAA,改善了模糊的特性
需要較多硬體效能,因為其採用了傳統AA輔助(SSAA、MSAA),改善模糊或遠景無法消除鋸齒的缺點(看下圖右邊遠方橋梁)



3.TXAA Temporal Anti-Aliasing 


跟前幾樣spatial anti aliasing不同的是TXAA為減少移動時的鋸齒現象採用了不同時間的像素
TXAA使用上一幀的像素進行採樣,跟前幾樣空間反鋸齒比起來,大幅減少了移動中的破碎影像
因為是Nvidia開發,所以只支援nVidia家的顯示卡
在動態畫面下比較會明顯許多

在下圖可以看出8xMSAA跟4xTXAA幾乎沒什麼差別,但是MSAA所需的資源比TXAA大太多了



結論

每項AA都有其優劣,要用什麼還是看使用者本身跟硬體
若以畫面呈現來看SSAA>MSAA>其他後處理AA
個人使用上來說 TXAA>SMAA>FXAA>MSAA>SSAA
SSAA有採用的遊戲不多
MSAA太吃硬體需求,表現也看不出跟其他高階後處理AA的差別

參考資料

若有錯誤歡迎指正

沒有留言:

張貼留言