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
Scarica

22_ombre