GOAL = OCCLUSIONE
Gli oggetti più vicini dal POV devono coprire (“occludere”) quelli più lontani
RAGIONAMENTO
- in parole povere l’ultima primitiva che sovrascrivo(ovvero che proietto sullo schermo) è quella più front ground e devo quindi rasterizzare nell’ ordine corretto
ALGORITMO DEL PITTORE
basta rasterizzare le primitive nell'ordine giusto ordine detto “back-to-front”
PROBLEMI
- La coordianta z in spazio vista non è nota a priori e l’algoritmo non è adatto all’hardware
- Esiste sempre un ordine corretto? NO
- KEY WORDS: costo algoritmico → deve rasterizzare primitive che nemmeno saranno usate (gran maggioranza), una primitiva ha molteplici z, la sovrascrizione complica il rendering
In particolare in vista del costo computazionale, si è trovato un modo per conoscere prima del lightning, quali triangoli/frammenti non vale “informare”, così da non dover sovrascrivere più (spreco di risorse)…
…BACKFACE CULLING
- calcolo di ottimizzazione indipendente dalla poizione (si basa sulla normale)
- rimuove automaticamente dalla pipeline di rendering i triangoli rivolti “di spalle” rispetto alla camera, cioè quelli che non possono essere visibili all’osservatore
COME FUNZIONA
- Ogni triangolo ha una normale uscente (il versore ortogonale alla sua superficie).
- Se il prodotto scalare tra la direzione dell’osservatore e la normale del triangolo è positivo, allora il triangolo è back-facing → viene scartato.
- Il test viene fatto prima della rasterizzazione, nella fase di setup del triangolo, quindi risparmia tempo di calcolo.
LOGICA DI BASE
- Non controlla l'occlusione, ma presume che tutto ciò che è back-facing (di spalle) sia inutile da disegnare → solo se la mesh è chiusa e opaca, questa assunzione è valida.
- È una scorciatoia, una ottimizzazione: dice “questa faccia non la vedrò mai”
QUANDO USARLA
- NON sono dentro un oggetto bensì fuori da esso
- l’oggetto è una mesh chiusa opaca: NON ha buchi e NON fa rifrazione
CONFRONTO
- il depth sorting serve per occlusione vera di oggetti: quelli più vicini bloccano quelli dietro
- il back-face culling serve per evitare di rasterizzare triangoli inutili (che puntano dalla parte opposta alla vista): non opera a livello di oggetti bensì di triangoli
PRESTAZIONI
- migliora le prestazioni delle applicazioni fill-limited, riducendo di circa il 50% il numero di frammenti prodotti e da processare. Non impatta però le applicazioni geometry-limited, dato che lo scarto della primitiva avviene a fine trasformazione in spazio schermo
- si ricorda che le 3 fasi avvengono in parallelo: trasformazione, rasterizzazione, lightning
DEPHT TEST: idea e meccanismo
COSA FA: per ogni posizione, ci sono più frammenti candidati ad essere un determinato pixel, il buffer memorizza solo il frammento più vicino
PROCESSO : Depth test = algoritmo che tiene solo i pixel più vicini alla camera
- i frammenti sono informati e resi pixel
RISULTATO: Depth buffer = matrice che contiene i valori di profontià sotto forma di matriciale oppure scala grigi che memorizza le profondità
- i frammenti non sono ancora informati
vaalore di DEPHT
non deve conoscere semanticamente le varie parti di un oggetto, anche nei casi perggiori si limita a mapppare ogni pixel di depht minore e lo proietta
costi e limiti
KEY WORDS: costo, sensibilità scarsa in caso di superfici parallele molto vicine, valido solo per superfoco opache,
vantaggi e considerazioni
- Il depth test è implementato ad HW nella GPU, quindi il programmatore si limita ad abilitarlo oppure disabilitarlo