Este texto es una mera aproximación al problema del aliasing y sus posibles soluciones. Es bastante probable que contenga errores, pero creo que puede aclarar algunos conceptos. Hay un hilo iniciado por Sergiman en el que se explica de forma resumida la generación de las imágenes.
ANTIALIASING
1.- ¿En qué consiste?
Por aliasing se conoce a un fallo en la representación de los gráficos debido a que la resolución final 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 da a las imágenes una apariencia tosca, que reduce la inmersión en el juego debido a una sensación de irrealidad en los gráficos. Por antialiasing se conoce al efecto de filtrar la imagen para suavizar los bordes, y disimular los bordes de los polígonos, consiguiendo una apariencia mucho más realista.
2.- ¿Cómo se pasa de la geometría a los gráficos?
Este proceso se conoce como rasterizar. El primer paso que se realiza tras recibir un triángulo, que está situado en un mundo tridimensional, es realizar una proyección en el plano de la imagen, pasando a poseer únicamente dos coordenadas, X e Y.
Conocidos los tres vértices del triángulo, se determinan los tres lados. Para aplicar las texturas al triángulo, se calculan las coordenadas de cada pixel del interior del triángulo y se calcula que pixel de la textura corresponde a ese punto (aplicando corrección de perspectiva)
Así es como se ve un triángulo rasterizado. Como se puede comprobar, los fallos son inevitables. ¿Cómo se pueden limitar estos fallos?
Al rasterizar el triángulo, solo se ha tenido en cuenta si el punto central del pixel estaba dentro de él o no. Una consecuencia de este método es que aparece el típico error de diente de sierra o escalera, donde debería haber un borde suave. Para reducir este error se puede tener en cuenta que porcentaje del pixel está cubierto. La realidad es que esto no se puede calcular con precisión de manera rápida, por lo que las tarjetas gráficas realizan una aproximación.
3.- Supersampling ordenado.
El supersampling es una de las formas de antialiasing. Consiste en escalar la imagen multiplicando la resolución de los ejes X e Y por un número entero, y renderizarla a mayor tamaño del original. Tras realizar este proceso, se pasa al tamaño original mediante un filtro de reducción, por lo que varios píxeles de la imagen renderizada a mayor resolución se utilizan para calcular el valor de los píxeles de la resolución final. De este modo se consiguen transiciones más suaves.
2x2 supersampling: La resolución interna es cuatro veces el tamaño original.
Tras el filtro de reducción la imagen tiene transiciones más suaves. El valor de color se da en función del número de puntos centrales de los subpíxeles que quedan dentro del triángulo, en cada pixel.
4.- Supersampling rotado.
El supersampling rotado es una forma de supersampling en la cual se puede conseguir mejores resultados visuales que con el supersampling ordenado, pero con el mismo coste en rendimiento, mediante la elección de una mejor posición del punto de muestreo en los subpíxeles. Posteriormente se explicará el motivo por el cual un patrón rotado a la hora de elegir los subpíxeles es mejor que uno ordenado, con un ejemplo aplicado al multisampling.
5.- Multisampling.
La innovación que aporta el multisampling respecto al supersampling es que solo se calcula un valor de la textura por pixel, en vez de un valor por cada subpixel como en el supersampling. Mientras que en el supersampling se renderiza la imagen al completo a mayor resolución de la original, en el multisampling solo se hace para la geometría, no para las texturas. Esto ahorra tanto tasa de relleno como ancho de banda.
El ahorro es menor en ancho de banda debido a que aunque solo se genera un valor de color por pixel, lo que ahorra tasa de relleno, este valor debe ser almacenado por separado para cada subpixel.
6.- Patrón ordenado y patrón rotado.
A la hora de posicionar los subpíxeles, se puede elegir un patrón ordenado o un patrón rotado. La ventaja de un patrón rotado es que se obtienen gradientes de color más suaves, lo que permite una calidad muy superior con la misma pérdida de rendimiento. Un patrón 4x ordenado dobla la exactitud a la hora de realizar el muestreo en ambos ejes respecto a no utilizar antialiasing, mientras que con un patrón 4x rotado obtenemos cuatro veces la exactitud de muestreo de una imagen sin antialiasing.
Como se puede observar, con el patrón rotado se consigue una transición más suave, por lo que se obtiene una imagen de mayor calidad con el mismo consumo de recursos.
Con un patrón rotado 2x se consigue una exactitud de muestreo similar a la que se obtiene con un patrón ordenado 4x, pero tomando únicamente la mitad de muestras, lo que permite una calidad similar con mucho menor pérdida de rendimiento.
Las tarjetas nVidia anteriores a la gama 6 utilizaban un patrón ordenado, desde la gama 6 un patrón rotado. En el caso de las tarjetas de ATI, las tarjetas anteriores a la 9500 utilizaban un patrón ordenado, y desde la 9500 utilizan un patrón rotado.
7.- Ventajas e inconvenientes de cada técnica.
Una de las ventajas del supersampling es que realiza un filtrado de las texturas similar al del filtrado anisótropo, consiguiendo que las texturas tengan mayor definición. El filtrado anisótropo permite aumentar la calidad de las texturas con un descenso de rendimiento muy inferior, por lo que es preferible una combinación de multisampling y anisótropo, antes que un supersampling. El principal problema del multisampling es con las llamadas texturas alfa.
Al almacenar una textura, se guardan los tres canales de color (rojo, verde y azul) con otro canal llamado canal alfa. El canal alfa indica el valor de transparencia de un punto de la textura, y sirve para simular geometría. Un ejemplo claro es el de las rejas o las ramas de un árbol. Simulan ser geometría, pero únicamente es una textura con partes transparentes y partes opacas. Esto sirve para reducir la carga geométrica, consiguiendo acelerar el renderizado al limitar el número de polígonos.
Es una técnica muy utilizada en juegos antiguos, pero que se sigue utilizando en la actualidad. Un ejemplo claro de esta técnica es el de las rejas metálicas del Half Life 2, que no son más que un rectángulo con partes opacas (la reja) y partes transparentes (los huecos que dejan ver el fondo) En los bordes entre las partes opacas y las partes transparentes se produce aliasing. El supersampling suaviza estos bordes al realizar antialiasing en las texturas, pero el multisampling no al realizarlo sólo en la geometría.
8.- Antialiasing de texturas transparentes.
Para solucionar el problema del aliasing en las texturas transparentes, tanto nVidia como ATI han desarrollado técnicas de antialiasing mixtas, que realizan supersampling únicamente en las texturas alfa. Los llamados antialiasing transparente (en la gama 7 de las tarjetas GeForce) y el antialiasing adaptativo (En las tarjetas de ATI desde la 9500) realizan este proceso, con un consumo de tasa de relleno proporcional a la utilización de texturas transparentes en pantalla. A mayor utilización de texturas transparentes, mayor será la reducción de prestaciones que tendremos. La ventaja es que conseguimos una calidad de imagen muy similar a la del supersampling, pero con un rendimiento muy superior. Esto hace que en las tarjetas modernas se esté abandonando el supersampling debido a que la mejora en calidad visual no compensa la pérdida de rendimiento que conlleva esta técnica.
Imagen a la que se le ha aplicado multisampling. Como se puede observar, los bordes de los objetos geométricos si tienen transiciones suaves, pero los objetos realizados a base de texturas transparentes (las rejas de la pasarela en este caso) no están suavizados.
Imagen a la que se le ha aplicado multisampling con antialiasing de texturas transparentes. Como se puede observar, los bordes de los objetos realizados a base de texturas transparentes si están suavizados, con lo que la calidad de la imagen es muy superior.
La version "gif" de las 4 imagenes de arriba
(http://www.elitebastards.com/anipic.php?picid=hanners/club3d/x1900xtx/iq/aaa/aaa-&frames=4&ext=jpg&speed=2000)