Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
2D 抗鋸齒
也參考
Godot 同樣支援 3D 抗鋸齒。參看 3D 抗鋸齒 頁面。
前言
由於其有限的解析度,以2D算繪的場景可能出現鋸齒偽影。這些偽影通常以幾何邊緣上的“樓梯狀”效果的形式呈現,並且在使用節點(如 Line2D, Polygon2D 或者 TextureProgressBar. 2D 中的自訂繪圖)時最為顯著。對於不支援消除鋸齒的方法,也可能出現鋸齒偽影。
在下面的範例中,你可以看到邊緣呈現出塊狀:
圖像縮放 2 倍並進行近鄰濾波,使混疊現象更加明顯。
為了解決這個問題,Godot 支援多種在 2D 算繪中啟用抗鋸齒的方法。
Line2D 和自訂繪圖中的反鋸齒屬性
這是推薦的方法,因為在大多數情況下,這種方法對性能的影響較小。
Line2D 具有 Antialiased (抗鋸齒)屬性,可以在屬性檢視器中啟用。此外, 2D 中的自訂繪圖 中的一些方法支援提供可選的 antialiased 參數,可以在呼叫函式時設定為 true。
這些方法不需要啟用MSAA,這使得它們的*基準*性能成本很低。換句話說,如果您在某個階段沒有繪製任何抗鋸齒幾何圖形,則不會產生永久性的額外性能消耗。
這些抗鋸齒方法的缺點是需要生成額外的幾何圖形。如果要生成每影格都需要更新的複雜 2D 幾何圖形,這可能會成為程式的性能瓶頸。此外,Polygon2D、TextureProgressBar 和幾種自訂繪圖方法都不具備抗鋸齒屬性。對於這些節點,可以使用 2D 多取樣抗鋸齒來代替。
多重取樣抗鋸齒(MSAA)
這僅適用於 Forward+ 以及 Mobile 算繪器,不適用於相容性算繪器。
在 2D 中啟用 MSAA 之前,必須先瞭解 MSAA 的操作物件。2D 中的 MSAA 遵循與 3D 中類似的限制。雖然它不會帶來任何模糊,但其應用範圍是有限的。2D MSAA 的主要應用包括:
幾何邊緣,如直線和多邊形繪圖。
精靈邊緣*僅限於與紋理邊緣接觸的像素*。這適用於線性篩選和最近鄰插值篩選。使用圖像透明度建立的精靈邊緣不受MSAA影響。
MSAA 的不足之處在於它只對邊緣進行操作。這是因為 MSAA 增加了 覆蓋取樣 的數量,而不是*顏色*取樣的數量。然而,由於顏色取樣的數量並沒有增加,片段著色器仍然只會為每個像素運作一次。因此,MSAA 不會影響 以下型別的鋸齒:
最近鄰篩選紋理中的混疊現象(像素藝術)。
自訂 2D 著色器造成的鋸齒。
使用 Light2D 時的鏡面反射鋸齒。
字型算繪中的鋸齒現象。
可以通過更改專案設定中 Rendering > Anti Aliasing > Quality > MSAA 2D 的設定值來啟用 MSAA。重要的是要更改 MSAA 2D 的設定值,而不是 MSAA 3D,因為它們是完全獨立的設定項。
左側為無抗鋸齒,右側為不同級別的 MSAA 抗鋸齒比較。左上角包含一個 Line2D 節點,右上角包含兩個 TextureProgressBar 節點。下方包含 8 個像素美術精靈,其中 4 個接觸到邊緣(綠色背景),另外 4 個未接觸邊緣(Godot 標誌):