Filtrado de texturas

En gráficos por computadora , el filtrado de texturas o el suavizado de texturas es el método utilizado para determinar el color de textura para un píxel mapeado de textura , utilizando los colores de los texels cercanos (píxeles de la textura). Hay dos categorías principales de filtrado de texturas, filtrado de ampliación y filtrado de minificación.[1]​ Dependiendo de la situación, el filtrado de texturas es un tipo de filtro de reconstrucción en el que los datos dispersos se interpolan para llenar los espacios (ampliación) o un tipo de suavizado.(AA), donde las muestras de textura existen a una frecuencia más alta que la requerida para la frecuencia de muestreo necesaria para el relleno de textura (minificación). En pocas palabras, el filtrado describe cómo se aplica una textura en muchas formas, tamaños, ángulos y escalas diferentes. Según el algoritmo de filtro elegido, el resultado mostrará diversos grados de borrosidad, detalle, alias espacial, alias temporal y bloqueo. Según las circunstancias, el filtrado se puede realizar en software (como un paquete de renderizado de software) o en hardware para renderizado en tiempo real o acelerado por GPU o en una combinación de ambos. Para las aplicaciones gráficas interactivas más comunes, el filtrado de textura moderno lo realiza un hardware dedicado que optimiza el acceso a la memoria a través del almacenamiento en caché de memoria ypre-fetch e implementa una selección de algoritmos disponibles para el usuario y el desarrollador.

Hay muchos métodos de filtrado de texturas, que hacen diferentes compensaciones entre la complejidad computacional , el ancho de banda de la memoria y la calidad de la imagen.

La necesidad de filtrar

editar

Durante el proceso de mapeo de texturas para cualquier superficie 3D arbitraria, unla búsqueda de texturas tiene lugar para averiguar en qué parte de la textura cae cada centro de píxel. Para superficies poligonales mapeadas con textura compuestas por triángulos típicos de la mayoría de las superficies en juegos y películas 3D, cada píxel (omuestra de píxel subordinado) de esa superficie se asociará con algunos triángulos y un conjunto decoordenadas baricéntricas, que se utilizan para proporcionar una posición dentro de una textura. Es posible que dicha posición no se encuentre perfectamente en la "cuadrícula de píxeles", lo que requiere alguna función para dar cuenta de estos casos. En otras palabras, dado que la superficie texturizada puede estar a una distancia y orientación arbitrarias con respecto al observador, un píxel no suele corresponder directamente a un téxel. Se debe aplicar alguna forma de filtrado para determinar el mejor color para el píxel. El filtrado insuficiente o incorrecto se mostrará en la imagen como artefactos (errores en la imagen), como "bloqueos", irregularidades o reflejos.

Puede haber diferentes tipos de correspondencia entre un píxel y el texel/texels que representa en la pantalla. Estos dependen de la posición de la superficie texturizada en relación con el observador, y se necesitan diferentes formas de filtrado en cada caso. Dada una textura cuadrada mapeada en una superficie cuadrada en el mundo, a cierta distancia de visualización, el tamaño de un píxel de pantalla es exactamente igual a un texel. Más cerca que eso, los téxeles son más grandes que los píxeles de la pantalla y deben ampliarse adecuadamente, un proceso conocido como ampliación de textura . Más lejos, cada texel es más pequeño que un píxel, por lo que un píxel cubre varios texels. En este caso, se debe elegir un color apropiado en función de los elementos de textura cubiertos, mediante la minimización de texturas . API de gráficos comoOpenGL permite al programador establecer diferentes opciones para los filtros de minificación y ampliación.[1]

Tenga en cuenta que incluso en el caso de que los píxeles y los téxeles tengan exactamente el mismo tamaño, un píxel no necesariamente coincidirá exactamente con un téxel. Puede estar desalineado o rotado y cubrir partes de hasta cuatro elementos de textura vecinos. Por lo tanto, todavía se requiere alguna forma de filtrado.

Mipmapping

editar

Mipmapping es una técnica estándar utilizada para ahorrar parte del trabajo de filtrado necesario durante la minificación de texturas.[2]​ También es muy beneficioso para la coherencia de la memoria caché : sin ella, el patrón de acceso a la memoria durante el muestreo de texturas distantes exhibirá una localidad extremadamente pobre, lo que afectará negativamente al rendimiento, incluso si no se realiza ningún filtrado.

Durante la ampliación de la textura, el número de elementos de textura que deben buscarse para cualquier píxel es siempre cuatro o menos; Sin embargo, durante la minificación, a medida que el polígono texturizado se aleja, es posible que toda la textura caiga en un solo píxel. Esto requeriría leer todode sus téxeles y combinando sus valores para determinar correctamente el color del píxel, una operación prohibitivamente costosa. Mipmapping evita esto filtrando previamente la textura y almacenándola en tamaños más pequeños hasta un solo píxel. A medida que la superficie texturizada se aleja, la textura que se aplica cambia al tamaño más pequeño prefiltrado. Los diferentes tamaños del mipmap se denominan 'niveles', siendo el nivel 0 el tamaño más grande (usado más cerca del espectador) y los niveles crecientes se usan a distancias crecientes.

Métodos de filtrado

editar

Esta sección enumera los métodos de filtrado de texturas más comunes, en orden creciente de costo computacional y calidad de imagen.

Interpolación del vecino más cercano

editar

La interpolación por el vecino más cercano es el método de filtrado más simple y tosco: simplemente usa el color del elemento de textura más cercano al centro del píxel para el color del píxel. Si bien es simple, esto da como resultado una gran cantidad de artefactos: 'bloqueo' de textura durante la ampliación,[3]​ y aliasing y shimmering durante la minificación.[4]​ Este método es rápido durante la ampliación, pero durante la minificación, el paso a través de la memoria se vuelve arbitrariamente grande y, a menudo, puede ser menos eficiente que el mapeo MIP debido a la falta de acceso a la textura espacialmente coherente y la reutilización de la línea de caché.[5]

Vecino más cercano con mipmapping

editar

Este método todavía usa la interpolación del vecino más cercano, pero agrega mipmapping: primero se elige el nivel de mipmap más cercano de acuerdo con la distancia, luego se muestrea el centro de texel más cercano para obtener el color del píxel. Esto reduce significativamente el alias y el brillo durante la minificación, pero no los elimina por completo. Al hacerlo, mejora el acceso a la memoria de texturas y la reutilización de la línea de caché al evitar pasos de acceso arbitrariamente grandes a través de la memoria de texturas durante la rasterización. Esto no ayuda con los bloques durante la ampliación, ya que cada elemento de textura ampliado seguirá apareciendo como un rectángulo grande.

Filtrado mipmap lineal

editar

OpenGL y otras API, que se usan con menos frecuencia, admiten el muestreo del vecino más cercano a partir de mipmaps individuales mientras interpolan linealmente los dos mipmaps más cercanos relevantes para la muestra.

Filtrado bilineal

editar

En el filtrado bilineal , se muestrean los cuatro elementos de textura más cercanos al centro del píxel (en el nivel de mipmap más cercano), y sus colores se combinan por promedio ponderado según la distancia.[6]​ Esto elimina el "bloqueo" que se ve durante la ampliación, ya que ahora hay un gradiente suave de cambio de color de un texel al siguiente, en lugar de un salto abrupto cuando el centro del píxel cruza el límite del texel.[7]​ El filtrado bilineal para el filtrado de aumento es común. Cuando se usa para minificación, a menudo se usa con mipmapping; aunque se puede usar sin él, sufriría los mismos problemas de alias y brillo que el filtrado del vecino más cercano cuando se minimiza demasiado. Sin embargo, para proporciones de minificación modestas, se puede utilizar como una supermuestra de textura ponderada acelerada por hardware de bajo costo.

Filtrado trilineal

editar

El filtrado trilineal es un remedio para un artefacto común que se ve en las imágenes filtradas bilinealmente mapeadas en mip: un cambio abrupto y muy notable en la calidad en los límites donde el renderizador cambia de un nivel de mapa mip al siguiente. El filtrado trilineal soluciona esto haciendo una búsqueda de texturas y un filtrado bilineal en los dos niveles de mipmap más cercanos (uno de calidad superior y otro de calidad inferior), y luego interpolando linealmente los resultados.[8]​ Esto da como resultado una degradación suave de la calidad de la textura a medida que aumenta la distancia del espectador, en lugar de una serie de caídas repentinas. Por supuesto, más cerca del nivel 0, solo hay un nivel de mipmap disponible y el algoritmo vuelve al filtrado bilineal.

Filtrado anisotrópico

editar

El filtrado anisotrópico es el filtrado de mayor calidad disponible en las tarjetas gráficas 3D de consumo actuales . Las técnicas "isotrópicas" más simples utilizan solo mipmaps cuadrados que luego se interpolan mediante filtrado bilineal o trilineal. ( Isotrópico significa lo mismo en todas las direcciones y, por lo tanto, se usa para describir un sistema en el que todos los mapas son cuadrados en lugar de rectángulos u otros cuadriláteros).

Cuando una superficie está en un ángulo alto con respecto a la cámara, el área de relleno de una textura no será aproximadamente cuadrada. Considere el caso común de un piso en un juego: el área de relleno es mucho más ancha que alta. En este caso, ninguno de los mapas cuadrados encaja bien. El resultado es borroso y/o brillante, dependiendo de cómo se elija el ajuste. El filtrado anisotrópico corrige esto muestreando la textura como una forma no cuadrada. El objetivo es muestrear una textura para que coincida con la huella de píxeles tal como se proyecta en el espacio de la textura, y dicha huella no siempre está alineada con el eje de la textura. Además, cuando se trata de la teoría de la muestra, un píxel no es un pequeño cuadrado[9]​ por lo tanto su huella no sería un cuadrado proyectado. El ensamblaje de la huella en el espacio de la textura muestra alguna aproximación de la función calculada de un píxel proyectado en el espacio de la textura, pero los detalles suelen ser aproximados,[10]​ altamente patentados y llenos de opiniones sobre la teoría de la muestra. Aunque conceptualmente, el objetivo es muestrear una muestra anisotrópica más correcta de la orientación adecuada para evitar el conflicto entre el alias en un eje y el desenfoque en el otro cuando el tamaño proyectado difiere.

En implementaciones anisotrópicas, el filtrado puede incorporar los mismos algoritmos de filtrado utilizados para filtrar los mapas cuadrados de mipmapping tradicional durante la construcción del resultado intermedio o final.

Referencias

editar
  1. a b «Chapter 9 - OpenGL Programming Guide». Glprogramming.com. 13 de febrero de 2009. Filtering. Consultado el 14 de enero de 2018. 
  2. Williams, Lance (1983). «Pyramidal parametrics». ACM SIGGRAPH Computer Graphics 17 (3): 1-11. ISSN 0097-8930. doi:10.1145/964967.801126. Archivado desde el original el 6 de junio de 2016. Consultado el 28 de mayo de 2022. 
  3. «Game Engine Design: Texture Mapping». uncc.edu. Texture Magnification. Archivado desde el original el 17 de abril de 2021. Consultado el 28 de mayo de 2022. 
  4. «Game Engine Design: Texture Mapping». uncc.edu. Texture Minification. Archivado desde el original el 17 de abril de 2021. Consultado el 28 de mayo de 2022. 
  5. Hendrik Lensch (29 de noviembre de 2007). «Computer Graphics: Texture Filtering & Sampling Theory». Max Planck Society. MipMaps. Consultado el 14 de enero de 2018. 
  6. Markus Hadwiger (9 de marzo de 2015). «GPU and GPGPU Programming Lecture 12: GPU Texturing 2». KAUST. Texture Reconstruction: Magnification. Archivado desde el original el 24 de enero de 2021. Consultado el 28 de mayo de 2022. 
  7. Markus Hadwiger (9 de marzo de 2015). «GPU and GPGPU Programming Lecture 12: GPU Texturing 2». KAUST. Texture Anti-Aliasing: MIP Mapping. Archivado desde el original el 24 de enero de 2021. Consultado el 28 de mayo de 2022. 
  8. Hendrik Lensch (29 de noviembre de 2007). «Computer Graphics: Texture Filtering & Sampling Theory». Max Planck Society. MipMapping II. Consultado el 14 de enero de 2018. 
  9. Alvy Ray Smith (17 de julio de 1995). «A Pixel Is Not A Little Square! (And a Voxel is Not a Little Cube) - Technical Memo 6». cs.princeton.edu. Consultado el 14 de enero de 2018. 
  10. Hendrik Lensch (29 de noviembre de 2007). «Computer Graphics: Texture Filtering & Sampling Theory». Max Planck Society. Anisotropic Filtering. Consultado el 14 de enero de 2018.