La rasterizzazione è il processo di conversione di una descrizione vettoriale di primitive tridimensionali (triangoli, linee, punti) in un insieme di pixel (frammenti) per la visualizzazione su uno schermo. Secondo Khronos Group, 2025, la rasterizzazione è una fase automatica (non programmabile) della pipeline grafica, situata tra il Vertex Shader e il Fragment Shader. Rasterization determina quali pixel dello schermo appartengono a ciascun triangolo e calcola gli attributi interpolati per ogni frammento.
Punti chiave
Rasterization è una fase della pipeline grafica che converte primitive geometriche (triangoli, linee) in un insieme di frammenti per l'elaborazione successiva da parte del Fragment Shader. I dati di input sono i vertici del triangolo in coordinate dello schermo e i loro attributi (colore, normali, UV). L'output è un insieme di frammenti con attributi interpolati.
A differenza degli shader programmabili (Vertex Shader e Fragment Shader), la rasterizzazione è una fase fissa (non programmabile). Lo sviluppatore non può modificare l'algoritmo di rasterizzazione, ma può controllarne i parametri: modalità di culling, larghezza della linea, offset di profondità (polygon offset) e multisampling.
Praticamente tutta la grafica moderna in tempo reale — giochi, UI, AR/VR — utilizza la rasterizzazione. È il metodo di rendering più performante, in grado di elaborare milioni di triangoli per fotogramma a 60 FPS. I rasterizzatori GPU sono ottimizzati per l'elaborazione parallela di migliaia di triangoli contemporaneamente attraverso blocchi ROP (Render Output Units) specializzati.
La rasterizzazione dei triangoli inizia dopo che il Vertex Shader ha trasformato i vertici in coordinate dello schermo. La GPU prende i tre vertici di un triangolo e determina quali pixel dello schermo si trovano all'interno di quel triangolo.
Il processo include tre passaggi sequenziali: determinazione del bounding box del triangolo in pixel — verifica di ogni pixel all'interno del bounding box per l'appartenenza al triangolo (edge function) — calcolo degli attributi interpolati (coordinate baricentriche) per ogni pixel coperto. La Edge function è un'equazione lineare che determina da quale lato del bordo del triangolo si trova un punto.
| Fase | Descrizione | Risultato |
|---|---|---|
| Clipping | Taglio dei triangoli fuori dai limiti del viewport | Primitive visibili |
| Trasformazione viewport | Conversione in coordinate dello schermo | Coordinate pixel |
| Triangle setup | Calcolo delle edge functions e del bounding box | Parametri di rasterizzazione |
| Fragment generation | Test di copertura e interpolazione | Frammenti + attributi |
Rasterization può essere implementata con vari algoritmi, ciascuno con i propri compromessi tra prestazioni e qualità. Le GPU moderne utilizzano una combinazione di diversi approcci.
L'algoritmo classico di rasterizzazione sviluppato per le prime GPU. Il triangolo viene elaborato riga per riga (scanline): per ogni riga dello schermo vengono determinati i punti di entrata e uscita del triangolo e tutti i pixel tra di essi vengono riempiti. Scanline conversion è efficiente per triangoli grandi ma richiede logica complessa per triangoli di forma arbitraria.
Le GPU moderne utilizzano il metodo di rasterizzazione half-space: per ogni lato del triangolo viene calcolata una edge function — un'equazione lineare positiva da un lato e negativa dall'altro. Un pixel appartiene al triangolo se tutte e tre le edge functions sono positive. Half-space rasterization è facilmente parallelizzabile e ben adatto alle architetture GPU SIMD.
Le GPU mobili (Qualcomm Adreno, ARM Mali) utilizzano il Tile-Based Rendering (TBR). Lo schermo viene diviso in piccoli tile (16x16 o 32x32 pixel) e la rasterizzazione viene eseguita per ogni tile separatamente. Questo minimizza gli accessi alla memoria memorizzando il framebuffer in memoria locale veloce (tile memory). Il TBR riduce il consumo energetico, fondamentale per i dispositivi mobili.
Rasterization e ray tracing sono due approcci fondamentalmente diversi per il rendering della grafica 3D. La rasterizzazione domina nelle applicazioni in tempo reale, mentre il ray tracing viene utilizzato nel rendering offline e sta gradualmente penetrando nel tempo reale (sulle GPU compatibili con RTX).
| Parametro | Rasterizzazione | Ray Tracing |
|---|---|---|
| Principio | Triangolo → frammenti | Raggio → intersezione con la scena |
| Velocità | Molto veloce (milioni di triangoli/fotogramma) | Lento (migliaia di raggi/fotogramma) |
| Qualità | Richiede tecniche aggiuntive (ombre, riflessi) | Ombre e riflessi fisicamente corretti |
| GPU mobili | Metodo standard | Supporto limitato (A17 Pro, Snapdragon Gen 3) |
| Consumo energetico | Basso | Alto |
La rasterizzazione introduce il problema dell'aliasing — bordi frastagliati (jaggies) ai confini dei triangoli. Ciò accade perché un pixel è discreto e non può essere parzialmente coperto da un triangolo. Per combattere l'aliasing si utilizza il multisampling (MSAA).
MSAA (Multisample Anti-Aliasing) esegue la rasterizzazione con una frequenza di campionamento aumentata (2x, 4x, 8x). Invece di un campione per pixel, vengono utilizzati più sottocampioni, ciascuno testato per la copertura del triangolo. MSAA 4x elabora 4 sottocampioni per pixel, fornendo un notevole smussamento dei bordi senza aumentare completamente la risoluzione di rendering.
A differenza di MSAA, i metodi di anti-aliasing di post-elaborazione (FXAA, SMAA, TAA) funzionano dopo la rasterizzazione analizzando l'immagine finale. FXAA (Fast Approximate Anti-Aliasing) rileva i bordi dell'immagine e applica la sfocatura per smussare, funzionando significativamente più velocemente di MSAA ma con qualità inferiore.
Rasterization sulle GPU moderne viene eseguita da blocchi hardware specializzati — ROP (Render Output Units). Il numero di ROP influisce direttamente sul fill rate — il numero di pixel che la GPU può elaborare al secondo.
Per le GPU mobili (Tile-Based Rendering), i fattori critici includono: minimizzare l'overdraw tramite early-Z rejection, utilizzare il back-face culling per rimuovere i triangoli invisibili e l'occlusion culling per scartare i triangoli completamente coperti da altri oggetti.
Domande frequenti
La rasterizzazione è il processo di trasformazione dei triangoli in pixel sullo schermo. La GPU prende un triangolo tridimensionale, determina quali pixel dello schermo copre e li passa al Fragment Shader per colorarli.
La rasterizzazione proietta i triangoli sullo schermo e determina la copertura dei pixel (molto veloce). Ray tracing lancia raggi dalla camera e verifica l'intersezione con la geometria (fisicamente più preciso ma significativamente più lento).
Durante la rasterizzazione, un pixel appartiene interamente a un triangolo o no — da qui i bordi frastagliati (aliasing). MSAA smussa i bordi utilizzando più sottocampioni per pixel, mentre FXAA applica un filtro all'immagine finale.
No, la rasterizzazione è una fase fissa della pipeline grafica. Lo sviluppatore non può modificare l'algoritmo, ma può controllare le impostazioni: culling, polygon offset, modalità di rasterizzazione (punti, linee, triangoli) e parametri MSAA.
Tile-Based Rendering (TBR) divide lo schermo in tile e li elabora in memoria locale veloce anziché in VRAM globale. Questo riduce radicalmente il consumo energetico e la larghezza di banda, fondamentale per i dispositivi mobili a batteria.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche