遊戲斜邊點解一格格鋸齒?SSAA、MSAA、FXAA、SMAA、TAA、DLAA 機制同取捨指南
重點摘要
遊戲斜邊一格格,係因為連續幾何塞入方形像素格,斜邊穿過像素格就變樓梯級。六種抗鋸齒方法各醫唔同鋸齒,本文教你分清再取捨。
遊戲入面一條斜線,好少睇落似一條線,更多時睇落似一級級樓梯,每一級啱啱一個像素闊,橫過畫面一格格咁爬上去。鏡頭一郁,樓梯仲會閃爍。打開圖形選單,將抗鋸齒開到最高,樓梯可能幾乎無變,或者成幅圖變朦,或者郁動物件後面拖住一條淡淡尾巴。好自然會懷疑係顯示器壞、線材差、驅動舊,但好多時根本乜都無壞。樓梯係連續世界塞入方形像素格之後的必然結果,而唔同抗鋸齒方法只會醫其中一部分問題。問邊個選項最勁,係問錯問題。正確的第一個問題係:我見到的,到底係邊種鋸齒。
機制一:方格紙比喻,斜線穿過方格就變樓梯
想像一張方格紙。喺上面畫一條斜線,條線穿過一個個方形格,每一格只能夠二選一:屬於條線,或者唔屬於條線,世上無半格。遊戲面對的限制完全一樣,只係解像度高好多。三維場景係連續幾何,顯示器係離散像素格。渲染嗰陣,每個像素一般只取一個取樣點,去判斷呢格屬於邊個物件。斜邊或者曲線穿過像素格嗰陣,成格非此即彼,邊緣就變成樓梯級。呢種就係幾何鋸齒,係本文兩種鋸齒的第一種。
樓梯喺長斜邊同曲線上面最明顯,橫直邊就唔會出現,因為橫邊沿住像素行走,啱啱對齊成行像素,唔需要近似。斜邊以一個角度穿過像素格,必須用近似去表達,邊緣兩邊對比愈強,樓梯就愈顯眼,例如深色屋頂線對住光亮天空、淺色欄杆對住深色牆身。所有抗鋸齒方法,本質上都係想辦法令呢個被迫二選一的決定變得柔和,一係取樣取準啲,一係成品圖混合得聰明啲。明白呢個根源,後面六種方法先唔會變成一堆縮寫口號。
機制二:第二種鋸齒,郁動先閃爍的著色閃爍
就算幾何邊緣處理得好好,仲有第二種鋸齒。細密紋理、透明物件例如鐵絲網、樹葉、欄杆、高光反射呢類高頻細節,細過像素格,取樣嗰陣時有時無。鏡頭郁動嗰陣,同一個像素有時捉到呢啲細節,有時捉唔到,細節就會一閃一閃,郁動嗰陣睇落就係閃爍或者爬行。呢種閃爍唔係幾何邊問題,幾何取樣方法醫唔到。呢句係全篇分水嶺,後面每種方法段都會重複點出,因為所有對抗鋸齒失望的經驗,幾乎都係將幾何藥用去著色問題,或者倒轉。
靜止截圖仲會掩蓋呢個分別。一個方法靜止截圖可以好靚,郁動嗰陣閃爍嚴重;另一個方法截圖睇落略朦,郁動嗰陣反而非常穩定。靜止同郁動的判斷必須分開做,診斷段會再強調。讀者如果只憑截圖去判斷抗鋸齒好壞,對時間性方法會兩邊都判斷錯誤,呢點後面講時間性方法嗰陣會講得更清楚。
一表比較:六種方法,邊個階段做、醫邊種鋸齒
| 方法 | 階段 | 取樣定後處理 | 醫邊種鋸齒 | 主要弱點 | 適合方向 |
|---|---|---|---|---|---|
| SSAA | 渲染期間,成個場景 | 取樣:高過輸出解像度畫一次,再縮細平均 | 幾何邊、紋理、高光一齊 | 成本最高一檔 | 舊遊戲,或者效能有餘嗰陣 |
| MSAA | 渲染期間,只限邊緣 | 取樣:幾何邊緣取多個覆蓋樣本,著色一般只算一次 | 只限幾何邊 | 紋理、高光、透明物件閃爍原封不動 | 想要利邊緣,同時兼顧效能 |
| FXAA | 渲染之後,成品圖 | 後處理:成品圖搵高對比邊緣再柔化混合 | 幾何邊,近似處理 | 容易將幼細文字同紋理細節一齊柔化,成幅圖偏朦 | 效能行先,接受輕微朦 |
| SMAA | 渲染之後,成品圖 | 後處理:形態模式識別邊緣形狀再針對性混合 | 幾何邊,設計目標係保留細節好啲 | 仍然係單幀猜測,無真正場景資料 | 後處理質素,又想少啲全圖柔化 |
| TAA | 跨幀 | 時間性取樣:每幀輕微抖動取樣位置,再用動態向量對齊舊幀混合 | 幾何邊同郁動閃爍 | 歷史資料出錯就出現鬼影、拖影或者偏朦 | 郁動穩定行先,閃爍最困擾嗰陣 |
| DLAA | 渲染期間,原生解像度 | 模型式,屬於超解析技術家族:直接喺原生解像度做抗鋸齒 | 幾何邊同閃爍,視乎實裝 | 需要支援的遊戲同硬件 | 原生解像度質素,遊戲同硬件都支援嗰陣 |
呢張表的重點唔係邊行最勁,而係第三欄同第四欄:方法喺邊個階段做,決定咗佢知道幾多真相;醫邊種鋸齒,決定咗佢有無可能解決讀者眼前的問題。階段唔同,知道的資料唔同,極限亦唔同。
SSAA:最徹底,成本亦最高一檔
超級取樣,英文叫 SSAA,係最直接的想法,亦係最貴的想法。成個場景用高過輸出解像度畫一次,再縮細,將幾個高解像像素平均成一個輸出像素。因為每個輸出像素都係幾個樣本的平均,幾何邊、細密紋理、高光全部一齊平滑,質素一般係六種方法入面最好。代價跟住同一個邏輯嚟:成格場景,唔止邊緣,都要用高解像去算,所以成本係最高一檔。成本本文只寫相對排序,唔寫任何幀率損失數字、百分比或者延遲數字,因為嗰啲數字視乎遊戲、場景同硬件,寫出通用數字就係編造。
現代遊戲選單少見 SSAA,唔係故障,亦唔係部機唔支援,而係成本問題。現代場景本身已經好重,再成格用高解像去算,好多時超出效能預算。SSAA 出現的地方,多數係舊遊戲或者較輕的場景,或者效能有餘裕的情況,成本付得起,先至值得用。
MSAA:邊緣又直又利,其他閃爍原封不動
多重取樣,英文叫 MSAA,係同一個取樣想法的手術版。唔係成個場景用高解像去算,而係只喺幾何邊緣穿過像素的地方,取多個覆蓋樣本,計出邊緣佔呢格像素幾多比例。邊緣於是由硬樓梯變成按比例漸變的邊,睇落又直又利,成本低過 SSAA 好多。
限制係結構性的,必須毫不含糊咁講明:著色一般只算一次。MSAA 知道邊緣喺邊,但唔會將紋理或者高光取樣幾次。所以細密紋理、透明物件、高光閃爍,開 MSAA 之前點閃,開之後照樣點閃。鐵絲網或者樹冠喺 MSAA 下仲閃,唔係設定錯誤,而係方法的邊界。想醫呢類閃爍,要轉去時間性方向,後面會講。
仲有一個硬規則,必須喺呢段講死:MSAA 選單數字,例如二倍、四倍、八倍,只係幾何邊緣樣本數,唔可以同其他方法的強弱直接比較數字大細。八倍只係話邊緣取樣取得多啲,唔代表佢喺所有方面都強過時間性方法,因為兩個數字量度的根本唔係同一樣嘢,醫的鋸齒種類亦唔同。唔好用數字大細去跨方法比高低,比較方法應該比較機制同醫邊種鋸齒。
FXAA:最平,靠成品圖估邊緣
快速近似抗鋸齒,英文叫 FXAA,係後處理。成格畫完之後,程式喺成品圖上面搵高對比邊緣,即係樓梯最可能出現的地方,再做柔化混合。因為只係喺成品圖上面做工夫,成本最低,幾乎任何遊戲都做到,呢個平同通用就係佢的全部吸引力。
代價係知識。FXAA 唔知道邊緣背後的幾何真相,只睇到成品像素,所以必須估邊啲高對比轉變係真邊緣,邊啲係細節。幼細文字、精緻紋理、幼線,好容易連同樓梯一齊被柔化,成幅圖睇落略朦,好似鋪咗一層薄薄的柔化濾鏡。鍾意效能行先的用家,可以接受呢種朦;追求細節清晰的用家,就會覺得 FXAA 係第一個想換走的方法。兩種取態都合理,關鍵係知道自己用朦換咗乜。
SMAA:同樣後處理,手勢準啲
次像素形態抗鋸齒,英文叫 SMAA,同 FXAA 同屬後處理,階段一樣,分別在於點樣決定混合乜。FXAA 係見到高對比就混合,SMAA 係用形態模式識別邊緣形狀,包括直線、轉角、對角,再針對性混合,仲有次像素處理。設計目標好清楚:同 FXAA 一樣平,但手勢準啲,細節保留好啲,減少全圖柔化。
但設計目標唔可以寫成定論,話 SMAA 一定好過 FXAA。實際效果視乎遊戲實裝,有啲遊戲入面選擇性混合保留細節的效果好明顯,有啲遊戲入面分別好細。誠實寫法只限方向:SMAA 的設計目標係減少 FXAA 式全圖柔化,讀者應該逐隻遊戲、同一場景去比較,唔好信一個跨遊戲的排名。個別遊戲仲有其他後處理方法,例如 CMAA,原理同 FXAA 同 SMAA 同屬單幀成品圖後處理一類,提一句歸類就夠,唔好逐一展開。
TAA:借過去幾幀去穩定而家
時間性抗鋸齒,英文叫 TAA,改變咗問題的維度。唔係喺一幀入面取樣取多啲,而係借用之前幾幀。每幀輕微抖動取樣位置,令連續幾幀用略為不同的位置去取樣同一條邊,再用動態向量將舊幀對齊返今幀混合。郁動嗰陣,結果比任何單幀方法都穩定,閃爍大減,因為一幀閃爍的細節會被隔籬幾幀平均返。呢個就係時間性方法喺郁動場景特別受歡迎的原因。
弱點亦係時間性的。混合得準唔準,完全取決於歷史資料對齊得準唔準。快速移動、鏡頭切換、遮擋關係變化、動態向量唔準嗰陣,舊顏色就會漏入新幀錯誤的位置,出現鬼影、拖影或者整體偏朦。呢種鬼影係渲染歷史問題,判斷方法好簡單:靜止截圖可能好靚,郁動先見到問題;截圖靚唔等於郁動靚,兩種判斷必須分開。讀者如果只睇截圖去評價時間性方法,兩個方向都會判斷錯誤。
DLAA:原生解像度直接做抗鋸齒,唔係降解像度再放大
深度學習抗鋸齒,英文叫 DLAA,係超解析技術家族喺原生解像度的做法。DLAA 同 DLSS 的分別,必須用一句話講死:DLSS 係先降解像度再重建放大,DLAA 係原生解像度直接抗鋸齒。兩者方向相反,唔可以互換比較,亦唔可以當成一個係另一個的加強版。本文只講機制類別,唔會用模型令畫面變真之類的誇張講法。
DLAA 有兩個前提:遊戲有實裝,硬件有支援。本文只會講需要支援的遊戲同硬件,唔會列出具體硬件型號清單或者驅動版本,因為支援情況會變,印出來的清單好快就會變成錯誤資料。兩個前提都符合嗰陣,DLAA 提供原生解像度平滑,整體取捨同時間性方法相近:郁動穩定,但效果視乎該遊戲的實作品質。提及超解析原生模式嗰陣,效果視乎該遊戲實裝,唔可以當成所有遊戲都一樣。
點解現代遊戲選單成日無 MSAA
記得 MSAA 係標準選項的讀者,成日會問點解而家好多遊戲選單無咗佢。答案係結構性的,唔係故障,亦唔係廠商偷工減料。現代引擎多用延遲渲染,幾何邊緣同著色分開處理,MSAA 需要將邊緣覆蓋同著色以特定方式結合,喺分開處理的管線入面難以直接套用。選單於是改為提供時間性或者後處理方法。本文只會定性咁講呢個結構原因,唔寫任何引擎版本號、介面版本對照表,因為結構原因本身已經足夠診斷,版本表對讀者判斷無幫助。選單無 MSAA,係引擎選擇,唔係部機或者驅動有問題。
解像度有幫助,但唔會令樓梯消失
解像度愈高,同一條斜邊佔用像素愈多,樓梯級相對愈細,肉眼感覺愈輕微。呢個方向可靠,亦係高解像度顯示器未開抗鋸齒都睇落乾淨啲的原因之一。但唔等於消失。幼細幾何例如電線、欄杆、高光閃爍,喺高解像度下仍然可以鋸齒或者閃爍,因為細節喺局部地方仍然細過像素格。本文唔會寫某個解像度就唔使開抗鋸齒當定論。需要減輕,但方法選擇仍然存在,尤其係閃爍類鋸齒。
銳化唔係抗鋸齒
銳化值得用一段短而肯定的文字講明,因為佢成日被誤會成第七種抗鋸齒。銳化只係加強邊緣對比,令朦的圖睇落精神啲,唔會補回取樣不足的資訊。時間性方法令畫面偏朦嗰陣加銳化,係取捨,唔係修復鬼影。銳化治的是朦的觀感,唔係樓梯或者閃爍的根源。將開銳化當成開抗鋸齒,只會令真正的鋸齒問題繼續存在。
診斷六步:同場景、靜止同郁動分開睇
第一步,分邊種鋸齒。靜止斜邊一格格,就係幾何鋸齒。郁動嗰陣細紋理或者高光一閃一閃,就係著色或者材質閃爍。成幅圖朦,好可能係縮放或者解像度問題,唔係純鋸齒,唔好硬套本文。分錯種類,後面揀方法一定錯。
第二步,同場景對照。同一個場景、同一角度,先關抗鋸齒睇一次,再逐個試遊戲提供的抗鋸齒選項睇一次。對照必須喺同場景做,唔同場景比較無意義,因為場景內容本身對鋸齒的影響,比設定更大。
第三步,靜止同郁動分開睇。時間性方法靜止截圖可能好靚,郁動先見鬼影。幾何取樣方法靜止邊緣利,郁動閃爍照舊。截圖靚唔等於郁動靚,呢句要寫明,兩個判斷都要做齊。
第四步,排除動態解像度同縮放干擾。如果遊戲開咗動態解像度,實際渲染解像度低過輸出,鋸齒會加重,應該先固定解像度再判斷抗鋸齒。如果經顯示器或者顯示卡縮放,或者作業系統縮放致朦,嗰種朦唔係抗鋸齒醫的範圍,應該行縮放層的分辨路。
第五步,透明物件測試。鐵絲網、樹葉、欄杆呢類透明或者幼細物件喺 MSAA 下依然鋸齒,屬於方法極限,唔係設定錯誤。想醫呢類,要轉時間性或者超解析方向;超解析本身另有專題,本文唔會成篇重寫。
第六步,取捨決策,只寫方向,唔寫推薦清單。效能有餘,又鍾意利邊緣,就偏向幾何取樣方向。郁動閃爍最困擾,就偏向時間性方向。效能行先,接受輕微朦,就偏向輕量後處理方向。本文唔會寫邊隻遊戲用邊種最好,唔會寫任何幀率數字,唔會寫任何顯示卡型號推薦,因為嗰啲清單同數字會過時,亦會誤導讀者以為有一個跨遊戲的最強答案。
邊界情況:數字禁令、超解析交界、面板拖影分層
第一,跨方法數字比較禁令,再講一次:唔好用數字大細去跨方法比高低。MSAA 樣本數、超取樣倍數、時間性強弱滑桿,屬於完全不同的數字體系。一個體系入面數字大,唔代表另一個體系入面數字細就差。比較方法,應該比較階段、醫邊種鋸齒同弱點。
第二,超解析同抗鋸齒有重疊,但唔係同一主題。超解析喺重建過程入面本身有抗鋸齒效果,但本文只喺 DLAA 段同診斷第五步提及,唔會將超解析成篇重寫。讀者想深入超解析,應該去超解析專題,唔好喺本文搵齊所有答案。
第三,幀生成的鬼影同時間性鬼影唔同層。幀生成係憑空插幀,時間性抗鋸齒係混合歷史真幀,兩者睇落可能相似,但成因同處理唔同,唔好混為一談。邊界段只會點到即止,唔會展開。
第四,顯示器本身的殘影或者拖影,屬於面板時間特性,唔係渲染鋸齒。讀者分唔清嗰陣,診斷第一步的靜止對郁動,加上換遊戲或者換畫面仲有無,可以分層:渲染鋸齒跟住遊戲場景走,面板拖影跟住面板跨內容走。
常見誤區:八條逐一駁斥
誤區一,抗鋸齒開最高一定最好。錯。最高未必最啱,超取樣成本最高,時間性方法最強可能鬼影最明顯,取捨要睇場景同效能餘量,唔係睇滑桿位置。
誤區二,MSAA 八倍一定好過時間性方法。錯,錯足兩重。八倍只係幾何邊樣本數,醫的鋸齒種類唔同,數字體系亦唔同,一個體系的數字唔可以壓倒另一個體系的方法。
誤區三,開抗鋸齒就解決所有閃爍。錯。幾何抗鋸齒醫唔到著色同高光閃爍,嗰類要時間性方向先有機會改善,而且改善唔等於保證完全消除。
誤區四,高解像度就唔使抗鋸齒。錯。幼細幾何同高光喺高解像度下仍可鋸齒或者閃爍,只係幅度細咗,需要減輕,但唔係自動消失。
誤區五,選單無 MSAA 即係部機或者驅動有問題。錯。現代延遲渲染結構令 MSAA 難以套用,選單無 MSAA 係引擎選擇,唔係故障。
誤區六,TAA 鬼影等於顯示器壞。錯。TAA 鬼影換場景即消失,烙印換乜內容都仲喺度,兩者分層方法見面板殘影分辨文章。
誤區七,DLAA 即係 DLSS。錯。DLSS 降解像度再重建,DLAA 原生解像度直接抗鋸齒,方向相反,唔好互換。
誤區八,開銳化等於開抗鋸齒。錯。銳化只加強對比,唔補回取樣資訊,治標唔治本,唔可以代替抗鋸齒。
送檢前記低咩
如果跟足上面六步都分唔到,或者各層對照完仍然有疑問,送檢之前記低幾項資料,會幫到檢測好多:見到的是邊種鋸齒,同場景對照有無分別,靜止同郁動的判斷係咪一致,動態解像度同縮放排除咗未,透明物件測試結果係點。記低呢啲資料,檢測嗰陣就唔使由頭估。
香港顯示卡專業維修 HK GPU Fix 位於石門達利廣場 1209 室,電話 2186 8010,WhatsApp 6558 6806。檢測同維修收費按網站已公開三級收費 HK$400–2,800,視乎檢測結果而定。冇旺角門市,冇上門服務,檢測喺店內進行。送修前可以先記低上面幾項資料,方便檢測時對照。
常見問題
問:點解遊戲選單無 MSAA 選項?
答:因為好多現代引擎用延遲渲染,幾何同著色分開處理,MSAA 喺呢種管線入面難以套用,選單於是提供時間性或者後處理方法代替。缺少選項係引擎選擇,唔係部機或者驅動故障。
問:點解開咗抗鋸齒,樹葉同鐵絲網仲閃?
答:因為樹葉同鐵絲網屬於透明細密細節,佢哋的閃爍係著色閃爍,唔係幾何鋸齒。幾何取樣方法醫唔到呢類,時間性方向先有機會改善,而且改善應該喺郁動嗰陣判斷,唔係只睇截圖。
問:TAA 鬼影係咪顯示器壞?
答:通常唔係。TAA 鬼影嚟自渲染歷史混合,換場景就會消失,屬於渲染層問題。判斷關鍵係換場景之後拖影去唔去,渲染層問題會跟住場景走,面板層問題會跨內容留低。
問:高解像度仲使唔使開抗鋸齒?
答:通常仲要,不過迫切程度低啲。高解像度令每級樓梯相對細啲,但幼細幾何同高光閃爍仍然可以超出像素格的表達能力。應該按實際玩的場景去判斷,唔好假設解像度本身已經解決晒。
問:DLAA 同 DLSS 點分?
答:DLSS 降解像度再重建放大,DLAA 原生解像度直接抗鋸齒。兩者屬於同一技術家族,但方向相反,唔可以互換使用,亦唔好當成一個係另一個的加強版。
問:銳化可唔可以代替抗鋸齒?
答:唔可以。銳化只加強邊緣對比,令偏朦的圖睇落精神啲,但無補回取樣資訊,樓梯同閃爍的根源仍然存在。銳化可以係時間性方法偏朦嗰陣的配合做法,但唔係代替品。