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...
Antialiasing 3D
Vedi anche
Godot supporta anche l'antialiasing nel rendering 2D. Questo è trattato nella pagina Antialiasing 2D.
Introduzione
A causa della loro risoluzione limitata, le scene renderizzate in 3D possono presentare artefatti di aliasing. Questi artefatti si manifestano comunemente come un effetto "a gradini" sui bordi delle superfici (aliasing dei bordi) e come sfarfallio e/o scintillii sulle superfici riflettenti (aliasing speculare).
In the example below, you can notice how edges have a blocky appearance. The vegetation is also flickering in and out, and thin lines on top of the box have almost disappeared:
L'immagine è ingrandita di 2 volte con il filtro vicino più ravvicinato per rendere più evidente l'aliasing.
To combat this, various antialiasing techniques can be used in Godot. These are detailed below.
Vedi anche
È possibile confrontare gli algoritmi di antialiasing in azione attraverso il progetto demo 3D Antialiasing.
Antialiasing multi-campione (MSAA)
Questo è disponibile in tutti i renderer.
Questa tecnica è il metodo "tradizionale" per gestire l'aliasing. L'MSAA è molto efficace sui bordi delle geometrie (soprattutto ai livelli più elevati). L'MSAA non introduce alcuna sfocatura.
L'MSAA è disponibile in 3 livelli: 2×, 4× e 8×. I livelli più alti sono più efficaci nell'antialiasing dei bordi, ma sono significativamente più costosi per le prestazioni. Nei giochi con grafica moderna, si consiglia vivamente di utilizzare l'MSAA 2× o 4×, poiché l'MSAA 8× è solitamente troppo costoso.
Lo svantaggio dell'MSAA è che agisce solo sui bordi. Questo perché l'MSAA aumenta il numero di campioni di copertura, ma non il numero di campioni di colore. Tuttavia, poiché il numero di campioni di colore non aumenta, gli shader di frammento si eseguono comunque per ogni pixel una sola volta. Pertanto, l'MSAA non riduce l'aliasing della trasparenza per i materiali che utilizzano la modalità di trasparenza Alpha Scissor (trasparenza a 1 bit). L'MSAA è inoltre inefficace sull'aliasing speculare.
Per attenuare l'aliasing sui materiali con trasparenza alfa, è possibile abilitare l'antialiasing alfa (anche detto alfa a copertura) su materiali specifici nelle proprietà di StandardMaterial3D o ORMMaterial3D. L'alfa a copertura ha un impatto moderato sulle prestazioni, ma è efficace nel ridurre l'aliasing sui materiali trasparenti senza introdurre alcuna sfocatura.
To make specular aliasing less noticeable, use the Screen-space roughness limiter, which is enabled by default.
È possibile abilitare l'MSAA nelle Impostazioni del progetto cambiando il valore dell'impostazione Rendering > Anti Aliasing > Quality > MSAA 3D. È importante cambiare il valore dell'impostazione MSAA 3D e non MSAA 2D, poiché sono impostazioni totalmente separate.
Confronto tra nessun antialiasing (a sinistra) e vari livelli di MSAA (a destra). Da notare che l'antialiasing alfa non è utilizzato qui:
Antialiasing temporale (TAA)
Disponibile solo nel renderer Forward+, non nei renderer Mobile o Compatibilità.
L'antialiasing temporale funziona convergendo il risultato dei frame precedentemente renderizzati in un singolo frame di alta qualità. È un processo continuo che funziona tremolando leggermente la posizione di tutti i vertici della scena a ogni frame. Il tremolio serve a catturare dettagli tra i sub-pixel e dovrebbe essere impercettibile, tranne in casi estremi.
Questa tecnica è comunemente utilizzata nei giochi moderni, poiché offre la forma più efficace di antialiasing contro l'aliasing speculare e altri artefatti indotti dagli shader. TAA offre inoltre il supporto completo per l'antialiasing della trasparenza.
Il TAA introduce una leggera sfocatura quando è abilitato nelle scene statiche, ma questo effetto di sfocatura diventa più pronunciato quando la telecamera è in movimento. Un altro svantaggio del TAA è che può presentare artefatti fantasma dietro gli oggetti in movimento. Renderizzare a una frequenza più alta consentirà al TAA di convergere più rapidamente, rendendo quindi questi artefatti fantasma meno evidenti.
È possibile abilitare l'antialiasing temporale nelle Impostazioni del progetto cambiando il valore dell'impostazione Rendering > Anti Aliasing > Quality > TAA.
Confronto tra nessun antialiasing (a sinistra) e TAA (a destra):
AMD FidelityFX Super Resolution 2.2 (FSR2)
Disponibile solo nel renderer Forward+, non nei renderer Mobile o Compatibilità.
A partire da Godot 4.2, è integrato il supporto per AMD FidelityFX Super Resolution 2.2. Questo è un metodo di upscaling compatibile con tutte le GPU recenti di qualsiasi produttore. FSR2 è generalmente progettato per migliorare le prestazioni riducendo la risoluzione interna di rendering 3D, poi effettuando l'upscaling alla risoluzione di output.
Tuttavia, a differenza di FSR1, FSR2 offre anche l'antialiasing temporale. Ciò significa che è possibile utilizzare l'FSR2 alla risoluzione nativa per un antialiasing di alta qualità, con la risoluzione di input uguale alla risoluzione di output. In questa situazione, abilitare l'FSR2 in realtà ridurrà le prestazioni, ma migliorerà notevolmente la qualità del rendering.
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.
Confronto tra nessun antialiasing (a sinistra) e FSR2 a risoluzione nativa (a destra):
Nota
Normalmente, l'impostazione del progetto FSR Sharpness è impostata su 0.2 (valori più alti risulteranno in meno nitidezza). Per motivi di confronto, la nitidezza dell'FSR è stata disabilitata impostandola su 2.0 nello screenshot precedente.
Antialiasing approssimativo rapido (FXAA)
Questo è disponibile solo nei renderer Forward+ e Mobile, non nel renderer Compatibilità.
L'antialiasing approssimato veloce è una soluzione di antialiasing di post-elaborazione. È più veloce di qualsiasi altra tecnica di antialiasing e supporta anche l'antialiasing della trasparenza. Tuttavia, poiché non ha informazioni temporali, non farà molto contro l'aliasing speculare.
Questa tecnica è ancora talvolta utilizzata nei giochi per dispositivi mobili. Tuttavia, sulle piattaforme desktop, l'FXAA è generalmente diventato fuori moda, a favore dell'antialiasing temporale, che è molto più efficace contro l'aliasing speculare. Ciononostante, rendere disponibile l'FXAA come opzione di gioco potrebbe comunque valerne la pena per i giocatori con GPU di fascia bassa.
L'FXAA introduce una moderata quantità di sfocatura quando è abilitato (più del TAA quando l'immagine è statica, ma meno del TAA quando la telecamera è in movimento).
È possibile abilitare l'FXAA nelle Impostazioni del progetto cambiando il valore dell'impostazione Rendering > Anti Aliasing > Quality > Screen Space AA su FXAA.
Confronto tra niente antialiasing (a sinistra) e FXAA (a destra):
Antialiasing morfologico subpixel (SMAA 1x)
Questo è disponibile solo nei renderer Forward+ e Mobile, non nel renderer Compatibilità.
L'antialiasing morfologico sub-pixel (SMAA) è una soluzione di antialiasing applicata in post-elaborazione. È leggermente più lento dell'FXAA, ma produce meno sfocature. È molto utile quando la risoluzione dello schermo è pari o inferiore a 1080p. Proprio come l'FXAA, l'SMAA 1x non ha informazioni temporali e pertanto non farà molto contro l'aliasing speculare.
Usa l'SMAA 1x Se ci si può permettere l'MSAA, ma si ritiene che l'FXAA sia troppo sfocato.
Combinarlo con TAA, o anche con FSR2, per massimizzare l'antialiasing a un impatto più elevato sulla GPU e aggiungere un po' di sfocatura. Questo è particolarmente utile nelle scene in rapido movimento o subito dopo un cambio di telecamera, soprattutto a FPS bassi.
È possibile abilitare l'SMAA 1x nelle Impostazioni del progetto cambiando il valore dell'impostazione Rendering > Anti Aliasing > Quality > Screen Space AA su SMAA.
Confronto tra niente antialiasing (a sinistra) e SMAA 1x (a destra):
Antialiasing supercampione (SSAA)
Questo è disponibile in tutti i renderer.
Il sovracampionamento fornisce la massima qualità di antialiasing possibile, ma è anche il più costoso. Funziona ombreggiando più volte ogni pixel della scena. Questo consente all'SSAA di applicare contemporaneamente l'antialiasing ai bordi, alla trasparenza e all'aliasing speculare, senza introdurre eventuali artefatti di ghosting.
Lo svantaggio dell'SSAA è il suo impatto estremamente elevato. Questo impatto rende generalmente l'SSAA difficile da usare per i videogiochi, ma il sovracampionamento potrebbe comunque essere utile per il rendering offline.
L'antialiasing con sovracampionamento si ottiene aumentando l'impostazione avanzata del progetto Rendering > Scaling 3D > Scale oltre 1.0, assicurandosi che Rendering > Scaling 3D > Mode sia impostato su Bilinear (il valore predefinito). Poiché il fattore di scala è definito per asse, un fattore di scala di 1.5 risulterà in un SSAA 2.25× mentre un fattore di scala di 2.0 risulterà in un SSAA 4×. Poiché Godot utilizza il filtro bilineare dell'hardware per effettuare il sottocampionamento, il risultato apparirà più nitido con fattori interi di scala (ovvero, 2.0).
Confronto tra nessun antialiasing (a sinistra) e vari livelli di SSAA (a destra):
Avvertimento
Il sovracampionamento richiede anche un'elevata quantità di RAM video, poiché deve renderizzare alla risoluzione di destinazione e poi ridimensionarla alle dimensioni della finestra. Ad esempio, visualizzare un progetto a 3840×2160 (risoluzione 4K) con SSAA 4× richiederà di renderizzare la scena a 7680×4320 (risoluzione 8K), ovvero 4 volte più pixel.
If you are using a high window size such as 4K, you may find that increasing the resolution scale past a certain value will cause a heavy slowdown (or even a crash) due to running out of VRAM.
Screen-space roughness limiter
Questo è disponibile solo nei renderer Forward+ e Mobile, non nel renderer Compatibilità.
Questo non è un metodo di antialiasing dei bordi, ma un modo per ridurre l'aliasing speculare in 3D.
Il limitatore di rugosità nello spazio dello schermo funziona al meglio su geometrie dettagliate. Sebbene influisca sul rendering della mappa di rugosità stessa, il suo impatto è limitato lì.
The screen-space roughness limiter is enabled by default; it doesn't require any manual setup. It has a small performance impact, so consider disabling it if your project isn't affected by specular aliasing much. You can disable it with the Rendering > Quality > Screen Space Filters > Screen Space Roughness Limiter project setting.
Texture roughness limiter on import
Like the screen-space roughness limiter, this is not an edge antialiasing method, but it is a way of reducing specular aliasing in 3D.
Roughness limiting on import works by specifying a normal map to use as a guide for limiting roughness. This is done by selecting the roughness map in the FileSystem dock, then going to the Import dock and setting Roughness > Mode to the color channel the roughness map is stored in (typically Green), then setting the path to the material's normal map. Remember to click Reimport at the bottom of the Import dock after setting the path to the normal map.
Since this processing occurs purely on import, it has no performance cost whatsoever. However, its visual impact is limited. Limiting roughness on import only helps reduce specular aliasing within textures, not the aliasing that occurs on geometry edges on detailed meshes.
Quale tecnica di antialiasing dovrei usare?
There is no "one size fits all" antialiasing technique. Since antialiasing is often demanding on the GPU or can introduce unwanted blurriness, you'll want to add a setting to allow players to disable antialiasing.
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.
For projects with a low amount of reflective surfaces (such as a cartoon artstyle), MSAA can work well. MSAA is also a good option if avoiding blurriness and temporal artifacts is important, such as in competitive games.
When targeting low-end platforms such as mobile or integrated graphics, FXAA is usually the only viable option. 2× MSAA may be usable in some circumstances, but higher MSAA levels are unlikely to run smoothly on mobile GPUs.
Godot allows using multiple antialiasing techniques at the same time. This is usually unnecessary, but it can provide better visuals on high-end GPUs or for non-real-time rendering. For example, to make moving edges look better when TAA is enabled, you can also enable MSAA at the same time.
Confronto tra antialiasing
Funzionalità |
MSAA |
TAA |
FSR2 |
FXAA |
SMAA 1x |
SSAA |
SSRL |
|---|---|---|---|---|---|---|---|
Antialiasing sui bordi |
🟢 Sì |
🟢 Sì |
🟢 Sì |
🟢 Sì |
🟢 Sì |
🟢 Sì |
🔴 No |
Antialiasing speculare |
🟡 In parte |
🟢 Sì |
🟢 Sì |
🟡 In parte |
🟡 In parte |
🟢 Sì |
🟢 Sì |
Antialiasing di trasparenza |
🟡 In parte [1] |
🟢 Si [2] |
🟢 Si [2] |
🟢 Sì |
🟢 Sì |
🟢 Sì |
🔴 No |
Sfocatura aggiunta |
🟢 Nessuno |
🟡 In parte |
🟡 In parte |
🟡 In parte |
🟢 Basso |
🟡 In parte [3] |
🟢 Nessuno |
Artefatti di ghosting |
🟢 Nessuno |
🔴 Si |
🔴 Si |
🟢 Nessuno |
🟢 Nessuno |
🟢 Nessuno |
🟢 Nessuno |
Impatto sulle prestazioni |
🟡 Medio |
🟡 Medio |
🔴 Alto |
🟢 Molto basso |
🟢 Basso |
🔴 Molto alto |
🟢 Basso |
Forward+ |
✔️ Si |
✔️ Si |
✔️ Si |
✔️ Si |
✔️ Si |
✔️ Si |
✔️ Si |
Mobile |
✔️ Si |
❌ No |
❌ No |
✔️ Si |
✔️ Si |
✔️ Si |
✔️ Si |
Compatibilità |
✔️ Si |
❌ No |
❌ No |
❌ No |
❌ No |
✔️ Si |
❌ No |