Post on 02-May-2015
transcript
Ombre e riflessioni in tempo reale
Daniele Marini
Parzialmente tratte de: Haines-Möller
Corso di Programmazione Grafica aa2005/2006
Programmazione Grafica aa2005/2006 2
Perchè• Dare maggiore realismo• Creare ”un’atmosfera”
Neverwinter Nights Blade of Darkness
Programmazione Grafica aa2005/2006 3
Cosa si ottiene
• Più indizi per comprendere la profondità e la forma
• Più facile l’orientamento
Programmazione Grafica aa2005/2006 4
Ricevitore
Sorgenti di luceCreatori d’ombra, ricevitori d’ombra
Sorgente
CreatoreCreatore ericevitore
Definizioni
Programmazione Grafica aa2005/2006 5
Tipi di sorgenti
Point light
ombra
area light
ombrapenombra
Tipologie
Programmazione Grafica aa2005/2006 6
Ombre nette, ombre sfumate (penombre)
Programmazione Grafica aa2005/2006 7
Come considerare le ombreCome considerare le ombreCome oggetti separati (l’ombra di Peter
Pan)Come volumi di spazio buioCome posizioni da cui la luce di una
sorgente non è visibile
Notare che sono in ombra facce rivolte in senso opposto alla sorgente
Programmazione Grafica aa2005/2006 8
Memorizzare ombre pre-computate in texture
Programmazione Grafica aa2005/2006 9
Due algoritmi principali per geometrie qualsiasi
• Shadow mapping e shadow volumes– Considera un volume buio, è il più diffuso e implementato hardware
• Lavora in tempo reale…• Shadow mapping è usato dal software rendering della Pixar
• Calcola il rendering a partire dalla sorgente (il bianco indica punti più lontani, il nero più vicini)
Programmazione Grafica aa2005/2006 10
Shadow MapShadow Map Quando si calcola il rendering, controlla il
punto osservato rispetto allo shadow buffer– Se la profondità del punto è maggiore (epsilon) del
valore di shadow buffer l’oggetto è in ombra.
shadowdepth map
Per ogni pixel comparadistanza da luce di con
Profondità di memorizzata In shadow map
Programmazione Grafica aa2005/2006 11
RisultatoRisultato
Programmazione Grafica aa2005/2006 12
Shadow volumes
Crea porzioni di volume in ombra da ciasun poligono illuminato (triangolo)
Ciascun traingolo crea 3 quadrilateri proiettati
Programmazione Grafica aa2005/2006 13
Come funzionaCome funziona
Per testare un punto conta il numero di poligoni tra esso e il punto di vista
Se ci sono più poligoni frontfacing che backfacing allora è in ombra
frontfacing
backfacing
Programmazione Grafica aa2005/2006 14
Shadow volume usa stencil buffer
• È un altro buffere di OGL in genee 8 bits per pixel
• Quando si calcola rendering con stencil buffer si possono eseguire somme, sottrazioni etc.
• L’immagine ottenuta si può usare come maschera per le fasi successive di rendering
StencilBufferMask
resultRendered
image
Programmazione Grafica aa2005/2006 15
Come si implementa shadow Come si implementa shadow volumes con stencil buffervolumes con stencil buffer
4 passi [Heidmann91]:– 1st Passo: rendi la scena con solo la luce ambiente– Inibisci l’aggiornamento dello Z-buffer e la scrittura nel
color buffer (disegna solo nello stencil).– 2nd pass: rendi nello stencil buffer i poligoni frontfacing
rispetto allo shadow volume, incrementa il conteggio.– 3rd pass: rendi nello stencil buffer i poligoni backfacing
rispetto allo shadow volume, decrementa il conteggio.– 4th pass: rendi le luci diffusive e speculari con lo stencil
buffer a 0.
Programmazione Grafica aa2005/2006 16
EsempioEsempio
Image courtesy of NVIDIA Inc.
Programmazione Grafica aa2005/2006 17
Unire più volumi ombraUnire più volumi ombra
Uno spigolo condiviso da due poligoni che ostacolano la luce creano quadrilateri che sono simultaneamente front e backfacing
Questo spigolo interno genera2 quadrilateri che si annullano
Programmazione Grafica aa2005/2006 18
Cercare gli spigoli di bordo Cercare gli spigoli di bordo (silhouette)(silhouette)
Dalla sorgente le ombre proiettate da spigoli interno non contribuiscono allo shadow volume.
Trovare gli spigoli della silhouette elimina molti qaudrilateri di shadow volume inutili.
Programmazione Grafica aa2005/2006 19
Riflessioni piane
• Le riflessioni si possono simulare con environment mapping
• Non è adatto per superfici piane • Anche la riflessione piana (specchio piano) aiuta a capire la scena e le forme, accresce il realismo
• Basato sulla legge della riflessione speculare:– L’angolo di incidenza è uguale all’angolo di riflessione
Programmazione Grafica aa2005/2006 20
Riflessioni piane
• Poniamo il piano in z=0• Applichiamo la trasformazione glScalef(1,1,-1);
• Il risultato:z
Programmazione Grafica aa2005/2006 21
Riflessioni piane• Nel calcolo delle ombre il backfacing diventa frontfacing!
• Anche le luci devoono venire riflesse • È necessario applicare il clipping (si usa lo stencil buffer)
• Esempio di clipping:
Programmazione Grafica aa2005/2006 22
Planar reflections
• Come funziona il rendering?• 1) metti nello stencil buffer i poligoni del piano di base
• 2) calcola il modello scalato con (1,1,-1), ma mascheralo con lo stencil buffer
• 3) rendi il piano di base (semi-trasparente)
• 4) rendi il modello non trasformato con la scala
Programmazione Grafica aa2005/2006 23
Esempio
• Invece del trucco della trasformazione di scala si puà riflettere la posizione di camera e la direzione del piano
• Quindi rendere l’immagine riflessa da quella camera