1 texturing - tessiture daniele marini. 2 texture mapping 2d, 3d o 4d la texture è una qualsiasi...
TRANSCRIPT
1
Texturing - Tessiture
Daniele Marini
2
Texture mapping
• 2D, 3D o 4D
• La texture è una qualsiasi immagine
• L’operazione di mapping trasferisce l’immagine sulla superficie
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
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
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
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)
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
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
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
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)
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
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
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
14
Ripmapping
• Si sottocampiona anche linearmente lungo u e v
• Permette di evitare effetti di sfocatura ai bordi
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
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!
17
Texture mapping in OgL
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
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)
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();
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”
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
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
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)
25
Bump mapping
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
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
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
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)