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.

Antialiasing 2D

Vedi anche

Godot supporta anche l'antialiasing nel rendering 3D. Questo argomento è trattato nella pagina Antialiasing 3D.

Introduzione

A causa della loro risoluzione limitata, le scene renderizzate in 2D possono presentare artefatti di aliasing. Questi artefatti si manifestano solitamente sotto forma di un effetto "a scalini" sui bordi della geometria e sono più evidenti quando si utilizzano nodi come Line2D, Polygon2D o TextureProgressBar. Anche Disegno personalizzato in 2D può presentare artefatti di aliasing per i metodi che non supportano l'antialiasing.

Nell'esempio seguente, si può notare come i bordi abbiano un aspetto pixellato:

L'immagine è ingrandita di 2 volte con il filtro vicino più ravvicinato per rendere più evidente l'aliasing.

L'immagine è ingrandita di 2 volte con il filtro vicino più ravvicinato per rendere più evidente l'aliasing.

Per rimediare questo, Godot supporta diversi metodi per abilitare l'antialiasing nel rendering in 2D.

Proprietà antialiasing in Line2D e disegno personalizzato

Questo è il metodo raccomandato, poiché ha un impatto minore sulle prestazioni in gran parte dei casi.

Line2D ha una proprietà Antialiased che è possibile abilitare nell'ispettore. Inoltre, diversi metodi per Disegno personalizzato in 2D supportano il parametro facoltativo antialiased, che si può impostare su true quando si richiama la funzione.

Questi metodi non richiedono che MSAA sia abilitato, il che riduce il loro costo di prestazioni di base. In altre parole, non vi è alcun costo aggiuntivo permanente se nessuna geometria viene disegnata con antialiasing in un certo momento.

Lo svantaggio di questi metodi di antialiasing è che funzionano generando geometria aggiuntiva. Se si genera una geometria 2D complessa che è aggiornata a ogni frame, ciò potrebbe essere un collo di bottiglia. Inoltre, Polygon2D, TextureProgressBar e diversi metodi di disegno personalizzati non hanno di una proprietà di antialiasing. Per questi nodi, si può invece utilizzare l'antialiasing multicampione 2D.

Antialiasing multi-campione (MSAA)

Questo è disponibile solo nei renderer Forward+ e Mobile, non nel renderer Compatibilità.

Prima di abilitare l'MSAA in 2D, è importante capire su cosa opererà. L'MSAA in 2D segue restrizioni simili a quelle del 3D. Sebbene non introduca alcuna sfocatura, il suo ambito di applicazione è limitato. Le principali applicazioni dell'MSAA 2D sono:

  • Bordi di geometrie, come il disegno di linee e poligoni.

  • Bordi degli sprite solo per i pixel che toccano uno dei bordi della texture. Questo funziona sia con il filtro lineare sia con il filtro vicino più ravvicinato. I bordi degli sprite creati usando la trasparenza sull'immagine non sono influenzati dall'MSAA.

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, dato che il numero di campioni di colore non è aumentato, gli shader di frammento sono comunque eseguiti per ogni pixel una sola volta. Pertanto, l'MSAA non influirà sui seguenti tipi di aliasing in alcun modo:

  • Aliasing dentro texture filtrate con vicino più ravvicinato (pixel art).

  • Aliasing causato da shader 2D personalizzati.

  • Aliasing speculare quando si utilizza un Light2D.

  • Aliasing nel rendering dei font.

È possibile abilitare l'MSAA nelle Impostazioni del progetto cambiando il valore dell'impostazione Rendering > Anti Aliasing > Quality > MSAA 2D. È importante cambiare il valore dell'impostazione MSAA 2D e non il valore di MSAA 3D, poiché sono impostazioni completamente separate.

Confronto tra nessun antialiasing (a sinistra) e vari livelli di MSAA (a destra). L'angolo superiore sinistro contiene un nodo Line2D, l'angolo superiore destro contiene 2 nodi TextureProgressBar. In basso sono presenti 8 sprite di pixel art, 4 dei quali toccano i bordi (sfondo verde) e 4 non toccano i bordi (logo di Godot):

../../_images/antialiasing_msaa_2x.webp ../../_images/antialiasing_msaa_4x.webp ../../_images/antialiasing_msaa_8x.webp