Cos'è l'anti-aliasing e come impatta sulle prestazioni durante il gioco

L'anti-aliasing è una tecnica che richiede tanto carico computazionale sulla scheda grafica. Ma cos'è di preciso, e perché occupa così tante risorse?

Cos'è l'anti-aliasing e come impatta sulle prestazioni durante il gioco
Articolo a cura di

Dopo la nostra guida sul filtro anisotropico, passiamo ora ad analizzare un altro importante filtro per la resa grafica dei videogiochi, l'anti-aliasing. Si tratta di un effetto che spesso viene limitato per salvaguardare le prestazioni, in quanto soprattutto nelle sue varianti più efficaci impatta in modo marcato sulle prestazioni dei motori grafici. Il termine aliasing non è un vocabolo prettamente legato all'ambito ludico, ma rientra in una vasta tipologia di argomenti, dalla grafica, all'audio, alla trasmissione dei segnali digitali. L'aliasing, in generale, è un difetto che si presenta quando si effettua un passaggio di un segnale da analogico a digitale, ovvero quando si usa un campionamento con frequenza insufficiente: per le immagini questo si traduce nel voler rappresentare una determinata immagine con un numero di pixel insufficiente. Vediamo ora come si affronta il problema nel mondo della grafica 3D.

Come risolvere l'aliasing? L'anti-aliasing!

Per spiegare cos'è l'anti-aliasing e come impatta sulla qualità di un'immagine, partiamo da una condizione ideale rappresentata dalla prima figura di questo capitolo, dove la linea diagonale appare perfettamente definita e non presenta alcun problema di visualizzazione. Prendendo sempre a riferimento la stessa immagine, supponiamo che ogni quadrato presente nella griglia sia un pixel. La linea tracciata appare perfettamente dritta, ed alcune sue porzioni occupano solo parzialmente i pixel che attraversano. Come sappiamo però un pixel non è ulteriormente divisibile, quindi la linea diagonale non può che occupare solo una porzione di pixel. Per questo motivo è fisicamente impossibile riuscire a riprodurre digitalmente una diagonale perfetta come nell'immagine di esempio, con quel numero limitato di pixel.
Quello che realmente accade in un display durante la riproduzione del suddetto esempio possiamo osservarlo nella seconda immagine, in cui la diagonale mostra un'evidente scalettatura, questo difetto ovviamente è l'aliasing. Come risolvere questo problema? La soluzione più ovvia sarebbe aumentare il numero di pixel utilizzati per rappresentare la linea (quindi aumentare la definizione dell'immagine), così facendo ovviamente aumentano i calcoli necessari per rappresentare l'immagine. Una soluzione più avanzata che permette di mantenere lo stesso numero di pixel, è di utilizzare colori diversi per le zone che rappresentato la varie parti della linea diagonale. Anziché usare solo pixel neri, si sfrutta una scala di toni del grigio, via via più chiari per i pixel più esterni. L'idea è quella di realizzare una sorta di sfumatura, che va a rendere più dolci i contorni che stiamo cercando di rappresentare. L'anti-aliasing non fa altro che cercare di "sfumare" i contorni di un oggetto (le zone più a rischio aliasing) rendendoli più morbidi e quindi meno scalettati.

Il Super Sampling e il Multisampling

Adesso che conosciamo cos'è l'anti-aliasing, l'obiettivo è quello di capire come esso viene applicato nella pratica. Per tale scopo esistono molti algoritmi più o meno efficaci a seconda del tipo di immagine da rappresentare.
Uno dei metodi più semplici, ma anche pesanti per l'hardware, è il supersampling. Questa tecnica renderizza l'immagine ad una risoluzione superiore a quella nativa, e la riscala alla risoluzione originale (downscale) solo dopo aver effettuato delle specifiche operazioni.
Il supersampling ha bisogno di un numero di campioni predeterminato, che ipotizziamo ad esempio essere 4x. Supponiamo di isolare i pixel che compongono i bordi degli oggetti e, per ognuno di essi, ipotizziamo di quadruplicare la loro risoluzione. Effettuando il supersampling 4x avremmo quattro sotto pixel (subpixel) per ognuno dei pixel dei bordi degli oggetti presenti nella scena. Una volta calcolati i nuovi pixel, si applica un'operazione che fa una media dei 4 subpixel, fino ad ottenere un solo pixel finale. Se per esempio abbiamo due subpixel bianchi, uno marroncino e un altro giallo, la media colore è una tonalità oro e di conseguenza il pixel ottenuto prende quel colore. In questo modo si riescono a sfumare i bordi degli oggetti, "fondendoli" con l'ambiente circostante. Il supersampling offre una qualità di immagine molto elevata, ma ha il difetto di essere molto dispendioso in termini di risorse di sistema.
Come già accennato il supersampling potrebbe essere effettuato sull'intera immagine, oppure solo sulle zone più a rischio aliasing (i contorni degli oggetti, le linee diagonali, gli elementi più piccoli). Ovviamente con questa tecnica si risparmia un buon numero di pixel da calcolare, ma si deve disporre di un ulteriore algoritmo di "edge detection", cioè di analisi delle spigolature, che decida quali pixel ricalcolare con il supersampling e quali no. La qualità del risultato finale è legata a doppio filo alla capacità dell'algoritmo di determinare correttamente tutte le zone a rischio aliasing.

Oltre il supersampling: il multisampling

Per ridurre il dispendio computazionale entra quindi in gioco il multisampling. Quest'ultimo è una versione più leggera del supersampling e calcola la media colore solo dove necessaria. Per esempio, nel caso di due pixel rossi contigui, il multisampling non effettua operazioni, perché il risultato continuerebbe ad essere un colore rosso.

L'algoritmo del multisampling ha quindi la capacità di individuare i pixel di colore uguale, scartandoli dal calcolo, risparmiando preziose risorse. Questa virtù non è invece propria del supersampling, che effettua invece la media non avendo cura di individuare i casi in cui ciò non è necessario.
Supersampling e multisampling tuttavia non sono le uniche tecniche di anti-aliasing disponibili, ne esistono infatti altre in grado di fornire un rapporto qualità di immagine/prestazioni differente, ma tratteremo l'argomento nella seconda parte di questa guida.

L'anti-aliasing nei videogiochi

A questo punto siamo in grado di passare alla pratica, e di vedere come l'anti-aliasing lavora con i videogiochi. Prendiamo come riferimento lo screenshot qui sopra. Consigliamo di aprirlo a pieno schermo e di zoomare sui singoli esempi per osservare le differenze. Focalizziamo la nostra attenzione principalmente sulla struttura di metallo distrutta sulla sinistra, sui contorni degli alberi e sulle aste delle bandiere in fondo, sulla destra: sono gli oggetti che, in questa determinata scena, soffrono di più di aliasing. Senza il filtro anti-aliasing, notiamo come i bordi siano fortemente scalettati, anzitutto quelli della struttura in metallo e quello dell'asta più a destra. Questo elemento permette di fare un'osservazione importante: se i bordi di un oggetto si discostano molto dalla posizione verticale o dalla posizione orizzontale allora c'è più aliasing. Detto in altri termini, più l'inclinazione è vicina ai 45° più la mancanza del filtro anti-aliasing si fa notare. A supportare questa affermazione possiamo osservare la bandiera sulla destra dell'immagine: la sua angolazione è bassa, essendo quasi in verticale, mostrando un aliasing meno marcato.
Applicando il supersampling 2x, notiamo un netto miglioramento nella qualità d'immagine. I bordi sono molto più dolci e gli alberi sono generalmente più sfocati e meglio rappresentati. Nel caso della vegetazione, l'effetto è quello di netta sfocatura in quanto le foglie sono davvero molto fitte e, di conseguenza, i contorni da ammorbidire sono molti di più. Purtroppo questa tecnica, come abbiamo spiegato, necessita di più risorse computazionali rispetto al multisampling.
Osserviamo ora l'esempio con il multisampling 4x. Rispetto all'esempio senza Anti Aliasing il guadagno qualitativo è praticamente pari a quello ottenuto con il supersampling, con la differenza che qui le risorse impiegate sono minori. Ecco perché le differenti tecniche di Anti Aliasing assumono un ruolo fondamentale nell'applicazione di questo filtro, sempre alla ricerca del giusto compromesso tra qualità e prestazioni.

Filtro anti-aliasing Il filtro anti-aliasing è uno strumento importantissimo per consentire ai motori grafici di rappresentare quanto più fedelmente possibile gli ambienti di gioco. Quando infatti l’aliasing è marcato l’impatto visivo perde parecchio, con le scalettature dei contorni che - soprattutto ad una distanza ravvicinata - possono infastidire molto. Di contro, però, il filtro anti-aliasing impiega molte risorse, ma fortunatamente esistono tecniche che rendono la sua applicazione meno onerosa per l'hardware. Proprio le differenze tra le varie tipologie di filtri saranno l'oggetto della nostra prossima guida sul mondo della grafica nei videogiochi.