3D 抗鋸齒
也參考
Godot 也支援 2D 繪圖的抗鋸齒,詳情請參見 2D 抗鋸齒 頁面。
前言
由於解析度有限,3D 場景繪製時容易產生鋸齒狀的偽影。這些偽影最常見的現象是表面邊緣出現「階梯狀」效果(邊緣鋸齒),以及反射面上發生閃爍或亮點(鏡面鋸齒)。
在下方範例中,你可以看到邊緣呈現方塊狀,植被會閃爍消失,盒子頂部的細線也幾乎看不到:
圖像縮放 2 倍並進行近鄰濾波,使混疊現象更加明顯。
為了解決這個問題,Godot 中可以使用各種抗鋸齒技術。以下詳細介紹這些內容。
也參考
你可以透過 3D Antialiasing 範例專案 來實際比較不同的抗鋸齒演算法效果。
多重取樣抗鋸齒(MSAA)
此功能適用於所有算繪器。
這種技術是處理鋸齒的「歷史」方法。 MSAA 對幾何邊緣非常有效(尤其是在較高等級)。 MSAA 不會造成任何模糊。
MSAA 有 3 個等級:2×、4×、8×。較高的等級在抗鋸齒邊緣方面更有效,但要求也更高。在具有現代視覺效果的遊戲中,強烈建議堅持使用 2× 或 4× MSAA,因為 8× MSAA 通常要求過高。
MSAA 的缺點是它僅在邊緣上運作。這是因為 MSAA 增加了「覆蓋率」樣本的數量,但沒有增加「顏色」樣本的數量。然而,由於顏色樣本的數量沒有增加,片段著色器仍然只為每個像素運作一次。因此,MSAA 不會減少使用 Alpha Scissor 透明度模式(1 位元透明度)的材質的透明度鋸齒。 MSAA 對鏡面反射鋸齒也無效。
若要減少 Alpha Scissor(1 位元透明)材質的鋸齒,可以在 StandardMaterial3D 或 ORMMaterial3D 屬性中,於特定材質啟用 alpha 抗鋸齒 (又稱 alpha to coverage)。Alpha to coverage 會帶來中等效能負擔,但能有效降低透明材質的鋸齒,且不會產生模糊感。
要減輕鏡面鋸齒的明顯程度,可以使用預設啟用的 螢幕空間粗糙度限制器 。
你可以在專案設定中,於 算繪 > 抗鋸齒 > 品質 > MSAA 3D 來啟用 MSAA。請注意要調整的是 MSAA 3D,而非 MSAA 2D,這兩者是完全獨立的設定。
無抗鋸齒(左)與不同 MSAA 等級(右)之間的比較。請注意,此處未使用 alpha 抗鋸齒:
時間抗鋸齒(TAA)
這僅適用於 Forward+ 算繪器,不適用於 Mobile 或 Compatibility 算繪器。
時間抗鋸齒的工作原理是將先前算繪影格的結果「聚合」成單一高品質影格。這是一個連續的過程,透過每個畫面抖動場景中所有頂點的位置來運作。這種抖動是為了捕捉子像素細節,除非在極端情況下,否則應該是不明顯的。
此技術在現代遊戲中常用,因為它提供了針對鏡面反射鋸齒和其他著色器引起的偽影的最有效的抗鋸齒形式。 TAA 也全面支援透明度抗鋸齒。
在靜止場景中啟用 TAA 會產生少量模糊,但當相機移動時,這種模糊效果會變得更加明顯。 TAA 的另一個缺點是它可能會在移動物體後面呈現「重影」偽影。以更高的影格速率進行算繪將使 TAA 收斂得更快,從而使這些重影偽影變得不那麼明顯。
你可以在專案設定中,於 算繪 > 抗鋸齒 > 品質 > TAA 來啟用時間抗鋸齒(TAA)。
無抗鋸齒(左)和 TAA(右)之間的比較:
AMD FidelityFX Super Resolution 2.2 (FSR2)
這僅適用於 Forward+ 算繪器,不適用於 Mobile 或 Compatibility 算繪器。
自 Godot 4.2 起,內建支援 AMD FidelityFX Super Resolution 2.2。這是一種 升級算繪解析度的方法,相容於所有近代顯示卡。FSR2 主要用途為降低內部 3D 算繪解析度,再升級到輸出解析度,以提升效能。
但與 FSR1 不同,FSR2 還內建時間抗鋸齒功能。因此 FSR2 可以在原生解析度下啟用,帶來高品質的抗鋸齒(輸入解析度等於輸出解析度)。在這種情況下,啟用 FSR2 會*降低*效能,但渲染畫質會明顯提升。
在原生解析度下使用 FSR2 會比 TAA 更吃顯示卡資源,因此建議僅在 GPU 有足夠餘裕時使用。不過,FSR2 在移動時的抗鋸齒表現比 TAA 更細緻且模糊感較低。
未啟用抗鋸齒(左)與 FSR2 原生解析度(右)的比較:
備註
預設情況下,FSR 銳化 專案設定為 0.2``(數值越高,銳化效果越低)。為便於比較,以上截圖將 FSR 銳化設定為 ``2.0,等同關閉銳化。
快速近似抗鋸齒(FXAA)
這僅適用於 Forward+ 以及 Mobile 算繪器,不適用於相容性算繪器。
快速近似抗鋸齒是一種後製抗鋸齒解決方案。它的運作速度比任何其他抗鋸齒技術都要快,並且還支援抗鋸齒透明度。然而,由於它缺乏時間訊息,因此它對於防止鏡面反射鋸齒沒有多大作用。
這種技術有時仍會在手機遊戲中使用。然而,在桌面平台上,FXAA 通常已經過時,取而代之的是時間抗鋸齒,後者對於對抗鏡面鋸齒更為有效。儘管如此,對於擁有低階 GPU 的玩家來說,將 FXAA 作為遊戲內選項可能仍然值得。
啟用 FXAA 會產生中等程度的模糊(畫面靜止時比 TAA 更模糊、但相機移動時比 TAA 清晰)。
你可以在專案設定中,於 算繪 > 抗鋸齒 > 品質 > 螢幕空間 AA 將其設為 FXAA 來啟用 FXAA。
無抗鋸齒(左)和 FXAA(右)之間的比較:
超取樣抗鋸齒(SSAA)
此功能適用於所有算繪器。
超級取樣可以提供最高品質的抗鋸齒效果,但它也是最昂貴的。它的工作原理是多次對場景中的每個像素進行著色。這允許 SSAA 同時抗鋸齒邊緣、透明度*和*鏡面鋸齒,而不會引入潛在的重影偽影。
SSAA 的缺點是其「極高」的成本。這種成本通常會使 SSAA 難以用於遊戲目的,但您可能仍然會發現超級取樣對於離線算繪 offline rendering 很有用。
超取樣抗鋸齒(SSAA)可藉由將 算繪 > 3D 縮放 > 縮放 高級專案設定調高至大於 1.0 來啟用,並確認 算繪 > 3D 縮放 > 模式 設為 Bilinear``(預設值)。因為縮放係數可分別設定 X/Y 軸,``1.5 代表 2.25× SSAA,2.0 則為 4× SSAA。Godot 會利用硬體本身的雙線性濾波進行縮圖,因此用整數倍率(如 2.0)時畫面最銳利。
無抗鋸齒(左)與不同 SSAA 等級(右)之間的比較:
警告
超取樣對顯示卡記憶體(VRAM)需求極高,因為它會先以更高解析度算繪,再*縮放*到視窗大小。例如要讓專案以 3840×2160(4K)解析度搭配 4× SSAA 顯示,必須在 7680×4320(8K)解析度下算繪場景,像素量是原本的 4 倍。
若你已在高解析度(如 4K)下顯示,進一步增加縮放倍率很可能會因 VRAM 不足導致嚴重延遲,甚至程式崩潰。
螢幕空間粗糙度限制器
這僅適用於 Forward+ 以及 Mobile 算繪器,不適用於相容性算繪器。
這不是邊緣抗鋸齒方法,而是減少 3D 鏡面反射鋸齒的一種方法。
螢幕空間粗糙度限制器最適合詳細的幾何形狀。雖然它對粗糙度圖算繪本身有影響,但其影響有限。
螢幕空間粗糙度限制器預設即為啟用,無需額外設定。其效能影響極小,若你的專案幾乎不受鏡面鋸齒困擾,可考慮在 算繪 > 品質 > 螢幕空間過濾 > 螢幕空間粗糙度限制器 中將其關閉。
匯入時的紋理粗糙度限制器
與螢幕空間粗糙度限制器一樣,這不是邊緣抗鋸齒方法,而是減少 3D 鏡面反射鋸齒的一種方法。
透過指定法線貼圖來限制匯入的粗糙度,以用作限制粗糙度的指南。這是透過在檔案系統塢中選擇粗糙度圖來完成的,然後轉到匯入塢並將**粗糙度>模式**設定為儲存粗糙度圖的顏色通道(通常為**綠色**),然後設定材質法線貼圖的路徑。設定法線貼圖的路徑後,請記住點擊匯入底座底部的「重新匯入」。
由於此處理純粹在匯入時發生,因此沒有任何效能成本。但其視覺衝擊力有限。限制匯入時的粗糙度僅有助於減少紋理內的鏡面鋸齒,而無助於減少詳細網格上的幾何邊緣上發生的鋸齒。
我應該選用哪種抗鋸齒技術?
不存在「一刀切」的抗鋸齒技術。 由於抗鋸齒通常對 GPU 要求很高,或者可能會導致不必要的模糊,因此您需要新增一個設定以允許玩家禁用抗鋸齒。
對於追求寫實風格的專案,TAA 通常是最佳選擇。雖然 TAA 可能會帶來重影,但沒有其他技術能像 TAA 一樣有效對抗鏡面鋸齒。螢幕空間粗糙度限制器雖有幫助,但效果有限。若顯卡資源允許,也能考慮在原生解析度下使用 FSR2,畫質會比標準 TAA 更佳。
對於反射面較少的專案(例如卡通藝術風格),MSAA 可以很好地發揮作用。如果避免模糊和時間偽影很重要(例如在競技遊戲中),MSAA 也是一個不錯的選擇。
在針對移動或集成顯卡等低端平臺時,FXAA 通常是唯一可行的選擇。2× MSAA 在某些情況下可能可用,但更高的 MSAA 級別不太可能在移動 GPU 上流暢運作。
Godot 允許同時使用多種抗鋸齒技術。這通常是不必要的,但在高端 GPU 上或在 非即時算繪 中可以提供更好的視覺效果。例如,為了在啟用 TAA 時讓移動邊緣看起來更好,還可以同時啟用 MSAA。
抗鋸齒技術比較
功能 |
MSAA |
TAA |
FSR2 |
FXAA |
SSAA |
SSRL |
|---|---|---|---|---|---|---|
邊緣抗鋸齒 |
🟢 是 |
🟢 是 |
🟢 是 |
🟢 是 |
🟢 是 |
🔴 否 |
鏡面抗鋸齒 |
🟡 部份 |
🟢 是 |
🟢 是 |
🟡 部份 |
🟢 是 |
🟢 是 |
透明抗鋸齒 |
🟡 部份 [1] |
🟢 是 [2] |
🟢 是 [2] |
🟢 是 |
🟢 是 |
🔴 否 |
額外模糊 |
🟢 無 |
🟡 部份 |
🟡 部份 |
🟡 部份 |
🟡 部份 [3] |
🟢 無 |
重影偽影 |
🟢 無 |
🔴 是 |
🔴 是 |
🟢 無 |
🟢 無 |
🟢 無 |
效能消耗 |
🟡 中等 |
🟡 中等 |
🔴 高 |
🟢 低 |
🔴 非常高 |
🟢 低 |
Forward+ |
✔️ 是 |
✔️ 是 |
✔️ 是 |
✔️ 是 |
✔️ 是 |
✔️ 是 |
行動裝置 |
✔️ 是 |
❌ 否 |
❌ 否 |
✔️ 是 |
✔️ 是 |
✔️ 是 |
相容性 |
✔️ 是 |
❌ 否 |
❌ 否 |
❌ 否 |
✔️ 是 |
❌ 否 |