Le ombre proiettate Daniele Marini
Estensione del modello di Phong sorgente di luce puntiforme: Punti in ombra ricevono solo luce ambiente Inserire coefficiente s = {0,1} nell’equazione:
Ombra e penombra
Simulazione con Ray Tracing: ombre nette! (no penombra)
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
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
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
Z-Buffer Williams, 2 fasi Rischi di aliasing! 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!
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.
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
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”
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
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