Rasterización
La rasterización es el proceso por el cual una imagen descrita en un formato gráfico vectorial se convierte en un conjunto de pixeles o puntos para ser desplegados en un medio de salida digital, como una pantalla de computadora, una impresora electrónica o una imagen de mapa de bits(bitmap).
Introducción
El término Rasterización puede ser aplicado en general a cualquier proceso por el cual la información vectorial puede ser convertida en format raster.
En el uso cotidiano, el término se refiere al popular algoritmo de renderizado para la visualización de figuras 3D en una computadora. La Rasterización es actualmente la técnica más popular para producir gráficos 3D en tiempo real. Las aplicaciones en tiempo real deben responder inmediatamente a lo qué el usuario haga y por ende producir al menos 25 cuadros por segundo para conseguir una animación suave.
Comparado con otras técnicas de renderizado 3D como Ray tracing, la Rasterización es extremadamente rápida. Sin embargo, esta es simplemente el proceso de computar el mapeado desde la geometría de la escena hasta los pixeles y no lleva a una forma particular de computar el color de esos pixeles. El Sombreado, incluyendo sombrado programable, puede estar basado en transporte de luz física o motivo artístico.
Al estar las pantallas modernas orientadas a gráficos raster, la diferencia entre solo raster y gráficos vectoriales está en dónde son rasterizadas; del lado del cliente en el caso de gráficos vectoriales, a diferencia de lo rasterizado en el servidor.
Enfoque básico
El algoritmo de rasterización más simple toma una escena 3D, descrita en polígonos y la proyecta sobre una superficie 2D, usualmente un monitor de PC. Los polígonos son representados como un conjunto de triángulos, estos últimos representados por tres vertices en tres espacios. A un nivel muy básico, los rasterizadores solo toman una cantidad de vertices, los transforman en puntos bidimensionales correspondientes a un monitor y rellenan los triángulos bidimensionales transformados de forma apropiada.
Clipping(recorte)
Una vez que los vertices de los triángulos son transformados a sus localizaciones 2D previstas, algunas de esas localizaciones pueden quedar fuera de la ventana de visualización, o del area de la pantalla en la cual los pixeles pueden ser representados. Clipping es el proceso de cortar los triángulos de manera que ocupen el area visible.
La técnica más común es la del algoritmo Sutherland-Hodgeman. En esta aproximación, cada una de las 4 esquinas del plano de imagen es probada en un tiempo. Para cada esquina, probar todos los puntos a ser renderizados. Si el punto queda fuera de la esquina, este se elimina. Por cada borde de triangulo que es intersectado por la esquina del plano de imagen, osea, un vertice de la esquina está dentro de la imagen y otro fuera, un punto es insertado en la intersección y el punto exterior es eliminado.
Conversión de escaneo
El paso final en el proceso de rasterización tradicional es rellenar los triágulos 2D que ahora están en el plano de imagen. Esto también es conocido como conversión de escaneo.
El primer problema a considerar es si dibujar o no un determinado pixel. Para que un pixel sea renderizado, este debe estar dentro de un triángulo y no debe estar oculto, o bloqueado por otro pixel. Hay varios algoritmos para rellenar los pixeles dentro de un triángulo, el más popular de ellos es el algoritmo de linea de escaneo. Al ser difícil saber si el motor de rasterización dibujará todos los pixeles de adelante hacia atras tiene que haber alguna manera de asegurarse que los pixeles cerca del observador no están siendo superpuestos por pixeles más lejanos. Un z buffer es la solución más común. El z buffer is una disposición 2D que corresponde al plano de imagen que almacena un valor de profundidad para cada pixel. Cada vez que un pixel es dibujado, este actualiza el z buffer con su valor de profundidad. Cada nuevo pixel debe verificar su valor de profundidad con el valor de z buffer antes de ser dibujado. Los pixeles más cercanos son dibujados mientras que los más lejanos son descartados.
Para averiguar el color de un pixel, deben ser aplicados cálculos de texturas y sombreado. Un mapa de textura es un mapa de bits aplicado a un triángulo para definir su aspecto. Cada vertice en un triángulo también está asociado a una textura y a una coordenada de textura (u,v) para texturas 2D normales además de su coordenada de posición. Cada vez que se renderiza un pixel en un triángulo, el texel (texture element o elemento de textura) debe ser encontrado en la textura. Esto se logra interpolando las coordenadas de textura asociadas a los vértices del triángulo con la distancia en pantalla de los pixeles desde los vertices. En proyecciones de perspectiva, la interpolación se hace sobre las coordenadas de texturas divididas por la profundidad del vértice para evitar un problema llamado perspective foreshortening.
Antes de que el color final del pixel sea decidido, un cálculo de iluminación debe ser computado para sombrear a los pixeles basados en alguna luz que puede estar presente en la escena. Por lo general hay tres tipos de luces comunmente usadas en escenas; Luces direccionales son luces que van en una sola dirección y tienen la misma intensidad en toda la escena. En la vida real, la luz solar está muy cerca de ser una luz direccional, al estar el sol tan lejos que los rayos de él parecen estar paralelos a observadores ubicados en la Tierra y la atenuación es despreciable. Luces de punto son luces con una posición definida en el espacio que irradian luz uniformemente en él. Las Luces de punto están usualmente sujetas a alguna forma de atenuación, o caida en la intensidad lumínica incidente sobre objetos más lejanos. En la vida real las fuentes de luz experimentan atenuación cuadrática. Finalmente, los focos son como los de la realidad, con un punto definido en el espacio, una dirección, y un ángulo que define el cono del foco. Frecuentemente se encuentra tambien un valor luz ambiental que se añade a todos los cálculos de iluminación finales para compensar arbitrariamente la falta de efectos de iluminación global los cuales no son calculados correctamente por la rasterización.
Existen varios algoritmos de sombreado para los rasterizadores. Todos los algoritmos de sombreado deben tomar en cuenta la distancia desde la luz y el vector normal del objeto sombreado con respecto a la dirección incidente de la luz. Los algoritmos más rápidos simplemente sombrean todos los pixeles sobre cualquier triángulo dado con solo un valor de iluminación, también conocidos como sombreado plano. No hay forma de crear la ilusión de superficies suaves con este método excepto subdividiendo en triángulos más pequeños. Los algoritmos pueden también sombrear vértices separadamente e interpolar el valor lumínico de los vértices al dibujar los pixeles. Esto es conocido como sombreado Gouraud. La más lenta pero más realista aproximación es calcular la luz separadamente para cada pixel, también conocido como sombreado Phong. Este realiza interpolación binaria de los vectores normales y usa el resultado para hacer calculos de iluminación locales.
Técnicas de aceleración
Para extraer el máximo rendimiento de un motor de rasterización, un número mínimo de polígonos debe ser enviado al renderizador. Unas cuantas técnicas de aceleración se desarrollaron a través del tiempo para remover objetos no visibles.
Backface culling(eliminación del enfrentamiento trasero)
La forma más simple de eliminar polígonos innecesarios es eliminar todos aquellos que el observador no puede ver. Esto se conoce como backface culling. Ya que la mayoría de los objetos 3D son completamente cerrados, los polígonos no enfrentados al observador están siempre bloqueados por polígonos que sí lo están, excepto cuando el observador está dentro del objeto. El enfrentamiento de un polígono esta definido por el winding u orden en el que sus vértices se envían al renderizador. Un renderizador puede definir un winding en el sentido de las agujas del reloj o contrario como enfrentamiento hacia el frente o hacia atrás. Una vez que un polígono se transformó a un espacio en la pantalla, su winding puede ser verificado y si esta en la dirección opuesta, no es dibujado. Por su puesto, backface culling no puede ser usado con volumenes abiertos o degenerados.
Estructuras de datos espaciales
Técnicas más avanzadas usan estructuras de datos para eliminar objetos que están fuera del volumen visible o tapados por otros objetos. Las estructuras de datos más comunes son particionado binario del espacio, octree y eliminación de celda y portal.
Mejoras posteriores
Si bien el proceso de rasterización básico hace décadas que se conoce, las aplicaciones modernas siguen haciendo optimizaciones y adiciones para aumentar el rango de posibilidades del motor de rasterización.
Filtrado de texturas
Las texturas son creadas a resoluciones específicas, pero ya que la superficie en donde están aplicadas puede estar a cualquier distancia del observador, estas pueden mostrarse en tamaños arbitrarios en la imagen final. Como resultado, un pixel en la pantalla usualmente no corresponde directamente a un texel. Alguna técnica de filtrado debe ser aplicada para lograr imagenes claras a cualquier distancia. Hay varios metodos, con diferentes relaciones entre calidad de imagen y complejidad computacional.
Environment mapping(mapeado del entorno)
Environment mapping 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 brilloso. Uno, por ejemplo, le puede mapear el entorno de un cuarto a una copa de metal, como el observador se mueva alrededor de la copa, las coordenadas de la textura en los vertices de la copa se mueven proporcionalmente, dando la ilusión de metal reflectivo.
Bump mapping(mapeado de imperfecciones, golpes, rugosidad)
Bump mapping es otra forma de mapeado de textura que no provee a los pixeles de color sino de profundidad. Especialmente con pixel shaders modernos, bump mapping crea la sensación de rugosidad dependiente de la luz y el punto de vista en una superficie para aumentar el realismo.
Nivel de detalle(LOD)
En mucha aplicaciones modernas, el número de polígonos en una escena puede ser impresionate. Sin embargo, un observador en una escena solo podrá discernir detalles de objetos cercanos. Los algoritmos de nivel de detall varian la complejidad de la geometría en función de la distancia al observador. Los objetos justo enfrente del observador pueden ser mostrados en su completa complejidad mientras que los objetos que están más lejos pueden ser simplificados dinamicamente, o inclusive reemplados por sprites.