遊戲中有個常見的問題就是鋸齒化的邊緣
可以看見直線或橫線不論怎麼放大都不會產生鋸齒狀
但斜線一放大就產生看起來像撕裂的圖案
這是因為圖像到螢幕上必須先像素化,像素是一小格一小格的格點
要用小格點表現斜線的結果就是會產生鋸齒狀的失真
至於在遊戲中則是因為要把原本的3D圖樣像素化到有限解析度的螢幕所產生的缺陷
這種缺陷會在3D物件的邊緣特別明顯
像在下圖中有個頃倒的竹棍,看就會發現邊緣充滿鋸齒
這種缺陷在畫面移動時會因為與周圍顏色的反差出現閃爍

鋸齒化可以藉由增加解析度(像素點)來消除
或是使用之前介紹的DSR(點我)先增加解析度在降階到螢幕解析度
但是這些方法都有很高的硬體需求
這就是為什麼會有Antialiasing反鋸齒存在
反鋸齒大致上是將那一點與周圍取樣的顏色做平均再塞入,已達到看起來較平滑的表面
簡單的示意如下
傳統反鋸齒
1.SSAA Supersample Anti-aliasing or FSAA
最早出現的反鋸齒是超級取樣SSAA
概念有點像DSR,將畫面放大後在降階到原本畫面
概念有點像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),改善模糊或遠景無法消除鋸齒的缺點(看下圖右邊遠方橋梁)

TXAA使用上一幀的像素進行採樣,跟前幾樣空間反鋸齒比起來,大幅減少了移動中的破碎影像
因為是Nvidia開發,所以只支援nVidia家的顯示卡
在動態畫面下比較會明顯許多
在下圖可以看出8xMSAA跟4xTXAA幾乎沒什麼差別,但是MSAA所需的資源比TXAA大太多了


結論
每項AA都有其優劣,要用什麼還是看使用者本身跟硬體
若以畫面呈現來看SSAA>MSAA>其他後處理AA
個人使用上來說 TXAA>SMAA>FXAA>MSAA>SSAA
SSAA有採用的遊戲不多
MSAA太吃硬體需求,表現也看不出跟其他高階後處理AA的差別
參考資料
若有錯誤歡迎指正
沒有留言:
張貼留言