Corso Di Programmazione Grafica aa2005/2006
titolo
Daniele Marini
Davide Gadia
Marco Ronchetti
Davide Selmo
Texturing - Tessiture
Daniele Marini
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
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
Programmazione Grafica aa2005/2006
4
Texture mapping
• 2D, 3D o 4D
• La texture è una qualsiasi immagine
• L’operazione di mapping trasferisce
l’immagine sulla superficie
Programmazione Grafica aa2005/2006
5
Pipe-line di texturing
Usa una funzione
di proiezione
MAPPING
Calcola posizione
nello spazio mondo
(x,y,z)
Es: proiezione
ortografica
(proiettare una slide)
(u,v) in (0,1)
Modifica valore
di illuminazione
Applica modello
illuminazione con
terna R,G,B
Usa una funzione
di corrispondenza
Da (0,1) a es.
(256x256), trova
valore in array
R,G,B
Applica funzione
di trasformazione
dei valori
Es. moltiplica R,G,B per 1.1
per evitare valori troppo
scuri
Programmazione Grafica aa2005/2006
6
• La configurazione di texture 2D è
definita sul piano s,t - 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 texels
– La funzione di mapping associa a ogni punto
dell’oggetto un unico valore di T, un unico texel
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
9
Proiezione piana
• le coordinate (u,v) della texture sono
associate alle coordinate proiettate
x,y
Programmazione Grafica aa2005/2006
10
Proiezione parametrica
• Il mapping: se la superficie è
parametrica un punto è:
x(u,v)


p(u,v)  y(u,v)


z(u, v) 
• Si associa T(s,t) a p(u,v)
• L’associazione può essere diretta (u=s,
v=t) o lineare :
u  as  bt  c
v  ds  et  f
Programmazione Grafica aa2005/2006
11
Proiezione parametrica
– La funzione è invertibile se ae ≠ bd
– La conversione alle coordinate schermo:
u  umin
s  smin

(u  umin )
smax  smin max
t  t min
v  v min 
(v max  v min )
– Questo approccio non
tmax tiene
tmin conto della curvatura, la
texture viene stretchata sulla superficie
Programmazione Grafica aa2005/2006
12
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
Cilindro con raggio r e altezza h :
x  r cos(2u)
y  r sin( 2u)
z  v /h
mappa :
su
t v
con u, v  0,1
• Secondo passo:
Programmazione Grafica aa2005/2006
13
Proiezione sferica
• si proietta sulla sfera con l’equazione:
r  arccos(rz )
f  atan2(ry ,rx )
dove : 0  atan2(y, x)  2 , prende come argomento y/x con x  0

• dove: r,f sono latitudine e longitudine
sulla sfera; rx, ry, rz, sono direzioni di
proiezione (riflessione), vettori
normalizzati
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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)
Programmazione Grafica aa2005/2006
19
Magnification
Nearest neighbor
inpterpolazione bilineare
Programmazione Grafica aa2005/2006
20
Interpolazione bilineare
• Interpola Linearmente i valori di texture
di 4 texel vicini
t1
t2
i
t3
valore textur in i
=
Lerp(lerp(t1, t3), lerp(t2, t4))
t4
Programmazione Grafica aa2005/2006
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)
Programmazione Grafica aa2005/2006
22
Minification
• Molti texel coprono un pixel (sotto
campionamento)
Solutione:
Accresci campioni o riduci
la frequenza massima della
texture
un pixel
metodi:
Artefatti di sotto camp.
1. Mip-mapping
2. Rip-mapping
3. Sum Area Table
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
25
MipMapping
Non mipmapping
mipmapping
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
27
Ripmapping
Programmazione Grafica aa2005/2006
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ù
Ogni elemento
nell’array memorizza la somma dei
bit per maggiore
precisione
colori di tutti i texel fino all’angolo in basso a sinistra
Programmazione Grafica aa2005/2006
29
Summed area table - 2
• usato per filtrare la texture
spazio pixel
spazio texture
y
pixel
x
Calcola il BB dell’area del pixel nella texture e usa SAT per
calcolare il colore medio dell’area coperta dal BB
Programmazione Grafica aa2005/2006
30
Summed area table - 3
• Come si calcola la somma dei texel
nell’area tra A e B?
R’ = SAT[B] – SAT[C] – SAT[D] + SAT[A]
B
C
R
A
D
Il valore finale è la media:
R’ / (numero texels in R)
Programmazione Grafica aa2005/2006
31
Confronto
Non filtering
Mipmapping
Summed area table
Programmazione Grafica aa2005/2006
32
Texture mapping in OgL
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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 Texture
components 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
35
Dichiarazione del modo di
mapping
glTexCoord2f(s,t)
/* range di variazione delle coordinate dello spazio
texture
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
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”
Programmazione Grafica aa2005/2006
37
Minification, magnification
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 neighbourgh
GL_LINEAR applica un filtro smooth 2x2
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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)
Programmazione Grafica aa2005/2006
40
Bump mapping
Programmazione Grafica aa2005/2006
41
Bump mapping
n
• Perturbazione della
normale
• Funzione di bump
d(u,v):p'  p  d(u,v)n
• Meglio perturbare la
normale e non il punto
pu  pv
pu  pv
x 
 
u 
y 
pu   
u 
z 

u 

x 
 
v 
y 
pv   
v 
z 

v 

n'  p' u p' v
dove :
d
p' u  pu 
n  d(u,v)nu
u
d
p' v  pv 
n  d(u,v)nv
v
Programmazione Grafica aa2005/2006
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
Programmazione Grafica aa2005/2006
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
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)
mapping
sferico
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)
glEnable(GL_TEXTURE_GEN_S)
glEnable(GL_TEXTURE_GEN_T)
Programmazione Grafica aa2005/2006
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.5z 2
GLFloar fcolor[4] = […]
glEnable(GL_FOG)
glFogf(GL_FOG_MODE,GL_EXP)
glFoGf(GL_FOG_DENSITY,0.5)
glFogfv(GL_FOG_COLOR, fcolor)
Programmazione Grafica aa2005/2006
45
Scarica

Corso Di Programmazione Grafica aa2005/2006