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, 30 (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( , ) (rCosSen , rSenSen , 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( , ) (rCosSen , rSenSen , rCos ) Derivadas parciales: P( , ) ( rSenSen , rCosSen ,0) P( , ) ( rCosCos , rSenCos , 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