Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

抗鋸齒:

也參考

Godot 也支援 2D 渲染中的抗鋸齒。 doc_2d_antialiasing 頁面對此進行了介紹。

前言

由於解析度有限,以 3D 渲染的場景可能會出現鋸齒現象。這些偽影通常表現為表面邊緣上的「階梯」效應(邊緣鋸齒)以及反射表面上的閃爍和/或閃爍(鏡面鋸齒)。

在下面的範例中,您可以注意到邊緣如何具有塊狀外觀。植被也在閃爍,盒子頂部的細線幾乎消失了:

圖像縮放 2 倍並進行近鄰濾波,使混疊現象更加明顯。

圖像縮放 2 倍並進行近鄰濾波,使混疊現象更加明顯。

為了解決這個問題,Godot 中可以使用各種抗鋸齒技術。以下詳細介紹這些內容。

也參考

除了這份說明文件,你可能也會想看看 Godot Demo 專案

多取樣抗鋸齒 (MSAA)。

這種技術是處理鋸齒的「歷史」方法。 MSAA 對幾何邊緣非常有效(尤其是在較高等級)。 MSAA 不會造成任何模糊。

MSAA 有 3 個等級:2×、4×、8×。較高的等級在抗鋸齒邊緣方面更有效,但要求也更高。在具有現代視覺效果的遊戲中,強烈建議堅持使用 2× 或 4× MSAA,因為 8× MSAA 通常要求過高。

MSAA 的缺點是它僅在邊緣上運作。這是因為 MSAA 增加了「覆蓋率」樣本的數量,但沒有增加「顏色」樣本的數量。然而,由於顏色樣本的數量沒有增加,片段著色器仍然只為每個像素運作一次。因此,MSAA 不會減少使用 Alpha Scissor 透明度模式(1 位元透明度)的材質的透明度鋸齒。 MSAA 對鏡面反射鋸齒也無效。

To mitigate aliasing on alpha scissor materials, alpha antialiasing (also called alpha to coverage) can be enabled on specific materials in the StandardMaterial3D or ORMMaterial3D properties. Alpha to coverage has a moderate performance cost, but it's effective at reducing aliasing on transparent materials without introducing any blurriness.

透過更改 渲染 > 抗鋸齒 > 品質 > MSAA 3D 設定的值,可以在專案設定中啟用 MSAA。更改 MSAA 3D 設定的值而不是 MSAA 2D 非常重要,因為這些是完全獨立的設定。

無抗鋸齒(左)與不同 MSAA 等級(右)之間的比較。請注意,此處未使用 alpha 抗鋸齒:

../../_images/antialiasing_msaa_2x1.webp ../../_images/antialiasing_msaa_4x1.webp ../../_images/antialiasing_msaa_8x1.webp

多取樣抗鋸齒 (MSAA)。

這僅適用於群集轉送後端,不適用於轉送行動或相容性後端。

時間抗鋸齒的工作原理是將先前渲染影格的結果「聚合」成單一高品質影格。這是一個連續的過程,透過每個畫面抖動場景中所有頂點的位置來運作。這種抖動是為了捕捉子像素細節,除非在極端情況下,否則應該是不明顯的。

此技術在現代遊戲中常用,因為它提供了針對鏡面反射鋸齒和其他著色器引起的偽影的最有效的抗鋸齒形式。 TAA 也全面支援透明度抗鋸齒。

在靜止場景中啟用 TAA 會產生少量模糊,但當相機移動時,這種模糊效果會變得更加明顯。 TAA 的另一個缺點是它可能會在移動物體後面呈現「重影」偽影。以更高的影格速率進行渲染將使 TAA 收斂得更快,從而使這些重影偽影變得不那麼明顯。

Temporal antialiasing can be enabled in the Project Settings by changing the value of the Rendering > Anti Aliasing > Quality > Use TAA setting.

無抗鋸齒(左)和 TAA(右)之間的比較:

../../_images/antialiasing_taa.webp

AMD FidelityFX Super Resolution 2.2 (FSR2)

Since Godot 4.2, there is built-in support for AMD FidelityFX Super Resolution 2.2. This is an upscaling method compatible with all recent GPUs from any vendor. FSR2 is normally designed to improve performance by lowering the internal 3D rendering resolution, then upscaling to the output resolution.

However, unlike FSR1, FSR2 also provides temporal antialiasing. This means FSR2 can be used at native resolution for high-quality antialiasing, with the input resolution being equal to the output resolution. In this situation, enabling FSR2 will actually decrease performance, but it will significantly improve rendering quality.

Using FSR2 at native resolution is more demanding than using TAA at native resolution, so its use is only recommended if you have significant GPU headroom. On the bright side, FSR2 provides better antialiasing coverage with less blurriness compared to TAA, especially in motion.

Comparison between no antialiasing (left) and FSR2 at native resolution (right):

../../_images/antialiasing_fsr2_native.webp

備註

By default, the FSR Sharpness project setting is set to 0.2 (higher values result in less sharpening). For the purposes of comparison, FSR sharpening has been disabled by setting it to 2.0 on the above screenshot.

多取樣抗鋸齒 (MSAA)。

這僅適用於 Clustered Forward 和 Forward Mobile 後端,不適用於相容性後端。

快速近似抗鋸齒是一種後製抗鋸齒解決方案。它的運作速度比任何其他抗鋸齒技術都要快,並且還支援抗鋸齒透明度。然而,由於它缺乏時間訊息,因此它對於防止鏡面反射鋸齒沒有多大作用。

這種技術有時仍會在手機遊戲中使用。然而,在桌面平台上,FXAA 通常已經過時,取而代之的是時間抗鋸齒,後者對於對抗鏡面鋸齒更為有效。儘管如此,對於擁有低階 GPU 的玩家來說,將 FXAA 作為遊戲內選項可能仍然值得。

FXAA 啟用後會產生適度的模糊(靜止時比 TAA 多,但相機移動時比 TAA 少)。

可以在專案設定中啟用 FXAA,方法是將 渲染 > 抗鋸齒 > 品質 > 螢幕空間 AA 設定的值變更為 FXAA

無抗鋸齒(左)和 FXAA(右)之間的比較:

../../_images/antialiasing_fxaa.webp

多取樣抗鋸齒 (MSAA)。

這僅適用於 Clustered Forward 和 Forward Mobile 後端,不適用於相容性後端。

超級取樣可以提供最高品質的抗鋸齒效果,但它也是最昂貴的。它的工作原理是多次對場景中的每個像素進行著色。這允許 SSAA 同時抗鋸齒邊緣、透明度*和*鏡面鋸齒,而不會引入潛在的重影偽影。

SSAA 的缺點是其「極高」的成本。這種成本通常會使 SSAA 難以用於遊戲目的,但您可能仍然會發現超級取樣對於離線渲染 <doc_creating_movies>` 很有用。

Supersample antialiasing is performed by increasing the Rendering > Scaling 3D > Scale advanced project setting above 1.0 while ensuring Rendering > Scaling 3D > Mode is set to Bilinear (the default). Since the scale factor is defined per-axis, a scale factor of 1.5 will result in 2.25× SSAA while a scale factor of 2.0 will result in 4× SSAA. Since Godot uses the hardware's own bilinear filtering to perform the downsampling, the result will look crisper at integer scale factors (namely, 2.0).

無抗鋸齒(左)與不同 SSAA 等級(右)之間的比較:

../../_images/antialiasing_ssaa_2.25x.webp ../../_images/antialiasing_ssaa_4x.webp

警告

超級取樣還具有很高的視訊 RAM 要求,因為它需要以目標解析度渲染,然後「縮小」到視窗大小。例如,使用 4× SSAA 顯示 3840×2160(4K 解析度)的專案需要以 7680×4320(8K 解析度)渲染場景,這是像素的 4 倍。

如果您使用高視窗大小(例如 4K),您可能會發現將解析度比例增加到超過特定值將導致由於 VRAM 耗盡而導致速度嚴重減慢(甚至當機)。

螢幕空間粗糙度限制器

這僅適用於 Clustered Forward 和 Forward Mobile 後端,不適用於相容性後端。

這不是邊緣抗鋸齒方法,而是減少 3D 鏡面反射鋸齒的一種方法。

螢幕空間粗糙度限制器最適合詳細的幾何形狀。雖然它對粗糙度圖渲染本身有影響,但其影響有限。

螢幕空間粗糙度限制器預設為啟用;它不需要任何手動設定。它對性能影響很小,因此如果您的專案不受鏡面鋸齒影響不大,請考慮停用它。

匯入時的紋理粗糙度限制器

與螢幕空間粗糙度限制器一樣,這不是邊緣抗鋸齒方法,而是減少 3D 鏡面反射鋸齒的一種方法。

透過指定法線貼圖來限制匯入的粗糙度,以用作限制粗糙度的指南。這是透過在檔案系統塢中選擇粗糙度圖來完成的,然後轉到匯入塢並將**粗糙度>模式**設定為儲存粗糙度圖的顏色通道(通常為**綠色**),然後設定材質法線貼圖的路徑。設定法線貼圖的路徑後,請記住點擊匯入底座底部的「重新匯入」。

由於此處理純粹在匯入時發生,因此沒有任何效能成本。但其視覺衝擊力有限。限制匯入時的粗糙度僅有助於減少紋理內的鏡面鋸齒,而無助於減少詳細網格上的幾何邊緣上發生的鋸齒。

GDScript是什麼?為什麼我要用它?

不存在「一刀切」的抗鋸齒技術。 由於抗鋸齒通常對 GPU 要求很高,或者可能會導致不必要的模糊,因此您需要新增一個設定以允許玩家禁用抗鋸齒。

For projects with a photorealistic art direction, TAA is generally the most suitable option. While TAA can introduce ghosting artifacts, there is no other technique that combats specular aliasing as well as TAA does. The screen-space roughness limiter helps a little, but is far less effective against specular aliasing overall. If you have spare GPU power, you can use FSR2 at native resolution for a better-looking form of temporal antialiasing compared to standard TAA.

對於反射面較少的專案(例如卡通藝術風格),MSAA 可以很好地發揮作用。如果避免模糊和時間偽影很重要(例如在競技遊戲中),MSAA 也是一個不錯的選擇。

在針對移動或集成顯卡等低端平臺時,FXAA 通常是唯一可行的選擇。2× MSAA 在某些情況下可能可用,但更高的 MSAA 級別不太可能在移動 GPU 上流暢運作。

Godot 允許同時使用多種抗鋸齒技術。這通常是不必要的,但在高端 GPU 上或在 非即時渲染 中可以提供更好的視覺效果。例如,為了在啟用 TAA 時讓移動邊緣看起來更好,還可以同時啟用 MSAA。