Técnicas avanzadas

Magnificación y minimización

Cuando la cantidad de píxels no coincide con la cantidad de téxels aparecen efectos visuales que disminuyen la calidad del resultado, entonces se utilizan filtros.

Para poder suavizar los defectos y adaptar las texturas, se aplican una serie de operaciones o filtros:


Mip mapping

Los objetos sobre los que se han aplicado texturas pueden ser vistos, al igual que cualquier otro objeto, a diferentes distancias dependiendo de la posición del observador. En una escena dinámica, por ejemplo, cuando un objeto se aleja de la posición del observador, la textura debe disminuir en tamaño en relación con la imagen proyectada.

Una técnica utilizada para realizar este efecto consiste en obtener un conjunto de texturas de resoluciones decrecientes llamadas mipmaps (Mip, viene de un acrónimo en latín que significa "Muchas en una"), de tal forma que a medida que el observador se aleja de un objeto se utilizará una imagen de resolución menor y a medida que se acerca se utilizará una imagen de resolución mayor. A continuación vemos un ejemplo de una imagen a distintas resoluciones.





Esta técnica tiene como ventajas que aumenta el grado de realismo de las imágenes y se consigue cierta aceleración en la representación de las escenas ya que las texturas de menores resoluciones ocupan menos memoria.




Para utilizar mipmapping con OpenGL se deben proporcionar texturas de todos los tamaños en potencias de dos tales que los tamaños estén comprendidos entre la resolución máxima y la resolución 1x1. Por ejemplo si la máxima resolución es 64x16 se debe proporcionar además de ésta textura, texturas de dimensiones 32x8, 16x4, 8x2, 4x1, 2x1 y 1x1. Sin embargo, para facilitarnos un poco la vida, la librería de utilidades OpenGL proporciona dos funciones (gluBuild1DMipmaps y gluBuild2Dmipmaps) que generan automáticamente imágenes multimapa basadas en una única textura de alta resolución, es decir dada una única textura, genera automáticamente texturas para resoluciones menores.

Videos que ilustran esta técnica:

Filtrado bi-lineal y tri-lineal

Esos 2 modos se emplean para el mapeado de texturas.Se aplican a texturas para mejorar su calidad, en general cuando nos acercamos a un objeto el motor gr$acute;fico tiende a distorsionarla. Esto se solucionaría en principio con un filtrado por antialiasing,este filtro que es bueno eliminando los bordes no es el adecuado para este caso, dado que lo habitual será que un texel defina el color de varios pixels, lo cual se traduce en mapeados poco realistas con las texturas muy escalonadas. Para estos casos se prefiere utilizar los filtros que describiremos a continuación, a pesar de que se carga más al procesador:

Filtro anisotrópico

Después de que se comenzara a utilizar el filtrado bilinieal y trilineal, las tarjetas gráficas mejoraron mucho su capacidad de proceso, permitiendo desarrollar el llamado filtrado anisotrópico (a partir de la gama GeForce3 de nVidia). El filtrado anisotrópico mezcla la función de aplicar una textura en todas sus dimensiones, implementando filtrados bilineales o trilineales de forma mucho más precisa para difuminar las líneas de los píxeles, en función del ángulo y la distancia desde la que se visualizan. En definitiva, logra que las texturas tengan un aspecto más realista y evita que se produzcan "bailes de píxeles" con texturas que están a mayor distancia o en ángulos oblicuos desde nuestra perspectiva.

Merece la pena activarlo en entornos bajo OpenGL o Direct3D, aunque sólo si dispones de una tarjeta de última generación, ya que sino puede afectar gravemente el rendimiento. Para activar esta función se deberá acceder al panel de control de la tarjeta gráfica en las propiedades OpenGL, y en algunos juegos esta opción estará en su menú de propiedades de video.

En una palabra, que sin filtro anisotrópico la textura pierde calidad y se vuelve borrosa en la lejanía y con el filtro anisotrópico activado no.

El efecto de este filtro podemos observarlo en juegos como Serious Sam, Quake3, o Unreal Tournament. En primer lugar veremos ejemplos de imágenes en el juego Serious Sam:


En esta captura se puede observar la diferencia que hay entre activar este filtrado y no hacerlo en la nitidez de las baldosas del suelo.

Para el juego Quake3 se puede observar el efecto del filtro anisotrópico en las siguientes dos imágenes:


Se puede ver la diferencia tanto en la nitidez de las bladosas como en el suelo de la parte inferior de la imagen.

Por último, también podemos observar el efecto del filtro en un popular juego: Unreal Tournament:


Anti Aliasing

Por aliasing se conoce a un fallo en la representación de los gráficos debido a que la resolución final (la del soporte de visualización) es finita. Existen diferentes tipos de aliasing visual, pero normalmente nos referimos al aliasing geométrico, efecto que consiste en la presencia de dientes de sierra en los bordes de los polígonos. El efecto de aliasing dá a las imágenes una apariencia tosca.

Por antialiasing se conoce al efecto de filtrar la imagen para suavizar y disimular los bordes de los polígonos, consiguiendo una apariencia mucho más realista. A continuación se presenta una imagen con aliasing y una versión sin aliasing:



Se explican a continuación los diferentes tipos de anti-aliasing. Los dos primeros son los llamados clásicos, los siguientes son técnicas específicas de algunas tarjetas gráficas.

Alpha Blending

Alpha Blending es una técnica que permite crear objetos transparentes. Normalmente, un píxel que aparece en pantalla tiene valores de rojo, verde y azul. Si el escenario 3D permite usar un valor alfa para cada pixel, tenemos un canal alfa. Un objeto puede tener diferentes niveles de transparencia: por ejemplo, una ventana de cristal limpia tendría un nivel muy alto de transparencia (un valor alfa muy bajo), mientras que un cubo de gelatina podría tener un valor alfa medio. El Alpha Blending es el proceso de combinar dos objetos en pantalla teniendo en cuenta los valores alfa. Así sería posible tener un monstruo medio oculto tras un cubo de gelatina de fresa que estaría teñido de rojo y difuminado. Si la tarjeta soporta alpha blending por hardware, el programador no necesita usar una rutina por software más lenta para asegurarse de que los objetos transparentes se dibujan correctamente.


Esta técnica se utiliza para crear efectos de transparencia, tales como los vistos en cristales u objetos líquidos. Por supuesto, también se aplica para imitar objetos traslúcidos.

Mostramos con tres imágenes el proceso de Alpha blending:

Imagen original: Seria la imagen a mostrar tras la capa transparente o translúcida


Imagen superpuesta: Seria la capa que se superpone a la imagen original y que marca la transparencia del medio sobre el que se esconde esta imagen. Cada pixel tiene asignado un valor que va desde el 0,0, que seria un pixel totalmente transparente, hasta el 1,0, que seria totalmente opaco.


Imagen final: Los pixeles más o menos transparentes de la imagen superpuesta permiten ver los pixeles de la imagen original que tienen debajo con la claridad que el programador desee.


Multitexturing

El multitexturizado (multitexturing) es la aplicación de múltiples texturas a un mismo objeto para conseguir nuevos efectos sobre lo que sería una textura base, de este modo se pueden conseguir nuevos efectos para una misma textura sin tener que almacenar diferentes variantes de ella.

Videos que ilustran esta técnica:

Compresión de texturas

Comprimir texturas es como comprimir MP3, los algoritmos de compresión logran una relación 4:1 que no es mucho pero ayuda.

Bump mapping

Bump mapping es un efecto visual que permite ofrecernos objetos con relieve, aunque realmente este sea liso. Esta técnica se utiliza para agregar el detalle a una imagen sin aumentar el número de polígonos.


Bump mapping es una especie de "trampa" visual que permite ofrecernos objetos con relieve.

Se lleva a cabo modificando las normales de la superficie, sin tocar la geometría del objeto, para luego aplicar la iluminación a cada uno de los píxeles. Por ello, si nos acercamos lo suficiente a una superficie con Bump mapping, el efecto se pierde, pues el relieve no es real. Esto se puede observar en el siguiente video de un mod del videojuego Half Life 2 (PC, XBox 360, PS3).

Hay tres tipos de Bump Mapping. El primero y más sencillo es el Emboss Bump Mapping, que se basa en la creación de de un mapa de alturas sobre el que luego se aplica la textura y los correspondientes efectos de luz.

El segundo es el denominado Dot Product 3 Bump Mapping, que se basa en asignar un vector a cada píxel de modo que cada uno actue frente a la luz de la manera que le indique ese vector. Es más efectivo que el Emboss ya que permite representar reflejos además de las clásicas sombras.

La última, más compleja y más efectiva técnica de Bump Mapping la constituye el ya conocido Environment Mapped Bump Mapping (EMBM), también conocido como Bump Mapping de perturbación. Este efecto se basa en la misma técnica que el Dot Product 3 de aplicar un vector a cada píxel de modo que éste sepa cómo actuar ante cada circunstancia de luz. La diferencia del EMBM radica en que ese vector es variable, pudiendo modificarse las propiedades de cada pixel constantemente. Este bump mapping es especialmente efectivo a la hora de mostrar superficies rugosas en movimiento, como puede ser el mar desde un avión.


Comparación de las 3 técnicas de Bump Mapping. De izquierda a derecha: Emboss Bump Mapping, Dot Porduct 3 Bump Mapping y EMBM.

Environment mapping

Environment mapping (mapeado del entorno) es una forma de mapeado de texturas en la cual las coordenadas de la textura son dependientes de la vista. Una aplicación común, por ejemplo, es simular reflejo en un objeto brillante. Uno, por ejemplo, le puede mapear el entorno de un cuarto a una copa de metal. Si la cá se mueve alrededor de la copa, las coordenadas de la textura en los vertices de la copa se mueven proporcionalmente, creando la ilusión de estar ante un objeto de metal reflectante.

Esta técnica de mapeado proporciona una gran sensación de realismo, ya que en el mundo real existen un sinfín de objetos que producen algún tipo de reflejo del entorno que los rodea. Para producir esta sensación hay tres formas de hacerlo:

Es una técnica que tiene mucho de dinamismo, por lo que mostraremos a continuación unos vídeos mostrando lo que es capaz de hacer:

Podemos observar también en las siguientes imágenes procedentes de una película de 1986 (Flight of the navigator, de Randal Kleiser) la primera aplicación de esta técnica en el cine:



Normal mapping

Normal mapping es la aplicación de una técnica 3D que permite dar una iluminación y relieve mucho más detallado a la superficie de un objeto. Es una evolución del bump mapping y se aplica en videojuegos a los que les dota un mayor realismo, así como en películas de animación para agilizar los cálculos y reducir por tanto el número de polígonos con los que en un principio contaban los objetos.

Mientras que el bump mapping seria un mapa de relieve en el que solo se representa la altura, normal mapping representa los tres ejes X,Y,Z. Luego la información por pixel no se aplica en tonos de grises el cual representaría la altura, sino en colores RGB dando más fidelidad al original que se quiere imitar. Este efecto recrea el relive de una maya detallada pero el observador al acercarse a dicho objeto perderá la sensación de relieve puesto que se trata solo de un simple efecto.


Video que ilustra este efecto:

Parallax mapping

También llamado offset mapping o virtual displacement mapping, es una mejora de las técnicas Bump mapping o Normal mapping. Su finalidad es darle profundidad y realismo a una textura, de forma que el usuario perciba lo que esta representa como si tuviese relieve. Fué introducido por Tomomichi Kaneko en 2001.


Resultado de la aplicación del Parallax mapping en unas escaleras en el videojuego Mass Effect (XBox360, PC)

Se logra implementar desplazando las coordenadas de la textura a un punto en el polígono por una función desde el ángulo de vista en el espacio de la tangente (el ángulo relativo a la superficie normal) y el valor del mapa de alturas en tal punto. Desde un punto de vista inclinado, las coordenadas de la textura se desplazan más, y así se logra la ilusión de profundidad debido a los efectos parallax mientras la vista se mueve.

Esta técnica tiene varias versiones, una de ellas es el Parallax Occlusion Mapping. El Parallax mapping descrito por Kaneko es un proceso de un único paso que no tiene en cuenta la oclusión. El término oclusión viene de que ciertos elementos de la textura pueden tapar a otros que están detrás, lo que le dá un efecto muy interesante, ya que esto hace que podamos simular relieves muy complejos sin tener que introducir geometría adicional.


Resultado de la aplicación del Parallex Occlusion Mapping en el videojuego Crysis (PC)

Otra técnica derivada del Parallax mapping es el Steep Parallax Mapping, con la que se consiguen ligeras mejoras en el resultado para lograr superficios rugosas, en comparación con el algoritmo original.


Comparación de las dos técnicas. Se puede observar la mejora que presenta el aplicar el Steep Parallax Mapping.

Displacement mapping

Es una técnica de gráficos computacionales alternativa al bump mapping,normal mapping y parallax mapping.Utiliza una textura sobre el mapeado original para producir el efecto de que la actual posición geométrica de los puntos de la superficie de la textura estan desplazados y en relieve sobre la normal de la superficie,evaluando punto a punto ambas supeficies.Consigue producir asombrosos efectos de sombreados,siluetas y profundidad.

En su contra tiene que es una técnica altamente costosa para los recursos de la máquina.