Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di...

23
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-Möller Corso di Programmazione Grafica aa2005/2006

Transcript of Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di...

Page 1: Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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