44
1 Texturing - Tessiture Daniele Marini

1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

Embed Size (px)

Citation preview

Page 1: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

1

Texturing - Tessiture

Daniele Marini

Page 2: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

2

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 3: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

3

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 4: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

4

Texture mapping

• 2D, 3D o 4D

• La texture è una qualsiasi immagine

• L’operazione di mapping trasferisce l’immagine sulla superficie

Page 5: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

5

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 6: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

6

• 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 7: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

7

• 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 8: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

8

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 9: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

9

Proiezione piana

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

Page 10: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

10

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 11: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

11

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 12: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

12

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 13: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

13

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 14: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

14

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 15: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

15

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 16: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

16

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 17: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

17

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 18: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

18

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 19: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

19

Magnification

Nearest neighbor inpterpolazione bilineare

Page 20: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

20

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 21: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

21

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 22: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

22

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 23: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

23

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 24: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

24

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 25: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

25

MipMappingNon mipmapping

mipmapping

Page 26: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

26

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 27: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

27

Ripmapping

Page 28: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

28

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 29: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

29

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 30: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

30

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 31: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

31

Confronto

Non filtering

Mipmapping

Summed area table

Page 32: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

32

Texture mapping in OgL

Page 33: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

33

• 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 34: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

34

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 35: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

35

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 36: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

36

• 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 37: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

37

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 38: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

38

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 39: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

39

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 40: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

40

Bump mapping

Page 41: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

41

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 42: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

42

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 43: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

43

• 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 44: 1 Texturing - Tessiture Daniele Marini. 2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni

44

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)