Le ombre proiettate Daniele Marini 1 Estensione del modello di Phong • sorgente di luce puntiforme: – Punti in ombra ricevono solo luce ambiente – Inserire coefficiente s = {0,1} nell’equazione: I Ia a sp k p,att I p (d cos( ) s cos n ( )) p s k I cos ( )( d cos( ) s cos ( )) w n p e,att e e 2 Ombra e penombra 3 Simulazione con Ray Tracing: ombre nette! (no sfumate) 4 Calcolo delle ombre • Atherton, Weiler e Greenberg - aggiungere ai poligoni della scena anche i poligoni “ombra” • 2 fasi: – Fase 1 calcolo superfici ombra • ogni sorgente di luce è centro di proiezione prospettica della scena, ogni superficie viene proiettata su tutte quelle viste dalla sorgente – Fase 2: rendering di tutte le superfici 5 6 Volumi d’ombra • Volume virtuale che rappresenta il cono d’ombra di ciascuna sorgente • L’intersezione con il frustum di visione determina la regione di spazio in cui gli oggetti sono in ombra rispetto alla sorgente 7 8 Volumi d’ombra • Durante il rendering si applica il modello ombra agli oggetti che cadono nel cono d’ombra • Se ci sono più sorgenti ci sono più coni, l’intersezione tra coni determina le il grado di ombreggiatura • Si può simulare una sorgente estesa proiettando più volumi ombra con origine in più punti della sorgente estesa 9 Z-Buffer • Williams, 2 fasi – Fase 1 si calcola un buffer ombre per ciascuna sorgente, che è centro di proiezione; l’ordinamento tra le superfici indica la visibilità rispetto alla sorgente – Fase 2: durante lo z-buffer prima di assegnare il colore si interrogano i buffer ombra per verificare la visibilità rispetto a ciascuna sorgente • Rischi di aliasing! 10 Stencil buffer e ombre • Stencil buffer: buffer di timbratura o di mascheratura • fase 1 - rendering con lo z-buffer attivo solo per le componenti di luce ambiente. • fase 2 - z-buffer disattivato, si attiva lo stencil buffer, nel quale si registrano soltanto le facce dei volumi d'ombra: – quando si disegna una faccia rivolta verso l'osservatore le posizioni corrisponenti nello stencil buffer vengono incrementate, – quando si traccia una faccia opposta le posizioni vengono decrementate. 11 Stencil buffer (cont) • fase 3 - si attiva lo z-buffer, si calcolano le componenti di illuminazione diffusa e speculare; per ogni posizione nello z-buffer si interroga il valore corrispondente nello stencil buffer: se è a 0 il pixel è illuminato altrimenti è in ombra 12 Stencil buffer • Può essere usato per molti scopi: – Gestire regioni irregolari in cui disegnare forme particolari (effetto timbratura) – Ombre – Filling di poligoni intrecciati – Creare “decalcomanie” 13 Stencil buffer - es. decalcomanie • Problema: disegnare due superfici coplanari A e B, B deve essere sempre sopra A • Soluzione 1 solo con z-buffer: – disabilita z-buffer in scrittura e rendera A – abilita z-buffer in scrittura e rendera B – disabilita color buffer in scrittura e rendera A nuovamente – abilita color buffer in scrittura 14 • Soluzione 2 con stencil buffer – configura stencil buffer per scrivere 1 se il test di profondità passa e 0 altrimenti; rendera A – configura stencil buffer in modo da non cambiarne i valori ma per rendere solo quando il valore contenuto è a 1; disabilita il test e aggiornamento delo z-buffer e rendera B 15