不同的抗鋸齒/多重採樣設置有什麼區別?
我正在調整 DiRT 2 中的設置,並為多重採樣提供了這些選擇(按順序):
- 2x MSAA
- 4x MSAA
- 8x MSAA
- 8x CSAA
- 16x CSAA
- 8x QCSAA
使用我看到的 nVidia 控制面板
- 2x
- 4x
- 8x CSAA
- 8倍
- 16x CSAA
- 16xQ CSAA
- 32x CSAA
我假設那些在 nVidia 面板上沒有文字的可能是 MSAA。
天真的猜測是更大的數字在視覺上更好。但隨後 MSAA、CSAA 和 QCSAA 開始發揮作用(可能是執行 AA 的不同方法),並且由於順序不正確而混淆了問題。
例如,8x / 8x MSAA 是否比 8x CSAA “更好”?否則為什麼它會在 nVidia 面板上的列表中更靠後?根據 DiRT2 中的順序,8x QCSAA 是否比 16xCSAA“更好”?
在圖像質量、性能和任何其他怪癖方面,各種類型的 AA 之間有什麼區別?
我不是在問算法/實現的差異;無論如何,這可能是題外話。
這是一個很好的問題,因為除了“AA 是打開還是關閉?” 我沒有考慮所有各種抗鋸齒模式的性能影響。
在So Many AA Techniques, So Little Time中有對三種“主要”AA 模式的很好的基本描述,但現在幾乎所有的 AA 都是 MSAA 或它的一些微調整化版本:
- **超採樣抗鋸齒 (SSAA)。**書中最古老的技巧 - 我將其列為通用技巧,因為您幾乎可以在任何地方使用它:前向或延遲渲染,它還可以消除 alpha 切口的鋸齒,並且它還可以在高各向異性下為您提供更好的紋理採樣。基本上,您以更高的解析度渲染圖像,並在完成後使用過濾器進行下採樣。銳利的邊緣在縮小尺寸時變得抗鋸齒。當然,人們不使用 SSAA 是有原因的:它要花一大筆錢。無論您的填充率賬單是多少,即使是最小的 SSAA,它也是 4 倍。
- **多采樣抗鋸齒 (MSAA)。**這是現代顯卡硬體中通常擁有的。顯卡渲染到比最終圖像更大的表面,但在對每個樣本“集群”進行著色(最終螢幕上將顯示為單個像素)時,像素著色器只執行一次。我們節省了大量的填充率,但我們仍然消耗記憶體頻寬。此技術不會對來自著色器的任何效果進行抗鋸齒處理,因為著色器以 1x 執行,因此 alpha 切口呈鋸齒狀。這是執行前向渲染遊戲的最常見方式。MSAA 不適用於延遲渲染器,因為照明決策是在 MSAA 被“解析”(縮小)到其最終圖像大小之後做出的。
- **覆蓋樣本抗鋸齒 (CSAA)。**NVidia 對 MSAA 的進一步優化
$$ ed: ATI has an equivalent $$. 除了以 1x 執行著色器和以 4x 執行幀緩衝區之外,GPU 的光柵化器以 16x 執行。因此,雖然深度緩衝區產生了更好的抗鋸齒效果,但產生的混合中間陰影甚至更好。
這篇 Anandtech 文章對相對較新的顯卡中的 AA 模式進行了很好的比較,顯示了 ATI 和 NVIDIA 的每種模式的性能成本(這是 1920x1200):
---MSAA--- --AMSAA--- ---SSAA--- none 2x 4x 8x 2x 4x 8x 2x 4x 8x ---- ---------- ---------- ---------- ATI 5870 53 45 43 34 44 41 37 38 28 16 NVIDIA GTX 280 35 30 27 22 29 28 25
所以基本上,你可以預期性能損失……
- 無 AA → 2x AA
~15% 慢
- 無 AA → 4x AA
~25% 慢
零、2x、4x 和 8x 抗鋸齒之間確實存在明顯的質量差異。調整後的 MSAA 變體,也稱為“自適應”或“覆蓋樣本”,在或多或少相同的性能水平下提供更好的質量。每個像素的額外樣本 =更高質量的抗鋸齒。
比較每張卡上的不同模式,其中“模式”是用於生成每個像素的樣本數。
Mode NVIDIA AMD -------------------- 2+0 2x 2x 2+2 N/A 2xEQ 4+0 4x 4x 4+4 8x 4xEQ 4+12 16x N/A 8+0 8xQ 8x 8+8 16xQ 8xEQ 8+24 32x N/A
在我看來,超過 8 倍 AA,你必須有老鷹的眼睛才能看到差異。不過,擁有“便宜”的 2x 和 4x AA 模式肯定有一些優勢,可以合理地接近8x 而不會影響性能。這是您會注意到的性能和視覺質量提升的最佳點。