390 likes | 613 Views
Texturas. Visualización Computacional II. Horarios (again…). LUNES 26/10: Aula 2 Facultad (19 hs.): Introducción MARTES 27/10: Aula 2 Facultad (19 hs.): Texturas MIERCOLES 28/10: Aula 2 Facultad (19 hs.): Técnicas de iluminación avanzadas
E N D
Texturas Visualización Computacional II
Horarios (again…) • LUNES 26/10: Aula 2 Facultad (19 hs.): Introducción • MARTES 27/10: Aula 2 Facultad (19 hs.): Texturas • MIERCOLES 28/10: Aula 2 Facultad (19 hs.): Técnicas de iluminación avanzadas • JUEVES 29/10: Aula 3 Facultad (19 hs.): Sombras • VIERNES 30/10: Aula 2 Facultad (19 hs.): Animación - [Física] • LUNES 2/11: A determinar: [Física] - Optimización
Texturas - Resumen • ¿Por qué usar texturas? • Introducción • Conceptos básicos • Interpolación • Mapeo • Tiling • Mipmapping • Usos adicionales • Texturas procedurales • Lightmaps • Bump Mapping • Environment Mapping
Texturas - ¿Por qué usar texturas? • ¿Podemos representar todo con geometría?
Texturas - ¿Por qué usar texturas? • Sería costoso y complicado representar TODO con geometría. • Ej. MUY Simple: ¿Qué pasaría con una etiqueta?.
Unreal 3 – Epic Studios Texturas - ¿Por qué usar texturas? The Guild II - 4Head Game Studios
Texturas - Introducción • Podemos utilizar la textura para modifcar alguna o todas las vars / ctes. de la ecuación de iluminación (color de pixel, color difuso, alterar normal, etc.) Textura usada como color cte. Textura usada como color difuso. Textura usada como normal map.
Texturas - Introducción Para cada polígono se establece una correspondencia con la textura.
(0,1) (0,0) (1,0) Texturas - Mapeo eInterpolación • ¿Podemos interpolar de manera directa linealmente los valores en el espacio de la pantalla?.
Texturas - Mapeo eInterpolación • Interpolación lineal en espacio de coord. de pantalla: textura resultado esperado
Texturas - Mapeo eInterpolación • Podemos reducir los errores subdividiendo el modelo en triangulos más pequeños. • Igualmente persisten los “errores”.
Texturas -Mapeo eInterpolación • Los pasos uniformes de la interpolación en el plano de la pantalla no se corresponden con los pasos uniformes de la interpolación a lo largo del triángulo. Soluc.: Interpolación en el espacio [automática x OpenGL]
Texturas – Mapeo • Se especifica una coordenada (u,v) para cada vértice. • Coordenadas canónicas (0,0) (1,0) (0,3,0) glEnable(GL_TEXTURE); glBindTexture(texID); glbegin(GL_TRIANGLES); glVertex3f(0.0, 0.0, 0); glTexCoord2f(0,0); glVertex3f(0.0, 3.0, 0); glTexCoord2f(0,1); glVertex3f(3.0, 0.0, 0); glTexCoord2f(1,0); glend; (1,1) (0,0) (0,0,0) (3,0,0)
Texturas - Tipos de mapeo Generar automáticamente las coordenadas de textura: 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); Tipos: GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP, GL_REFLECTION_MAP
Texturas - Mapeo • Truco: • Coordenadas de textura en una matriz adicional (Texture Matrix). • Aplicar transformaciones a esa matriz para modificar las coordenadas.
(0,3) (0,3) (1,1) (1,1) (0,0) (0,0) (0,0) (3,0) (0,0) (3,0) Texturas - Tiling tiles con bordes visibles tiles sin bordes
Texturas - Mipmapping • Del Latín “MultumIn Parvo” (muchos en un lugar pequeño). gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, 128, 128, GL_RGBA, GL_UNSIGNED_BYTE, image); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
Texturas - Mipmapping • Se pueden almacenar de manera compacta. • Mínimo overhead para mantener un MIP map. Almac. en memoria Mip map de 10 niveles.
Texturas - Masking • “Recortar” parte de un gráfico (según color o siguiendo un patrón) • Dar aspecto de transparencia a lo que se ha recortado
Texturas - Masking • Alpha Test: • Se hace sobre el valor de la componente alpha que se está evaluando. • Una función y un valor de referencia, según el resultado se acepta o se rechaza el fragmento. glEnable(GL_ALPHA_TEST); glAlphaFunc (GL_GREATER, 0.1); GL_NEVER: Nunca acepta el fragmento. GL_ALWAYS: Siempre acepta el fragmento. GL_LESS: Acepta el fragmento si Alpha origen < Alpha referencia GL_LEQUAL: Acepta el fragmento si Alpha origen <= Alpha referencia GL_EQUAL: Acepta el fragmento si Alpha origen = Alpha referencia GL_GEQUAL: Acepta el fragmento si Alpha origen >= Alpha referencia GL_GREATER: Acepta el fragmento si Alpha origen > Alpha referencia GL_NOTEQUAL: Acepta el fragmento si Alpha origen <> Alpha referencia
Texturas - Masking glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) glEnable(GL_BLEND) • Alpha Blending: • Se hace sobre el valor de la componente alpha que se está evaluando, combinando un fragmento con otro • Probar!! (uds.)
Texturas - Uso de luces ¿Cuántas luces vemos en la escena? ¿Cálculo? ¿Ideas, opciones?
+ = Texturas - Lightmaps • La utilización de luces brinda realismo a nuestras escenas, pero ¿cuál es el límite?. • Notar que la mayoría de luces en una escena son estáticas. • ¿Se puede aprovechar de alguna manera esto para precalcular sombras e iluminaciones?.
Texturas - Lightmaps • Dibujar la geometría dos veces con distinta textura. • Costo memoria. • Costo GPU. • Lightmaps de poca resolución. • ¿Coordenadas?.
Texturas - Lightmaps • Mejora: Utilización de multitextura • Diferentes texturas a un mismo objeto. • Coordenadas de texturas independientes. • ¿Posibles usos?.
Texturas - Bump Mapping • Usar la textura para alterar la normal del polígono. Bump Map Esfera con textura (difuso y bump map) Esfera con textura (difuso) Ganar detalle sin incrementar la geometría
Texturas - Bump Mapping • Tomar la textura como una función de desplazamiento. • Calcular la normal a partir de esa función. • Diferentes opciones de implementación DESORDEN
Texturas - Bump Mapping (Fake) • Zonas negras Menor relieve • Zonas blancas Mayor relieve • Utilización de multitexturas. • Desplazamiento de la textura de Bump de acuerdo a la luz.
Texturas - Bump Mapping (Per Pixel) • Utilización de un Normal Map. • Nuevas aproximaciones en tiempo real mediante shaders. • Idea de Per-pixel lighting. • Los componentes XYZ son reescalados del rango [-1, 1] a [0, 255] • Por ejemplo el vector [0, 0, 1] (Normal perpendicular entrante) sería convertido a [127, 127, 255], el azul violáceo q predominan en estas texturas.
Texturas - Bump Mapping norm = vec3(texture2D(sampler2d, vec2 (gl_TexCoord[0]))); norm = (norm - 0.5) * 2.0; intensity = max(dot(lightDir, norm), 0.0) * diffuseFactor; • Norm: Valor de 0 a 1 • Norm - 0.5: Valor de -0.5 a 0.5 • (Norm - 0.5) * 2: Valor de -1 a 1
Texturas - Environment Mapping • Objetivo: Renderizar un objeto como si fuera perfectamente reflectivo. • Las reflexiones que vemos en el objeto dependen de: • Posición del espectador. • Forma del objeto. • Environment Map es una aproximación (se asume que los objetos del entorno están muy lejos del objeto reflectivo)
Texturas - Environment Mapping • Se utiliza la dirección del rayo reflectado para indexar una posición en una textura con coordenadas esféricas. • Se asume que todos los rayos comienzan en el mismo punto.
Texturas - Texturas procedurales • F(x,y,z) è color
Texturas - Texturas procedurales • Ventajas: • Fácil de implementar en un raytracer/shaders. • Menos espacio. • Resolución infinita. • Desventajas: • No intuitivo. • Sirven para situaciones puntuales.