Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica...

45
titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006

Transcript of Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica...

Page 1: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

titolo

Daniele MariniDavide Gadia

Marco RonchettiDavide Selmo

Corso Di Programmazione Grafica aa2005/2006

Page 2: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Texturing - Tessiture

Daniele Marini

Page 3: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 3

Più modalità

• es. muro di mattoni: texture invece di modellazione– mappare una fotografia di un muro di mattoni su una superficie

– simulare opacità del cemento e “lucentezza dei mattoni” con funzione immagine che modula la lucentezza

– simulare la “rugosità” del mattone con bump mapping

Page 4: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 4

Come opera

• durante il rendering per ogni locazione su una superficie:– la superficie viene orientata secondo il punto di vista

– si applica il modello di illuminazione• considerando luci e proprietà del materiale• se necessario applicando effetti nebbia o trasparenza

– il colore viene modificato secondo la funzione di texture

– se presente si modifica il coefficiente di lucentezza secondo la funzione di lucentezza

– se presente, si modifica la normale secondo la funzione di bump mapping

Page 5: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 5

Texture mapping

• 2D, 3D o 4D• La texture è una qualsiasi immagine• L’operazione di mapping trasferisce l’immagine sulla superficie

Page 6: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 6

Pipe-line di texturing

Calcola posizionenello spazio mondo

Usa una funzione di proiezioneMAPPING

Usa una funzione di corrispondenza

Applica funzione di trasformazione dei valori

Modifica valore di illuminazione

(x,y,z) Es: proiezione ortografica(proiettare una slide)(u,v) in (0,1)

Da (0,1) a es.(256x256), trovavalore in arrayR,G,B

Es. moltiplica R,G,B per 1.1per evitare valori troppo scuri

Applica modello illuminazione con terna R,G,B

Page 7: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 7

• La configurazione di texture 2D è definita sul piano s,t - coordinate di texture coordinate di texture normalizzate in [0,1] o in coord. di array, T(s,t) è la texture

• Gli elementi dell’array di texture sono i texelstexels

– La funzione di mapping associa a ogni punto dell’oggetto un unico valore di T, un unico texel

Page 8: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 8

• I valori di T sono espressi in (R,G,B)

• La terna viene usata per modificare la terna (r,g,b) del punto dell’oggetto come calcolata dal modello di illuminazione durante la fase di shading

Page 9: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 9

Funzioni di proiezione

• proiezione piana o ortografica– piano su piano

• proiezione parametrica– piano texture su superficie parametrica

• proiezione sferica (a due passi)– piano texture su più superfici

• proiezione cilindrica (a due passi)– piano texture su più superfici

Page 10: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 10

Proiezione piana

• le coordinate (u,v) della texture sono associate alle coordinate proiettate x,y

Page 11: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 11

Proiezione parametrica

•Il mapping: se la superficie è parametrica un punto è:

•Si associa T(s,t) a p(u,v)•L’associazione può essere diretta (u=s, v=t) o lineare :

p(u,v) =

x(u,v)

y(u,v)

z(u,v)

⎢ ⎢ ⎢

⎥ ⎥ ⎥

u=as+bt+c

v=ds+et+ f

Page 12: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 12

u=umin+s−smin

smax−smin

(umax−umin)

v=vmin+t−tmin

tmax−tmin

(vmax−vmin)

Proiezione parametrica

– La funzione è invertibile se ae ≠ bd– La conversione alle coordinate schermo:

– Questo approccio non tiene conto della curvatura, la texture viene stretchata sulla superficie

Page 13: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 13

Cilindro con raggio r e altezza h :

x = rcos(2πu)

y = rsin(2πu) con u,v ∈ 0,1[ ]

z = v /h

mappa :

s = u

t = v

Proiezione cilindrica– Per proiezione sferica e cilindrica si segue un approccio a due passi:• Mappare su una sfera o un cilindro (oggetto intermedio) - S mapping

• Mappare la struttura ottenuta sull’oggetto finale - O mapping

• Secondo passo:

Page 14: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 14

Proiezione sferica

• si proietta sulla sfera con l’equazione:

• dove: sono latitudine e longitudine sulla sfera; rx, ry, rz, sono direzioni di proiezione (riflessione), vettori normalizzati

=arccos(−rz )

φ = atan2(ry,rx )

dove : 0 ≤ atan2(y,x) ≤ 2π , prende come argomento y/x con x ≠ 0

Page 15: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 15

Secondo passo• nel secondo passo si sceglie come proiettare sull’oggetto finale l’oggetto intermedio in funzione della normale al punto considerato sull’oggetto - 3 modi:– normali dirette dall’oggetto intermedio all’oggetto finale

– normali in ogni punto dell’oggetto finale– normali dirette dal centro dell’oggetto finale

Page 16: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 16

Funzioni di corrispondenza

• Indicano come deve essere mappata la texture:– Wrap, repeat, tile: l’immagine viene ripetuta come una piastrella

– Mirror: l’immagine viene ripetuta riflettendola verticalmente o orizzontalmente

– Clamp to edge: i valori esterni a (0,1) sono forzati agli estremi, il bordo dell’immagine si prolunga su tutta la superficie

– clamp to border: i valori esterni a (0,1) sono resi con un colore proprio, va bene per decalcomanie

Page 17: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 17

Funzioni di modifica

• Replace: rimpiazza i valori R,G,B della texture agli r,g,b del modello di illuminazione - chiamato anche glow texture

• Decal per simulare decalcomanie: sfrutta canale alfa per modulare r,g,b,alfa con R,G,B,ALFA

• Modulate: moltiplica r,g,b per R,G,B

Page 18: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 18

Image texture

• Mappare una immagine es. 256 x 256 su una superficie piana; se la superficie proiettata supera o è inferiore alla risoluzione dell’immagine:– Magnification– Minification

Page 19: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 19

Magnification

• Nasce aliasing, si supera con interpolazione– Nearest neighbor: produce pixellizzazione, va bene per piccoli ingrandimenti (max fattore 2)

– Interpolazione bilineare: smoothing– Altri filtri per ingrandimenti elevati (ricampionamento)

Page 20: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 20

Magnification

Nearest neighbor inpterpolazione bilineare

Page 21: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 21

Interpolazione bilineare

• Interpola Linearmente i valori di texture di 4 texel vicini

t1 t2

t3 t4

i valore textur in i =

Lerp(lerp(t1, t3), lerp(t2, t4))

Page 22: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 22

Minification

• Molti texel possono cadere sullo stesso pixel– Ancora nearest neighbor, sceglie il texel più vicino al pixel, aliasing forte, soprattutto nella animazione

– Ancora interpolazione bilineare: sceglie il texel medio per il pixel

– Meglio ricampionamento dell’immagine, in modo da garantire un texel per pixel (frequenza di campionamento ottima)

Page 23: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 23

Minification• Molti texel coprono un pixel (sotto campionamento)

Artefatti di sotto camp.

un pixel

Solutione:

Accresci campioni o riduci la frequenza massima della texture

metodi:

1. Mip-mapping 2. Rip-mapping3. Sum Area Table

Page 24: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 24

MipMapping• Mip: “multi in parvo”

– L’immagine di texture originale viene affiancata da molte versioni via via più piccole, mediante ricampionamento dell’immagine originale

– Livello 0 originale– Livello 1 sottocampionato a un quarto (subtexture), si usa filtro gaussiano

– Si prosegue fino alla risoluzione del pixel

– Attenzione al gamma!per avere brightness costante

Page 25: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 25

MipMapping

• Per scegliere quale texture usare si usa un parametro d per cercare di avere pixel:texel in rapporto 1:1 o 2:1 (frequenza di Nyquist)

• Se un pixel ingloba più texel si scende di livello

• d individua il livello, la terna (u,v,d) individua il texel, il campione si determina con interpolazione trilineare

Page 26: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 26

MipMapping

Non mipmapping

mipmapping

Page 27: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 27

Ripmapping

• Si sottocampiona anche linearmente lungo u e v

• Permette di evitare effetti di sfocatura ai bordi

• Si crea una struttura ad array, la diagonale principale contiene la struttura mipmapping, lungo righe e colonne abbiamo le immagini sottocampionate lungo u e v.

• si calcolano valori interpolati usando anche le immagini sottocampionate lungo u e v

Page 28: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 28

Ripmapping

Page 29: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 29

Summed area table

• filtro anisotropo - calcola il colore medio in una regione rettangolare nello spazio texture a velocità costante

• si usa un array 2d della stessa dimensione della texture, si usano più bit per maggiore precisione

Ogni elemento nell’array memorizza la somma dei colori di tutti i texel fino all’angolo in basso a sinistra

Page 30: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 30

Summed area table - 2

• usato per filtrare la texture

pixel

spazio pixel spazio texture

Calcola il BB dell’area del pixel nella texture e usa SAT per calcolare il colore medio dell’area coperta dal BB

x

y

Page 31: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 31

Summed area table - 3

• Come si calcola la somma dei texel nell’area tra A e B?

RA

BC

D

R’ = SAT[B] – SAT[C] – SAT[D] + SAT[A]

Il valore finale è la media: R’ / (numero texels in R)

Page 32: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 32

Confronto

Non filtering

Mipmapping

Summed area table

Page 33: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 33

Texture mapping in OgL

Page 34: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 34

•Il texturing è fatto durante la rasterizzazione della primitiva

•mappa punti 3D in locazioni (pixel) sul display

•Ciascun frammento generato viene testato per la visibilità (z-buffer) e se visibile viene calcolato lo shading

•Durante l’interpolazione di shading si calcola il valore di texture usando ancora interpolazione tra vertici estremi

Page 35: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 35

Dichiarazione della texture

Glubyte my_texels [512][512]/* dichiara una immagine di texture

glTexImage2D(GL_TEXTURE_2D,0,components,512,512,0,format,type, my_texels);

/*specifica che l’immagine deve essere una Texturecomponents determina il numero di colori (da 1 a 4)format è determinato dai due parametri successivi

(valori dei pixel e dim immagine)

glEnable(GL_TEXTURE_2D)

Page 36: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 36

Dichiarazione del modo di mapping

glTexCoord2f(s,t)/* range di variazione delle coordinate dello spaziotexture

La texture viene associata alla primitiva all’atto della dichiarazione:

glBegin(GL_QUAD);glTexCoord2f(0.0, 0.0);glVertex2f(x1, y1, z1);glTexCoord2f(1.0, 0.0);glVertex2f(x2, y2, z2);glTexCoord2f(1.0, 1.0);glVertex2f(x3, y3, z3);

glTexCoord2f(0.0, 1.0);glVertex2f(x4, y4, z4);

glEnd();

Page 37: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 37

• Posso usare anche un intervallo inferiore di s e t, in tal caso viene mappata solo una parte della texture;

• OgL interpola i valori• Cosa succede se si specificano valori di s e t esterni all’intervallo 0,1?– Potremmo volere che la texture si ripeta periodicamente

– Oppure vorremmo “clampare” gli estremi ed estendere 0 ed 1 per i valori inferiori o superiori

glTexParameter(GL_TEXTURE_WRAP_S, GL_REPEAT)/*texture ripetute

glTexParameter(GL_TEXTURE_WRAP_S,GL_CLAMP)/* texture “clampate”

Page 38: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 38

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST|GL_LINEAR)

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST|GL_LINEAR)

GL_NEAREST adotta nearest neighbourghGL_LINEAR applica un filtro smooth 2x2

Minification, magnification

Page 39: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 39

mipmapping• OgL permette di creare una serie di array di texture a risoluzione decrescente

gluBuild2DMipmaps(GL_TEXTURE_2D,3,64,64,GL_RGB,GL_UNSIGNED_BYTE,my_texels)

/* crea le texture 64x64-32x32-16x16-8x8-4x4-2x2-1x1

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST)

/*invoca l’opzione mipmap

Page 40: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 40

Modifica del colore

• Il colore può essere modulato (alfa blending) o coperto dalla texture:

glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_MODULATE)

glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_DECAL)

Page 41: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 41

Bump mapping

Page 42: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 42

Bump mapping

•Perturbazione della normale

•Funzione di bump d(u,v):

•Meglio perturbare la normale e non il punto

n=pu ×pvpu ×pv

pu =

∂x∂u∂y∂u∂z∂u

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥

pv =

∂x∂v∂y∂v∂z∂v

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥

p'=p+d(u,v)n

n'=p'u×p'vdove:

p'u=pu +∂d∂u

n+d(u,v)nu

p'v=pv +∂d∂v

n+d(u,v)nv

Page 43: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 43

Environmental mapping

Simula riflessioni a specchio senza ray tracing, chiamato anche reflection map

Si calcola la proiezione dell’ambiente su una forma determinata (sfera o cubo nel caso di ambienti chiusi)

La proiezione viene trattata come una texture, ma la texture viene proiettata dal punto vista dell’osservatore

Page 44: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 44

• Il programma applicativo deve calcolare la proiezione dell’ambiente sulla superficie intermedia (sfera o scatola)

• OgL genera automaticamente le coordinate di texture per un mapping sferico

glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)glEnable(GL_TEXTURE_GEN_S)glEnable(GL_TEXTURE_GEN_T)

Page 45: Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 45

Nebbia ed effetti di profondità

•Depth cueing•Fog factor f viene trattato come il coefficiente alfa blending, è approssimato da una funzione del tipo

f =e−0.5z2

GLFloar fcolor[4] = […]glEnable(GL_FOG)glFogf(GL_FOG_MODE,GL_EXP)glFoGf(GL_FOG_DENSITY,0.5)glFogfv(GL_FOG_COLOR, fcolor)