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 píxeles 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). Este procedimiento se suele usar en momentos muy concretos:
El resultado de este método de trabajo híbrido es un archivo que presenta ciertas partes vectoriales y ciertas partes bitmap. El mismo puede guardarse sin mayor problema en el formato correspondiente al programa de ilustración (en algunos casos, se permite que el mapa de bits no forme parte del archivo, sino que se enlace externamente al fichero vectorial solamente).
La palabra ráster proviene del inglés raster, anteriormente utilizada en el vocabulario técnico de la televisión para referirse a un tubo catódico. Por analogía con los surcos dejados por un rastrillo. El ráster o rastrum es una pequeña pluma de escritura provista de cinco puntas y utilizada para trazar pentagramas musicales. El uso de la palabra ráster se testifica en el latín medieval en referencia a la herramienta que sirve para rastrillar el sembrado: rastra, rastrillo, rastro.
El término rasterización puede ser aplicado en general a cualquier proceso por el cual la información vectorial puede ser convertida en formato de mapa de bits.
En el uso cotidiano, el término se refiere también a los algoritmos 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 que 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 píxeles y no lleva a una forma particular de computar el color de los mismos. El Sombreado, incluyendo sombrado programable, puede estar basado en transporte de luz física o motivo artístico.
Al estar las pantallas modernas orientadas al despliegue de mapas de bits, la diferencia los mismos y los gráficos vectoriales está en dónde ocurre el proceso de rasterización; del lado del cliente, en el caso de gráficos vectoriales, a diferencia de lo rasterizado en el servidor...
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 vértices en tres espacios. A un nivel muy básico, los rasterizadores solo toman una cantidad de vértices, los transforman en puntos bidimensionales correspondientes a un monitor y rellenan los triángulos bidimensionales transformados de forma apropiada.
Una vez que los vértices 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 área de la pantalla en la cual los píxeles pueden ser representados. Clipping es el proceso de cortar los triángulos de manera que ocupen el área 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 triángulo que es intersecado por la esquina del plano de imagen, o sea, un vértice 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.
El paso final en el proceso de rasterización tradicional es rellenar los triángulos bidimensionales, que están de forma comprobada dentro del plano de la imagen. Esto también es conocido como conversión de escaneo.
El primer problema a considerar es si dibujar o no un determinado píxel. Para que un píxel sea renderizado, este debe estar dentro de un triángulo y no debe estar oculto, o bloqueado por otro píxel. Hay varios algoritmos para rellenar los píxeles dentro de un triángulo, el más popular de ellos es el algoritmo de línea de escaneo. Al ser difícil saber si el motor de rasterización dibujará todos los píxeles de adelante hacia atrás tiene que haber alguna manera de asegurarse que los píxeles cerca del observador no están siendo superpuestos por píxeles más lejanos. Un Z buffer es la solución más común. El z buffer es una disposición 2D que corresponde al plano de imagen que almacena un valor de profundidad para cada píxel. Cada vez que un píxel es dibujado, este actualiza el z buffer con su valor de profundidad. Cada nuevo píxel debe verificar su valor de profundidad con el valor de z buffer antes de ser dibujado. Los píxeles más cercanos son dibujados mientras que los más lejanos son descartados.
Para averiguar el color de un píxel, 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 vértice 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 píxel 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 píxeles desde los vértices. 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 píxel sea decidido, un cálculo de iluminación debe ser computado para sombrear a los píxeles basados en alguna luz que puede estar presente en la escena. Por lo general hay tres tipos de luces comúnmente 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 caída 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 también 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 píxeles 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 píxeles. 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 cálculos de iluminación locales.
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.
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 está 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 está en la dirección opuesta, no es dibujado. Porsupuesto, backface culling no puede ser usado con volúmenes abiertos o degenerados.
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.
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.
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 píxel en la pantalla usualmente no corresponde directamente a un texel. Alguna técnica de filtrado debe ser aplicada para lograr imágenes claras a cualquier distancia. Hay varios métodos, con diferentes relaciones entre calidad de imagen y complejidad computacional.
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 con brillo. Uno, por ejemplo, se 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 vértices de la copa se mueven proporcionalmente, dando la ilusión de metal reflectivo.
Bump mapping es otra forma de mapeado de textura que no provee a los píxeles 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.
En muchas aplicaciones modernas, el número de polígonos en una escena puede ser impresionante. Sin embargo, un observador en una escena solo podrá discernir detalles de objetos cercanos. Los algoritmos de nivel de detalle varían 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 dinámicamente, o inclusive reemplazados por sprites.
Los cálculos de iluminación en el tradicional proceso de rasterización no tienen en cuenta la obstrucción de objetos. Shadow mapping (mapeado de sombras) y shadow volumes (volúmenes de sombras) son dos comunes técnicas modernas para crear sombras.
Comenzando en los 90', la aceleración por hardware para consumidores normales de computadoras de escritorio se ha convertido en la norma. Mientras que los programadores gráficos tempranamente se habían basado más en lenguaje ensamblador codificado a mano para que sus programas funcionaran más rápido, la mayoría de los programas modernos están escritos para funcionar a través de una de las existentes APIs gráficas, las cuales manejan a la GPU.
Las últimas Unidades de procesamiento gráfico poseen soporte para Pixel Shaders programables, que mejoran drásticamente las posibilidades de los programadores. La tendencia está apuntada a la completa programabilidad de la pipeline (tubería, conducto) gráfica.
Un procesador de imágenes rasterizadas, o RIP, es un dispositivo que se usa en los sistemas de impresión para producir una imagen de mapa de bits. Posteriormente, el bitmap generado por el procesador se envía a un dispositivo de impresión. La entrada de datos en el RIP puede ser una página generada en un lenguaje de descripción de página de alto nivel como puede ser PostScript, PDF (del acrónimo inglés Portable Document Format) o XPS. También puede ser otro bitmap de un dispositivo cuya salida es enviada a la entrada del RIP. En última instancia, el dispositivo RIP aplica algoritmos de interpolación y suavizado sobre el bitmap de entrada para generar el bitmap de salida.
La finalidad del procesamiento para el que se ha concebido un RIP es conseguir una imagen rasterizada de alta resolución a partir de una información digital vectorial. Inicialmente, los dispositivos RIPs eran una etapa de la electrónica del hardware que recibía la descripción de la página a través de una interfaz, (generalmente la RS232) y generaba una salida que posteriormente se usaba para habilitar o deshabilitar cada píxel en tiempo real del dispositivo de salida como pudiera ser el escáner de una filmadora de fotolitos.
Inclusive, un RIP se puede implementar en un componente software del sistema operativo o como un firmware ejecutado en un microprocesador del interior de la impresora. Ghostscript y GhostPCL son ejemplos de software RIPs. Cada impresora Postscript contiene un RIP en su firmware. Los RIPs más recientes guardan la compatibilidad hacia atrás con photosetters por eso son capaces de soportar lenguajes más antiguos.
Los RIP se usan en las impresoras láser para comunicar las imágenes rasterizadas al láser de barrido de la impresora.