ombre e riflessioni in tempo reale daniele marini parzialmente tratte de: haines-möller corso di...

Post on 02-May-2015

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ombre e riflessioni in tempo reale

Daniele Marini

Parzialmente tratte de: Haines-Möller

Corso di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 2

Perchè• Dare maggiore realismo• Creare ”un’atmosfera”

Neverwinter Nights Blade of Darkness

Programmazione Grafica aa2007/2008 3

Cosa si ottiene

• Più indizi per comprendere la profondità e la forma

• Più facile l’orientamento

Programmazione Grafica aa2007/2008 4

Ricevitore

Sorgenti di luceCreatori d’ombra, ricevitori d’ombra

Sorgente

CreatoreCreatore ericevitore

Definizioni

Programmazione Grafica aa2007/2008 5

Tipi di sorgenti

Point light

ombra

area light

ombrapenombra

Tipologie

Programmazione Grafica aa2007/2008 6

Ombre nette, ombre sfumate (penombre)

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

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

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:

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

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Programmazione Grafica aa2007/2008 11

Memorizzare ombre pre-computate in texture

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)

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

Programmazione Grafica aa2007/2008 14

RisultatoRisultato

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

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

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

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.

Programmazione Grafica aa2007/2008 19

EsempioEsempio

Image courtesy of NVIDIA Inc.

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

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.

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

Programmazione Grafica aa2007/2008 23

Riflessioni piane

• Poniamo il piano in z=0• Applichiamo la trasformazione glScalef(1,1,-1);

• Il risultato:z

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:

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

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

top related