![Page 1: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/1.jpg)
Ombre e riflessioni in tempo reale
Daniele Marini
Parzialmente tratte de: Haines-Möller
Corso di Programmazione Grafica aa2005/2006
![Page 2: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/2.jpg)
Programmazione Grafica aa2005/2006 2
Perchè• Dare maggiore realismo• Creare ”un’atmosfera”
Neverwinter Nights Blade of Darkness
![Page 3: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/3.jpg)
Programmazione Grafica aa2005/2006 3
Cosa si ottiene
• Più indizi per comprendere la profondità e la forma
• Più facile l’orientamento
![Page 4: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/4.jpg)
Programmazione Grafica aa2005/2006 4
Ricevitore
Sorgenti di luceCreatori d’ombra, ricevitori d’ombra
Sorgente
CreatoreCreatore ericevitore
Definizioni
![Page 5: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/5.jpg)
Programmazione Grafica aa2005/2006 5
Tipi di sorgenti
Point light
ombra
area light
ombrapenombra
Tipologie
![Page 6: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/6.jpg)
Programmazione Grafica aa2005/2006 6
Ombre nette, ombre sfumate (penombre)
![Page 7: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/7.jpg)
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
![Page 8: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/8.jpg)
Programmazione Grafica aa2005/2006 8
Memorizzare ombre pre-computate in texture
![Page 9: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/9.jpg)
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)
![Page 10: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/10.jpg)
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
![Page 11: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/11.jpg)
Programmazione Grafica aa2005/2006 11
RisultatoRisultato
![Page 12: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/12.jpg)
Programmazione Grafica aa2005/2006 12
Shadow volumes
Crea porzioni di volume in ombra da ciasun poligono illuminato (triangolo)
Ciascun traingolo crea 3 quadrilateri proiettati
![Page 13: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/13.jpg)
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
![Page 14: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/14.jpg)
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
![Page 15: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/15.jpg)
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.
![Page 16: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/16.jpg)
Programmazione Grafica aa2005/2006 16
EsempioEsempio
Image courtesy of NVIDIA Inc.
![Page 17: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/17.jpg)
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
![Page 18: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/18.jpg)
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.
![Page 19: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/19.jpg)
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
![Page 20: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/20.jpg)
Programmazione Grafica aa2005/2006 20
Riflessioni piane
• Poniamo il piano in z=0• Applichiamo la trasformazione glScalef(1,1,-1);
• Il risultato:z
![Page 21: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/21.jpg)
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:
![Page 22: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/22.jpg)
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
![Page 23: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006](https://reader035.vdocuments.pub/reader035/viewer/2022062512/5542eb6a497959361e8d6920/html5/thumbnails/23.jpg)
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