● 小程序FXAA補丁遊戲實測
遊戲裡的鋸齒又稱「狗牙」,它不招人待見,但是遊戲玩家又不得不忍受的存在,因為沒有任何一款遊戲敢說自己的畫面沒有鋸齒,即便如《Crysis 2》這麼強悍的遊戲畫質也能找到鋸齒的存在,歸根到底這還是技術的原因,計算機以像素為基本單位的顯示方式決定了鋸齒的存在(一說是因為計算機建模使用的是三角形,拼接的時候不可能完全吻合而產生鋸齒),解析度非常高的時候(顯示的像素更多)鋸齒現象或許不夠明顯,解析度越低的話鋸齒就會越來越多,嚴重影響畫質表現。
目前來說實現無鋸齒是不現實的,但是可以做適當處理儘量消除鋸齒,至少也要做到視覺上不易分辨的地步,這個就要依賴抗鋸齒(Anti-Aliasing)技術了,AA可以將模型的邊緣做平滑處理(NVIDIA的驅動控制面板中就把AA選項翻譯為「平滑處理」),使直線更直,圓形更圓。
AA也可以分為好多種,常見都有SSAA、MSAA、CSAA等等。如果以實現方式來分,AA也可以分為硬體AA(Hardware AA)和後期處理AA(Post-process AA),前面提到的MSAA和CSAA等都是硬體AA,它們的AA處理主要靠遊戲廠商實現,一旦遊戲不支持AA(比如《星際2》),驅動強制AA的話往往會帶來一定的問題。後期處理AA則有些不同,大多可以不依賴遊戲,只要顯卡支持就可以了,這方面的AA有Intel提出AMD繼承的MLAA(形態抗鋸齒)、NVIDIA力推的FXAA(快速近似抗鋸齒),還有一個技術牛人Humus自創的GPAA(幾何後期抗鋸齒),其他的還有DLAA、Hybrid AA等等。
FXAA是後期處理AA中很有代表性的一個,不依賴遊戲,不挑剔硬體
在這幾種後期AA中,AMD已將MLAA應用在驅動程序中,我們也曾做過MLAA的專題測試,近期的催化劑11.8預覽版還大幅提升了MLAA性能,只是MLAA只能用於A卡,還存在這圖像失真等問題。相比之下,FXAA適用性更廣,支持A卡和N卡,而且也不限制DX9、DX10或者DX11圖形API,只是目前應用FXAA的遊戲比較少,已經發布的遊戲中我只知道有《永遠的毀滅公爵》、《無主之地》和《E.3.E.R》,未來的遊戲還有《戰地3》和《神秘海域3》支持FXAA,而關鍵的一點是NVIDIA的驅動控制面板中還沒有提供FXAA選項。
雖然FXAA不需要遊戲支持,但是顯卡驅動不提供FXAA支持依然是普及的障礙
不過本文可不是講什麼空洞的AA技術,而是推薦一個小補丁,它可以讓目前的遊戲實現FXAA支持,解決了許多遊戲廠商沒做到的問題,當然這也要歸功於FXAA先進的技術特性,不依賴特定遊戲,而且同時支持AMD和NVIDIA兩家的顯卡。
這個小補丁最早是3DCenter論壇發布的(德文的),發帖者是Gast(不確定補丁作者是否就是他),原文的補丁下載地址就不放了(需要爬梯),我上傳了一份到自己FTP,需要的可以點擊下載。
補丁其實很小,只有57KB,解壓后里面有兩個文件夾,D3D9和D3D10,前者適用於DX9遊戲,後者適用於DX10遊戲,將每個文件夾下的文件複製一份到遊戲exe程序所在目錄即可,如果能成功開啟後自動生成一個名為「log.log」的文件,FXAA在遊戲中可以實時開啟或關閉(快捷鍵是Pause Break,Prtscn SysRq是截圖快捷鍵)。另外,作者說他沒有DX11硬體,不過理論上DX10和DX11是通用的,也有人發帖說DX11遊戲中也成功了。
下面我們就以這個補丁為例,來看看它遊戲中到底有什麼魔力,對畫質有什麼提升,對性能又有什麼影響。
小知識:什麼是FXAA
全稱為「Fast Approximate Anti-Aliasing」,翻譯為「快速近似抗鋸齒」。它是傳統MSAA效果的一種高性能近似值,是一種單程像素著色器,和MLAA一樣運行於目標遊戲渲染管線的後期處理階段,但不像後者那樣使用DirectCompute,而只是單純的後期處理著色器,不依賴於任何GPU計算API。正因為如此,FXAA技術對顯卡沒有特殊要求,完全兼容NVIDIA、AMD的不同顯卡(MLAA僅支持A卡)和DX9、DX10、DX11。相比於MSAA,FXAA的目標是速度更快、顯存佔用更低,還有著不會造成鏡面模糊和亞像素模糊的優勢,而代價就是精度和質量上的損失。
原文連結:小程序解決大問題 FXAA補丁遊戲實測
● FXAA與MSAA畫質對比
試了多個遊戲之後,畫質對比最終選擇了《DiRT 2》,遊戲中的「View」瀏覽模式可以很方便地觀察畫面各個部分。以下是No AA、4x MSAA和FXAA的畫質對比,睜大眼鏡尋找不同吧。注意一點,FXAA似乎沒有多少倍抗鋸齒的概念,這裡就選擇了最優代表性的4x MSAA作為對比,畢竟8x或更高的抗鋸齒在實際應用中能開的很少,實用性不足。
1920x1080/Ultra畫質未開抗鋸齒截圖(點擊放大)
這一張是未開抗鋸齒的截圖,可以看到無論是鐵桿還是鐵箱的邊緣都有嚴重的鋸齒現象,幀速為97fps。
1920x1080/Ultra畫質4x MSAAA截圖(點擊放大)
這張是4x MSAA的截圖,可以看到狗牙已經減少很多,鐵箱上面的邊緣比較光滑了,但是左側的邊緣依然有看得出的鋸齒(小圖看不到,大圖上可以看到),幀速為89幀。
1920x1080/Ultra畫質開啟FXAA截圖(點擊放大)
輪到FXAA出場了,乍看之下與4x MSAA並沒有明顯的區別,鐵箱和鐵桿的邊緣幾乎是一樣的,不過FXAA的汽車邊緣不如4x MSAA圓滑,而且幀速也只有80幀,比4x MSAA還低。
1920x1080/Ultra畫質開啟FXAA+4x MSAA截圖(點擊放大)
這張圖比較特別,這是同時啟用FXAA和4x MSAA的截圖,還好沒有衝突,邊緣鋸齒進一步減少,只是代價更高,幀速進一步拉低到73幀。
在另一個遊戲《Metro 2033》中我也截了圖,由於這個遊戲在DX9模式不能自主設定抗鋸齒選項(只有「AAA」一項),因此只有兩個截圖。
Metro 2033中AAA抗鋸齒截圖(點擊放大)
Metro 2033中FXAA抗鋸齒截圖(點擊放大)
首先開不開FXAA的幀速差距很小,只有4幀(或許是因為AAA已經做了抗鋸齒處理了),但是畫質差距還是蠻大的,FXAA下的圖書邊緣清晰,而AAA時狗牙嚴重啊。
總的來說,不開FXAA與開FXAA會有較大差距,在畫質上可以認為FXAA與4x MSAA二者旗鼓相當,那麼還有一個問題就是性能上的,開了FXAA之後遊戲性能會下降多少呢,截圖上的幀數已經顯示出一些蛛絲馬跡了,下面就來看一下FXAA的實際性能。
● 遊戲性能及兼容性測試及總結
以上是測試平臺的配置,注意A卡並沒有使用最新的催化劑11.7驅動,因為《DiRT 2》中使用催化劑11.7的HD 6790只有30多幀,而換回催化劑11.6中就正常了。此外,《DiRT 2》和《叛逆連隊2》需要修改配置文件強制開啟DX9模式。由於測試時間有限,只簡單測試了兩款顯卡,GTX 550 Ti和HD 6790,先來看GTX 550 Ti的成績。
註:圖中N/A代表遊戲不能自定義AA選項,《Metro 2033》在DX9模式下只有「AAA」選項,《叛逆連隊2》中強制DX9模式的話也沒有AA選項,下同。
如果以不開AA作為性能100%的話,那麼4x MSAA平均性能為85.7%,而這個FXAA的性能相當於82.9%,也就是說性能損失與4x MSAA略微高一些。
A卡方面情形也很類似,最終FXAA與4x MSAA的成績相當,性能損失在14%左右,性能方面的表現還可以接受。
上面的性能測試中只有4款遊戲,這可不是筆者偷懶,而是實在沒辦法的事。這個FXAA補丁雖然說支持DX9、DX10,並且理論上兼容DX11模式,但是實際情況是大部分遊戲中要麼不起作用,要麼就出錯,這裡簡單列舉筆者常用的幾款遊戲的兼容性:
1.《Left 4 Dead》和《Left 4 Dead 2》遊戲無報錯,但是也沒有效果,幀數和畫質都沒變。
2.《星際爭霸2》也無報錯,同樣沒有效果。
3.《H.A.W.X》的DX9模式無效果,DX10下模式MSVCR100.DLL報錯,無法進遊戲。
4.《FarCry 2》的DX9模式可用,FXAA有效果,但是DX10模式也會dll報錯,遊戲可進,但是AA選項和DX版本選項失效。
5.《Crysis 2》的DX9模式會自動退出,DX11模式可進遊戲,但是FXAA無效果。
6.《叛逆連隊2》的DX9模式可用,也有效果,但是DX11模式也會dll報錯,遊戲中也沒有效果。
從測試結果上來看,DX9模式中FXAA成功開啟的機率還是很高的,最多也是不起效果,但是DX10和DX11模式下多數遊戲都會報錯,筆者試驗的幾款DX11遊戲還沒有成功開啟FXAA的。
上面列了這麼多無效或者不兼容的問題並非是批評,畢竟這只是獨立第三方的個人製作的小補丁,從國外論壇的反饋來看還是有很多遊戲能正常開啟FXAA的,對畫質也有改善,補丁作者也在不斷修正程序,其技術能力和動機還是讓人欽佩的。
我們更希望這個小補丁起到「拋磚引玉」的作用,第三方個人能力有限,FXAA普及還得依賴GPU廠商和遊戲廠商合作,至少也要NVIDIA的驅動提供FXAA支持,就跟AMD的MLAA實現方法一樣。由於FXAA可以做到與遊戲無關,一旦驅動支持FXAA,那麼全民體驗FXAA的時代就不遠了。