1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi...

29
1 Texturing - Tessiture Daniele Marini

Transcript of 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi...

Page 1: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

1

Texturing - Tessiture

Daniele Marini

Page 2: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

2

Texture mapping

• 2D, 3D o 4D

• La texture è una qualsiasi immagine

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

Page 3: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

3

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.1Perché valori troppo scuri

Applica modello illuminazione con terna R,G,B

Page 4: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

4

• 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 texture map associa a ogni punto dell’oggetto un unico

punto su T– Ogni punto dell’oggetto viene trasferito al display con le

operazioni di rendering

Page 5: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

5

• 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

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

• La funzione di mapping puo’ essere lineare (proiezione ortografica):

p(u,v) =

x(u,v)

y(u,v)

z(u,v)

⎢ ⎢ ⎢

⎥ ⎥ ⎥

u=as+bt+c

v=ds+et+ f

Page 6: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

6

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

• Questo approccio non tiene conto della curvatura, va bene per mappare su un piano

u=umin+s−smin

smax−smin

(umax−umin)

v=vmin+t−tmin

tmax−tmin

(vmax−vmin)

Page 7: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

7

Funzioni di corrispondenza• Altre funzioni di corrispondenza possono essere:

– Wrap, repeat, tile: l’immagine viene ripetuta come una piastrella

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

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

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

Page 8: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

8

Funzioni di modifica

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

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

Page 9: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

9

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 10: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

10

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 11: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

11

Minification

• Molti texel posson cadere sullo stesso pixel– Ancora nearest neighbor, sceglie il texel più

vicino al pixel, aliasing forte!– Ancora interpolazione bilineare: sceglie il texel

medio per il pixel– Meglio ricampionamento dell’immagine

Page 12: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

12

MipMapping• Mip: “multi in parvo”

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

– Livello 0 originale– Livello 1 sottocampionato a un quarto

(subtexture), si usa filtro gaussiano– Si prosegue fino alla risoluzioe del pixel – Attenzione al gamma!per avere birghtness

costante

Page 13: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

13

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 14: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

14

Ripmapping

• Si sottocampiona anche linearmente lungo u e v

• Permette di evitare effetti di sfocatura ai bordi

Page 15: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

15

• Per la curvatura si segue un approccio a due passi:– Mappare su una sfera o un cilindro o un cubo - S mapping– Mappare la struttura ottenuta sull’oggetto finale - O mapping

• Secondo passo:

Cilindro:

x=r cos(2πu)

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

z=v/h

mappa:

s=u

t=v

Page 16: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

16

• Poiché il rendering procede pixel per pixel, siamo più interessati a conoscere il valore di texture di un singolo pixel, quindi l’approccio più adatto procede in modo inverso, si deve calcolare la preimmaginepreimmagine

• Aliasing!Aliasing!

Page 17: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

17

Texture mapping in OgL

Page 18: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

18

• 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 19: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

19

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 20: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

20

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 21: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

21

• 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 22: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

22

• Aliasing: raramente un pixel corrisponde a una coordinata esatta dello spazio texture (a un texel)

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST)

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST)

GL_LINEAR applica un filtro smooth 2x2

Page 23: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

23

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

glTexParametrf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST)

/*invoca l’opzione mipmap

Page 24: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

24

Influenza del colore

• Il colore può essere modulato 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 25: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

25

Bump mapping

Page 26: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

26

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 27: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

27

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 28: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

28

• 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

Page 29: 1 Texturing - Tessiture Daniele Marini. 2 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine.

29

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)