![Page 1: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/1.jpg)
Ombre e riflessioni in tempo reale
Daniele Marini
Parzialmente tratte de: Haines-Möller
Corso di Programmazione Grafica aa2007/2008
![Page 2: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/2.jpg)
Programmazione Grafica aa2007/2008 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/3.jpg)
Programmazione Grafica aa2007/2008 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/4.jpg)
Programmazione Grafica aa2007/2008 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/5.jpg)
Programmazione Grafica aa2007/2008 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/6.jpg)
Programmazione Grafica aa2007/2008 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/7.jpg)
Programmazione Grafica aa2007/2008 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 è visibileNotare 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 aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/8.jpg)
Programmazione Grafica aa2007/2008 8
Ombre pianeOmbre piane
• Un oggetto proietta un’ombra su una superficie piana
• Il meccanismo è simile a una proiezione prospettica: si tratta di individuare la matrice di proiezione
![Page 9: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/9.jpg)
Programmazione Grafica aa2007/2008 9
Proiezione dell’ombraProiezione dell’ombral
v
ombra
y=0
y
€
px − lxvx − lx
=ly
ly − vy
px =lyvx − lxvyly − vy
pz =lyvz − lzvyly − vy
py = 0
p
€
M =
ly −lx 0 0
0 0 0 0
0 −lz ly 0
0 −1 0 ly
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Matrice di proiezione:
![Page 10: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/10.jpg)
Programmazione Grafica aa2007/2008 10
Proiezione su un piano qualsiasiProiezione su un piano qualsiasi
v
p
n
l
Equazione del piano:
Equazione del punto proiettato
Matrice di proiezione
€
π :n.x + d = 0
€
p = l −d + n.l
n.(v− l)v− l( )
€
M =
n.l + d − lxnx −lxny −lxnz −lxd
−lynx n.l + d − lyny −lynz −lyd
−lznx −lzny n.l + d − lznz −lzd
−nx −ny −nz n.l
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 11: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/11.jpg)
Programmazione Grafica aa2007/2008 11
Memorizzare ombre pre-computate in texture
![Page 12: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/12.jpg)
Programmazione Grafica aa2007/2008 12
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 renderman della Pixar• Calcola il rendering a partire dalla
sorgente (il bianco indica punti più lontani, il nero più vicini)
![Page 13: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/13.jpg)
Programmazione Grafica aa2007/2008 13
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 14: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/14.jpg)
Programmazione Grafica aa2007/2008 14
RisultatoRisultato
![Page 15: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/15.jpg)
Programmazione Grafica aa2007/2008 15
Shadow volumes Crea porzioni di volume in ombra da ciasun
poligono illuminato (triangolo) Ciascun traingolo crea 3 quadrilateri semi-
infiniti proiettati Quelli rivolti verso l’ossrvatore sono frontfacing,
gli altri backfacing
![Page 16: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/16.jpg)
Programmazione Grafica aa2007/2008 16
Come funzionaCome funziona
Per testare un punto incrementa un contatore ogni volta che attraversi un lato frontafcing della piramide ombra e decrementa quando atraversi un backfacing
Se il contatore è maggiore di zero allora il pixel è in ombra
frontfacing
backfacing
![Page 17: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/17.jpg)
Programmazione Grafica aa2007/2008 17
Shadow volume usa stencil buffer
• È un altro buffer di OGL in genere 8 bit 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
resu
ltRenderedimage
![Page 18: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/18.jpg)
Programmazione Grafica aa2007/2008 18
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 passo: rendi nello stencil buffer i poligoni frontfacing
rispetto allo shadow volume, incrementa il contatore.– 3rd passo: rendi nello stencil buffer i poligoni backfacing
rispetto allo shadow volume, decrementa il contatore.– 4th passo: rendi le luci diffusive e speculari con lo stencil
buffer a 0.
![Page 19: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/19.jpg)
Programmazione Grafica aa2007/2008 19
EsempioEsempio
Image courtesy of NVIDIA Inc.
![Page 20: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/20.jpg)
Programmazione Grafica aa2007/2008 20
Unire più volumi ombraUnire più volumi ombra
Uno spigolo condiviso da due poligoni che ostacolano la luce crea quadrilateri che sono simultaneamente front e backfacing
Questo spigolo interno genera2 quadrilateri che si annullano
![Page 21: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/21.jpg)
Programmazione Grafica aa2007/2008 21
Cercare gli spigoli di bordo Cercare gli spigoli di bordo (silhouette)(silhouette)
Dalla sorgente le ombre proiettate da spigoli interni non contribuiscono allo shadow volume.
Trovare gli spigoli della silhouette elimina molti quadrilateri di shadow volume inutili.
![Page 22: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/22.jpg)
Programmazione Grafica aa2007/2008 22
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 23: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/23.jpg)
Programmazione Grafica aa2007/2008 23
Riflessioni piane
• Poniamo il piano in z=0• Applichiamo la trasformazione glScalef(1,1,-1);
• Il risultato:z
![Page 24: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/24.jpg)
Programmazione Grafica aa2007/2008 24
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 25: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/25.jpg)
Programmazione Grafica aa2007/2008 25
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 26: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2007/2008](https://reader035.vdocuments.site/reader035/viewer/2022062701/5542eb6a497959361e8d691a/html5/thumbnails/26.jpg)
Programmazione Grafica aa2007/2008 26
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