Aplicación de textura - Centro de Computación Gráfica

Transcripción

Aplicación de textura - Centro de Computación Gráfica
Aplicación de textura
(“Texture Mapping”)
Rhadamés Carmona
modified by esmitt
Noviembre 2010
Contenido
Introducción
1. Técnicas Básicas
2. Técnicas Generales
3. Dependientes del punto de visión
4. Aplicación de Texturas en OGL
5. Otros aspectos
6. Bump Mapping
Aplicación de textura
Ayuda a dar apariencia más realística a las imágenes sintéticas
(producto de un “rendering”) generadas por computadoras.
Espacio de
textura (s,t)
Mapeo
de textura
Espacio objeto:
Coordenadas
de mundo (x,y,z)
Espacio
imagen (u,v)
Rendering
Asociar puntos de una superficie con una función de textura
Aplicación de textura
Tres tipos de Mapping:
1. Texture Mapping
2. Enviromental (reflection mapping)
3. Bump, Normal, Parallax Mapping
Aplicación de textura
Aplicación de textura
Espacio de
textura (s,t)
Mapeo
de textura
Espacio objeto:
Coordenadas
de mundo (x,y,z)
Espacio
imagen (u,v)
Rendering
t
s
Por indepenencia de las dimensiones de las imágenes, el
espacio de textura se encuentra normalizado en [0,1]
para s y t. La textura puede ser unidimensional (s),
bidimensional (s,t) o tridimensional (s,t,r).
Aplicación de textura

Se puede definir por ejemplo una aplicación
de puntos (s,t) de una textura bidimensional a
un objeto x,y,z. La aplicación puede definirse
punto por punto. En la práctica, el objeto
suele estar definido por un mallado de
polígonos, en donde la correspondencia se
define en los vértices de cada polígono, y se
interpola en el resto del polígono.
Aplicación de textura

También puede definirse las coordenadas de
textura en cualquier punto del objeto, si este
es por ejemplo definido paramétricamente. Si
el espacio de textura es s,t, y los parámetros
de la función son s,t, la correspondencia
puede hacerse fácilmente. Igualmente el
objeto es discretizado en triángulos y caemos
en el caso anterior.
Aplicación de textura
Ejemplo de una ecuación
Paramétrica 3D
0<=u,v<=6.28319
X(u,v)=COS(u)*u*(1.0+COS(v)/2.0)
Y(u,v)=u/2.0*SIN(v)
Z(u,v)=SIN(u)*u*(1.0+COS(v)/2.0)
Aplicación de textura 1D
Texel
interpolado
Centro de pixel
0
1
Dominio de textura
f(x) =
(1  t ) * A[left ]  t * A[right ]
x  x * (n  1)
left  x 
right  x 
t  x  left
Interpolación Lineal
Aplicación de textura 2D
textura 2D
t
Fragmento
texel
s
Interpolación bilineal
Para muestrear el texel
Aplicación de textura 2D
Aplicación de textura
2D
 =0
1, 3<0,2>0
(1,1)
p2
p
2, 3>0,1<0
1
1, 2>0,3<0
p
1=1, 2, 3=0
1, 2, 30
(0,0)
p3
1, 2<0,3>0
(s,t)
area ( p, p1 , p2 )
area ( p1 , p2 , p3 )
bx
by
1
3=0
p  i . pi
Mapeo a un triángulo
1 
1, 3>0,2<0
n
ax
area (a, b, c)  a y
1
2, 3<0,1>0
p1
i 1
cx
cy
1
2 
2=0
n

i 1
i
1
Coordenadas baricéntricas
de p respecto a p1,...,pn
area ( p1 , p, p3 )
area ( p1 , p2 , p3 )
3 
area ( p1 , p2 , p)
area ( p1 , p2 , p3 )
Aplicación de textura

GL_LINEAR versus GL_NEAREST
Textura 4x4
Polígono de 100x100
Pixels, con s,t en [0,1]
Polígono de 100x100
pixels
Aplicación de Textura

GL_CLAMP versus GL_REPEAT
Aplicación de textura
GL_CLAMP_TO_BORDER
Con coordenadas
En [0,1]
Con coordenadas
En [-1,2]
Textura 4x4
GL_CLAMP
Aplicación de textura 3D
Textura 3D
t
r
s
Interpolación trilineal
Nubes
Fuego
Resonancia
Aplicación de texturas




Magnificación versus minificación
Problemas con minificación… aliasing
Solución: mipmapping
Solución mejorada: mipmapping con
interpolación trilineal
Aplicación de Texturas:
Multitexturas
+
=
Utilizado en muchos casos para generar iluminación
1. Aplicación de textura básico:
mapeo esférico
(1,1)

(s,t)

r
(0,0)
Esfera definida paramétricamente
P( ,  )  (rCosSen , rSenSen , rCos )
(r,,)
Mapeo a una esfera

  [0,2 )  s 
 [0,1)
2

  [ / 2,  / 2)  t   0.5  [0,1)

1. Aplicación de textura básico:
Mapeo cilíndrico
r
(1,1)
(s,t)
A
(0,0)
Cada punto de la supeficie del cilindro puede expresarse
como (x,y,z)=(r.Cos, r.Sen, p), [0,2), p[0,A]
Mapeo a un cilindro

  [0,2 )  s 
 [0,1)
2
p
p  [0, A)  t   [0,1)
A
1. Aplcación de textura básico:
Textura a cuadrilátero (xMax,yMax,z )
0
(1,1)
(s,t)
Plano P,
z=z0
(0,0)
(xMin,yMin,z0)
Mapeo a un plano: z=z0


x
y

( x, y )  P  ( s, t )  
,
 ( xMax  xMin ) ( yMax  yMin ) 
1. Aplcación de textura básico:
Mapeo planar
De la forma más simple,
se escala el objeto a
[0,1] y se asigna como
coordenadas de textura
para cada (x,y,z) el valor
(s,t)=(x,y). Se puede
aplicar igualemnte con
los planos x-z o y-z.
s,t
x,y,z
2. Técnicas Generales
No hay una transformación directa entre los puntos del
objeto y la función de textura (generalmente una imagen 2D).
2.1 Mapeo
durante
modelado
2.2 Mapeo
a dos etapas
2.1 Mapeo durante modelado
Es usado si el objeto puede ser obtenido a partir de
deformaciones sobre las primitivas básicas (polígono,
esfera, cilindro), cuyo mapeo si está definido directamente.
T
T-1
2.2 Mapeo a dos etapas
No impone ninguna restricción sobre la topología del objeto.
1.- S-Mapping (Surface Mapping): Se realiza un mapeo sobre
una superficie intermedia:
•Una sección rectangular de un plano
•Una superficie curva de una cilindro
•Las caras de un cubo
•La superficie de una esfera
2.- O-Mapping (Object Mapping): Se mapea la textura de la
superficie intermedia hacia el objeto final.
4x4=16
Rayo de visión
reflejado
Centroide del
objeto
Normal del objeto
Normal de la
superficie intermedia
2.2 Mapeo a dos etapas
S(x’,y’,z’)
(s,t)
v
O(x,y,z)
N
(x’,y’,z’)
(x,y,z)
N
(x,y,z)
Normal del
objeto
Vector visión
reflejado
(x’,y’,z’)
(x,y,z)
Centroide del
objeto
(x’,y’,z’)
(x’,y’,z’)
(x,y,z)
Normal de la superficie
intermedia
2.2 Mapeo a dos etapas. Ejemplos.
S-Mapping cilíndrico
+
O-Mapping “normal
de la superficie
intermedia”
=
“Shrinkwrap”
No tiene imagen en el cilindro
S-Mapping cilíndrico
+
O-Mapping “normal
del objeto”
S-Mapping cúbico
+
O-Mapping “centroide
del objeto”
2.2 Mapeo a dos etapas. Ejemplos.
2.2 Mapeo a dos etapas. Ejemplos.
2.2 Mapeo a dos etapas. Ejemplos.
3. Dependiente del punto de visión
Lanzar rayos desde el punto de visión.
Por reflexión
v
Por refracción
N
(x’,y’,z’)
N
(x,y,z)
Vector visión
reflejado
Patrón de Textura
visión
4.Aplicación de Texturas en OGL

Tres pasos para aplicar una textura:
1. Especificar la textura
•
Leer ó generar la imagen
•
Asignar la textura
•
Habilitar la textura
2. Asignar las coordenadas de textura a los
vértices
3. Especificar los parámetros para la textura
4.Aplicación de Texturas en OGL
Especificar la textura

Definir una textura como un arreglo de texels
en memoria de CPU
Glubyte my_texels[512][512];


Leer los datos para llenar el arreglo
Habilitar las texturas
glEnable(GL_TEXTURE_2D);
OpenGL soporta texture maps de 1-4
dimensiones
4.Aplicación de Texturas en OGL
Definir una imagen como textura
glTexImage2D( target, level, components,w, h, border, format,
type, texels );
: tipo de textura, e.g. GL_TEXTURE_2D
level: utilizado para mipmapping
components: elementos por texel
w, h: ancho y alto de los texels en píxeles
border: utilizado para suavidad
format and type: describe texels
texels: puntero al arreglo de texels
target
glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB,
GL_UNSIGNED_BYTE, my_texels);
4.Aplicación de Texturas en OGL


OGL requiere que las dimensiones de las
texturas sean potencia de 2
Si las dimensiones de la imagen no son
potencia de 2
gluScaleImage( format, w_in, h_in, type_in, *data_in,
w_out, h_out, type_out, *data_out );

La imagen es interpolada y filtrada durante el
escalamiento
4.Aplicación de Texturas en OGL

glTexCoord*()especifica la coordenada de
textura en cada vértice
glBegin(GL_POLYGON);
glColor3f(r0, g0, b0);
glNormal3f(u0, v0, w0);
glTexCoord2f(s0, t0);
glVertex3f(x0, y0, z0);
glColor3f(r1, g1, b1);
glNormal3f(u1, v1, w1);
glTexCoord2f(s1, t1);
glVertex3f(x1, y1, z1);
.
.
glEnd();
4.Aplicación de Texturas en OGL
Parámetros de la textura




Los parámetros wrapping determinan que
pasa cuando (s,t) están fuera del rango [0,1]
Los filtros, habilitan emplear el promedio de
un área en vez de muestras puntuales
Mipmapping permite emplear texturas de
diferentes resoluciones
Parámetros de environment determina como
interactúa el mapping de la textura con el
sombreado
4.Aplicación de Texturas en OGL
Wrapping
Clamping: if s,t > 1 then1, if s,t <0 then 0
Wrapping: se emplea s,t modulo 1
glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_CLAMP )
glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T, GL_REPEAT )
t
s
texture
GL_REPEAT
wrapping
GL_CLAMP
wrapping
4.Aplicación de Texturas en OGL
texel
pixel
un pixel = menos de un texel
magnification
Screen Space
Texture Space
pixel
un pixel = más de un texel
minification
4.Aplicación de Texturas en OGL
v
Solución 1:
7.5
6.5
tomo el texel cuya
5.5
coordenadas u,v del
fragmento esten más cerca4.5
equivalente a tomar las 3.5
coordenadas redondeadas2.5
del valor u,v
1.5
"Nearest Filtering"
0.5
0.5
1.5 2.5
3.5 4.5
5.5 6.5
7.5 u
4.Aplicación de Texturas en OGL
Nearest Filtering: resultado visual
textura 128x128
“aquí está el texel!"
v
Solución 2:
7.5
6.5
Tomar el valor promedio de
5.5
los cuatro texeles vecinos
4.5
3.5
2.5
1.5
Interpolación Bilineal
0.5
0.5
1.5 2.5
3.5 4.5
5.5 6.5
7.5 u
4.Aplicación de Texturas en OGL
Interpolación Bilineal: resultado visual
textura 128x128
4.Aplicación de Texturas en OGL
Caso Minificación
Nearest Filtering
Bilinear interpolation
No sé resuelve el problema
4.Aplicación de Texturas en OGL
MIP-mapping: "Multum In Parvo"
MIP-map
level 2
MIP-map
level 3
MIP-map
level 1
MIP-map
level 0
MIP-map
level 4
(un solo texel)
4.Aplicación de Texturas en OGL
Bilinear interpolation
No sé resuelve el problema
MIP-mapping
4.Aplicación de Texturas en OGL
Filtros de Magnificación/Minificación
Vienen determinados por glTexParameteri(
target,
type, mode )
glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MAG_FILTER,
GL_LINEAR);
El modo linear requiere un texel extra para los
bordes (border = 1)
4.Aplicación de Texturas en OGL
Funciones
Controlan como va a ser aplicada una textura
glTexEnv{fi}[v]( GL_TEXTURE_ENV, prop, param )
modes
GL_MODULATE: modulates with computed shade
GL_BLEND: blends with an environmental color
GL_REPLACE: use only texture color
GL_TEXTURE_ENV_MODE
GL(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE);
Set blend color with GL_TEXTURE_ENV_COLOR
5.Otros aspectos
Textura + Iluminación
Usar la textura como el color final del píxel, ó
como el color difuso, ó para modificar el vector
normal, etc.
5.Otros aspectos
Adquisición de las texturas
Fotografías
•Superficies planas
•Iluminación constante (sin especular)
•Render 3D
•Texturas Procedurales
5.Otros aspectos
Texturas
+
=
5.Otros aspectos
Hecho a mano ó
automatizado
6. Bump Mapping
Propuesta por James Blinn, 1978. Consiste en perturbar
las normales según una función “Bump”, tal que, luego
del “render”, el objeto parezca tener baches y chichones
en la superficie, sin modificar la geometría.
Esta técnica, da el efecto real de textura en un objeto, y
no de “papel tapiz” como las otras técnicas.
6. Bump Mapping
6. Bump Mapping
Supongamos que el objeto está definido paramétricamente
como P(u,v)=(X(u,v), Y(u,v), Z(u,v)).
Llamemos F(u,v) la función de perturbación. Los nuevos
puntos Q(u,v) son perturbados en dirección de la normal N
(nota: M es el gradiente, mientras que N la normal).
Q(u, v)  P(u, v)  F (u, v).
M (u, v) 
M (u, v)
 P(u, v)  F (u, v).N (u, v)
M (u, v)
P(u, v) P(u, v)

u
v
6. Bump Mapping
La nueva normal puede calcularse como
M new (u, v) 
Q(u, v) Q(u, v)

u
v

P(u, v)  F (u, v).N (u, v)  P(u, v)  F (u, v).N (u, v)
u
v
N (u, v)   P(u, v) F (u, v)
N (u, v) 
 P(u, v) F (u, v)


.N (u, v)  F (u, v).


.
N
(
u
,
v
)

F
(
u
,
v
).
u
u   v
v
v 
 u
 P(u, v) F (u, v)
  P(u, v) F (u, v)



.N (u, v)  

.N (u, v)
0
u
v
 u
  v

P(u, v) P(u, v) F (u, v) 
P(u, v)  F (u, v)  P(u, v)
 F (u, v)
N (u, v)  N (u, v)



 N (u, v)  
 N (u, v) 


u
v
u 
v 
v  u
u

F (u, v) 
P(u, v)  F (u, v)  P(u, v)

 M (u, v) 
 N (u, v) 
 N (u, v) 


u 
v 
v  u


6. Bump Mapping
Caso de estudio: esfera
[0,2]
La expresión parámetrica de la esfera
[-, ]
P( ,  )  (rCosSen , rSenSen , rCos )
Derivadas parciales:
P( , )
 (  rSenSen , rCosSen ,0)

P( , )
 ( rCosCos , rSenCos , rSen )

La función de Bump será una imagen F(u,v), de
dimensiones widthxheight. La derivada en un punto (u,v)
lo podemos definir como diferencias finitas, con
u=0..width-1 y v=0..height-1
6. Bump Mapping.
Caso de estudio: esfera
F (u, v) F (u  1, v)  F (u  1, v)

u
2
F (u, v) F (u, v  1)  F (u, v  1)

v
2
Mapeo entre puntos de F(u,v) y la esfera P(,):
 width * height * (   ) 
(u, v)  
,

2
 2

6. Bump Mapping. Caso de estudio: esfera
Para cada (x,y,z) sobre la esfera hacer
N=(x,y,z);
Normalizar(N);
=arco_tangente(y/x);
=arco_coseno(z/r);
u=width* /(2*pi);
v=height*  /(pi)+0.5;
dFu=(F[u+1,v]-F[u-1,v])/2;
dFv=(F[u,v +1]-F[u,v -1])/2;
dPu=(-r*Sen()*Sen(), r*Cos()*Sen(),0);
dPv=(r*Cos()*Cos(), r*Sen()*Cos(),-r*Sen());
Nnew=N+dFu*Cross(N,dPv)+dFv*Cross(dPu,N);
Normalizar(Nnew);
Intensidad(x,y,z) = Mod_iluminación((x,y,z),Nnew);
FinPara
6. Bump Mapping. Caso de estudio: esfera
Función “Bump”
Imagen para el color
Se uso
Mapeo planar
Solo bump mapping
Solo texture mapping
ambas

Documentos relacionados