View
218
Download
0
Category
Preview:
Citation preview
titolo
Daniele MariniDavide Gadia
Marco RonchettiDavide Selmo
Corso Di Programmazione Grafica aa2005/2006
Texturing - Tessiture
Daniele Marini
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
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
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
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
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
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
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
Programmazione Grafica aa2005/2006 10
Proiezione piana
• le coordinate (u,v) della texture sono associate alle coordinate proiettate x,y
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
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
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:
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
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
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
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
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
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)
Programmazione Grafica aa2005/2006 20
Magnification
Nearest neighbor inpterpolazione bilineare
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))
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)
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
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
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
Programmazione Grafica aa2005/2006 26
MipMapping
Non mipmapping
mipmapping
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
Programmazione Grafica aa2005/2006 28
Ripmapping
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
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
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)
Programmazione Grafica aa2005/2006 32
Confronto
Non filtering
Mipmapping
Summed area table
Programmazione Grafica aa2005/2006 33
Texture mapping in OgL
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
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)
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();
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”
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
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
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)
Programmazione Grafica aa2005/2006 41
Bump mapping
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
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
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)
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)
Recommended