NVIDIA的黑科技:MFAA超高效能抗鋸齒
2025-04-02 01:59:26
速度與畫質一直都是3D遊戲追求的兩大終極目標,但很多時候,速度與畫質總是魚和熊掌不可兼得,想要開啟高級特效必然會損失幀數導致流暢度下降,因此就需要硬體廠商不斷的研發出性能更強的GPU,也需要軟體廠商研發出更高效率的圖形技術。
抗鋸齒(Anti-Aliasing,簡寫為AA)就是這樣一項很特別的圖形技術,它能夠明顯的改善遊戲畫面表現力,同時也會讓遊戲幀數大幅下降。所以多年以來,不論是顯卡廠商還是遊戲開發商,都在努力的改進抗鋸齒效率,開發出新的抗鋸齒模式,讓遊戲畫質變得更好,同時也不至於讓性能損失太多。
所以,大家一定聽過或者見過以下這些抗鋸齒中的一種甚至多種,如:MSAA、CSAA、CFAA、FXAA、TSAA……今天筆者就為大家詳細解讀3D遊戲中的鋸齒是如何產生的,回顧最常見的MSAA技術的原理和優缺點,最後介紹NVIDIA新開發的一種效率極高的抗鋸齒技術——MFAA。
● 為什麼會產生鋸齒?
我們知道,顯示屏是由一個個方塊像素點組成的,這些方塊像素點在顯示斜向或圓形物體時,會不可避免的在邊緣產生鋸齒狀的線條。就像馬賽克一樣,只不過是薄碼而已……
● 高分屏能否自動消除鋸齒?
當顯示器的解析度或顯示屏的PPI(每英寸的像素數)足夠大時,人眼將無法看清具體的像素點,但相鄰像素之間的色彩差異也會產生明顯的錯落感,高解析度/PPI由於像素變得非常細膩,可以同比縮小鋸齒,但仍不能完全消除鋸齒。
● 抗鋸齒技術是如何抵抗鋸齒的?
前面說過,方塊像素顯示斜向或圓形物體時,鋸齒是無可避免的,抗鋸齒也無法消除鋸齒,但它能通過欺騙人眼的方法,讓鋸齒的稜角顯得不那麼明顯:
如上圖所示,方法就是對鋸齒所在位置的像素及相鄰像素進行比對採樣處理,計算出該像素應該顯示多少比例的灰階值,而不是「非黑即白」的顯示模式。比如4xAA就是對每個像素採樣4次,原本該像素只有0、1兩種顯示模式,開啟4xAA後就能顯示0、1/4、1/2、3/4、1五種模式。
如此一來,稜角分明的鋸齒邊緣,就會顯得比較模糊,色彩過渡比較自然,就不會那麼刺眼了,鋸齒一定程度上被消除了。
● MSAA佔據主導位置,4xMSAA使用最廣泛
MSAA的全稱是Multi Sampling Anti-Aliasing,多重採樣抗鋸齒。MSAA只對Z緩存和模板緩存中的數據進行採樣處理,可以簡單理解為只對多邊形的邊緣進行抗鋸齒處理,而忽略非邊緣像素(因此可能會在一些特殊位置殘留一些鋸齒)。這樣的話,相比SSAA對畫面中所有數據進行處理,MSAA對資源的消耗需求大大減弱,因此MSAA在遊戲中使用最廣泛,多年來一直佔據主導位置。
通常在遊戲中會提供2x、4x、8x三種抗鋸齒級別,一般最常用的就是4x這種模式,因為4x和8x的畫質差別已經很小了。
● 開啟抗鋸齒性能損失有多大?
可以看出,4x抗鋸齒雖然效果優秀,但性能損失比較大,而2x性能損失最小,可以說效率最高。
● NVIDIA的黑科技:超高效能的MFAA
鑑於高倍MSAA性能損失較大的問題,NVIDIA在MSAA的基礎上開發出了一種「投機取巧」的技術:Multi-Frame Sampled Anti-Aliasing(MFAA),從字面上來看它是MSAA的一個變種,可以翻譯為「多幀多重採樣抗鋸齒」。
上圖為MFAA的工作原理,奇數幀在水平方向進行一次2xMSAA採樣,偶數幀在垂直方向進行另外一次2xMSAA採樣,然後通過軟體算法將其合成,最終的採樣結果與直接進行4xMSAA沒有區別。
可能會有人擔心,對相鄰的兩幀進行兩次2xMSAA採樣合成會不會造成畫質損失,尤其是當畫面運動幅度較大時?其實MFAA都是對物體邊緣進行採樣,無論運動幅度多大都有固定的幾何軌跡,因此兩幀始終會在固定的像素點進行合成,不會產生錯亂,合成之後的採樣效果自然也不會與MSAA有啥區別。
● 4xMSAA的畫質與4xMFAA完全相同,4xMSAA的性能接近與2xMSAA
4xMFAA的畫質與4xMSAA沒有區別
當然,通過算法將兩次2xMSAA合成為4xMFAA,性能肯定會有損失的,NVIDIA官方稱性能損失會在5%以內,這樣4xMFAA的性能自然會遠超4xMSAA,只是略低於2xMSAA。同理可以實現8xMFAA的性能遠超8xMSAA,略低於4xMSAA。
4xMFAA的幀數比4xMSAA高30%
通過這樣一個簡單而有創意的技術,可以免費讓NVIDIA顯卡的抗鋸齒性能提高30%,這不是黑科技是什麼^_^