RASTERIZATIONE
osservazoni importanti sugli algoritmi di rendering in generale
- il triangolo è la principale primitiva di rendering supportata (per entrambe le categorie di algoritmi di rendering)
RASTERIZATION (attenzione: si riferisce all’algoritmo)
Rasterizzare un triangolo: che significa?
- Immagina di avere un triangolo (primitiva) disegnato su uno schermo fatto a griglia, dove ogni quadratino NON è ancora un pixel pk nn c’è ancora il rendering
- Devi capire riempire quel triangolo di attributi, decidendo quali pixel accendere.
🔧 Come funziona?
- Il triangolo è definito da 3 vertici (con coordinate e magari anche colore, materiale ecc.).
- Il tuo obiettivo è capire quali pixel dell'immagine cadono dentro al triangolo.
FRAMMENTO ≠ PIXEL
Un frammento è un pixel candidato, non ancora informato ed in spazio schermo:
- il frammento è solo un punto colorato
- Deve inserire tutti i gli attributi necessari per calcolare il colore finale del pixel:
- Normale della superficie
- Colore di base
- Materiale
- Coordinate texture
- …tutti ottenuti interpolando i valori dei vertici del triangolo.
💡 In pratica, per ogni pixel dentro il triangolo, crei un frammento che poi verrà “colorato” nel passaggio successivo (il fragment shader, se sei in grafica real-time).
🖼️ Differenza tra frammento e pixel:
- Il frammento è un punto “candidato” con tante informazioni,
- Il pixel è il punto dell’immagine finale, che prenderà il colore del frammento dopo tutti i calcoli (illuminazione, texture, trasparenza…).
📌 In sintesi:
- Rasterizzare un triangolo significa riempirlo di frammenti, uno per ogni pixel dentro di lui.
- Ogni frammento poi sarà elaborato per ottenere un pixel dell'immagine finale.
RASTERIZATION IN 3 STEP (della tri-mesh)
1. Transform (passaggio da spazio 2d a spazio 3d)
🔹 Converte le coordinate del modello 3D in coordinate 2D sullo schermo
🔹 Applica rotazioni, traslazioni e proiezioni (camera)
2. Rasterization (selezione frammenti)
- immergo il triangolo proiettato in apazio 2d in una griglia
- seleziono i quadrati da informare = frammenti (pixel candidati)
3. Lighting o fragment processing (informo i frammenti)
🔹 Calcola come la luce colpisce ogni frammento (sfruttando le informazioni in esso contenute)
🔹 Produce il colore finale (RGB) per ciascun pixel…e tante altre informazione
📌 Obiettivo: ottenere un'immagine visivamente realistica
- fase per vertice oppure trasformazione
- rasterizzazione
- fase per frammeto oppure lightning
CONSIDERAZIONI SUL RENDERING
Parallelismo esterno
Le fasi della pipeline (Transform → Rasterization → Lighting) avvengono una dopo l’altra, ma:
- Mentre elabori una fase per un oggetto, le altre fasi possono già lavorare su oggetti diversi
Esempio:
- Stai trasformando il triangolo A
- Rasterizzi il triangolo B (trasformato prima)
- Calcoli l'illuminazione del triangolo C (rasterizzato prima ancora)
Parallelismo Interno
Ogni fase lavora su più elementi contemporaneamente:
- Più vertici alla volta
- Più triangoli
- Più frammenti
Velocità Limitata dalla Fase più Lenta
Il sistema procede alla velocità della fase più lenta, detta collo di bottiglia
ci possono essere 2 tipi di Collo di Bottiglia | Significato |
trasformazione → Transform-limited | La GPU fatica a elaborare le trasformazioni dei vertici (es. mesh troppo dettagliata) |
lighting → Fill-limited | La GPU non riesce a colorare i pixel abbastanza velocemente (es. immagine troppo grande) |
CONFRONTO TRA I 2 ALGORITMI
PRIMITIVE
- rasterization lavora su 3 primitive:
- punti
- segmenti
- triangoli
- ray-racing: qualsiasi primitiva
PARALELIZZAZIONE
- sono entrambi algoritmi parallelizzabili
tipici scenari di applicazione
RAY TRACING:
- lento
- effetti visuali complessi → realismo (ombre, riflessioni speculari, rifrazioni, riflessiioni multiple…)
RASTERIZATION:
- veloce → perfetto per il rendering real-time e approssimato
- usato nel cinema per fare le preview (quindi nn per creare il prodotto finale)
SFUMATURE TRA I 2 ALGORITMI
- il real time ray tracing esiste e sta diventando comune grazie a
- parallelismo
- ottimizzazione del numero di primitive
- varianti della rasterization (in base al tipo di risultato che si vuole)