Filtrado de texturas
En gráficos por computadora, el filtrado de textura o el suavizado de textura es el método utilizado para determinar el color de la textura de un píxel mapeado de textura, utilizando los colores de los texels cercanos (es decir, píxeles de la textura).
El filtrado describe cómo se aplica una textura en muchas formas, tamaños, ángulos y escalas diferentes. Dependiendo del algoritmo de filtro elegido, el resultado mostrará distintos grados de borrosidad, detalle, alias espacial, alias temporal y bloqueo. Dependiendo de las circunstancias, el filtrado se puede realizar en software (como un paquete de renderizado de software) o en hardware, por ejemplo. con circuitos de renderizado en tiempo real o acelerados por GPU, o en una combinación de ambos. Para las aplicaciones gráficas interactivas más comunes, el filtrado de texturas moderno se realiza mediante hardware dedicado que optimiza el acceso a la memoria mediante el almacenamiento en caché y la recuperación previa de la memoria, e implementa una selección de algoritmos disponibles para el usuario y el desarrollador.
Hay dos categorías principales de filtrado de texturas: filtrado de ampliación y filtrado de minificación. Dependiendo de la situación, el filtrado de texturas es un tipo de filtro de reconstrucción en el que se interpolan datos escasos para llenar los huecos (ampliación) o un tipo de suavizado (AA) en el que las muestras de textura existen con una frecuencia mayor que la requerida para la frecuencia de muestra. necesario para el relleno de textura (minificación).
Existen muchos métodos de filtrado de texturas, que establecen diferentes compromisos entre la complejidad computacional, el ancho de banda de la memoria y la calidad de la imagen.
La necesidad de filtrar
Durante el proceso de mapeo de textura para cualquier superficie 3D arbitraria, se realiza una búsqueda de textura. se lleva a cabo para descubrir en qué parte de la textura cae cada centro de píxel. Para superficies poligonales con mapas de textura compuestas por triángulos típicos de la mayoría de superficies en juegos y películas 3D, cada píxel (o muestra de píxel subordinado) de esa superficie se asociará con algunos triángulos y un conjunto de coordenadas 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" necesitando 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 espectador, un píxel normalmente no corresponde directamente a un téxel. Se debe aplicar algún tipo de filtrado para determinar el mejor color para el píxel. Un filtrado insuficiente o incorrecto aparecerá en la imagen como artefactos (errores en la imagen), como "bloqueos", irregularidades o brillos.
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 con respecto al espectador, y en cada caso se necesitan diferentes formas de filtrado. Dada una textura cuadrada asignada a una superficie cuadrada del mundo, a cierta distancia de visualización, el tamaño de un píxel de la pantalla es exactamente igual a un texel. Más cerca que eso, los texels 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 texels cubiertos, mediante la minificación de texturas. Las API de gráficos como OpenGL permiten al programador establecer diferentes opciones para los filtros de minificación y ampliación.
Tenga en cuenta que incluso en el caso de que los píxeles y los texels tengan exactamente el mismo tamaño, un píxel no necesariamente coincidirá exactamente con un texel. Puede estar desalineado o girado y cubrir partes de hasta cuatro texels vecinos. Por lo tanto, todavía se requiere algún tipo de filtrado.
Mapeo Mip
Mipmapping es una técnica estándar que se utiliza para ahorrar parte del trabajo de filtrado necesario durante la minificación de texturas. También es muy beneficioso para la coherencia de la caché: sin él, 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 textura, el número de téxeles 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 la textura completa caiga en un solo píxel. Esto requeriría leer todos sus texels y combinar 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 mapa MIP se denominan "niveles": el nivel 0 es el tamaño más grande (el que se usa más cerca del espectador) y los niveles crecientes se usan a distancias cada vez mayores.
Métodos de filtrado
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
La interpolación del vecino más cercano es el método de filtrado más simple y básico: simplemente utiliza el color del texel 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: textura en "bloques"; durante la ampliación y aliasing y shimmering durante la minificación. 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 texturas espacialmente coherente y reutilización de líneas de caché.
Vecina más cercana con mipmapping
(feminine)Este método todavía utiliza la interpolación del vecino más cercano, pero agrega mapeo mip: primero se elige el nivel de mapa mip más cercano según la distancia, luego se toma una muestra del centro de texel más cercano para obtener el color del píxel. Esto reduce significativamente el aliasing 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 las líneas de caché evitando 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 texto ampliado seguirá apareciendo como un rectángulo grande.
Filtrado de mapa MIP lineal
OpenGL y otras API, menos utilizadas, admiten el muestreo del vecino más cercano a partir de mapas MIP individuales al tiempo que interpolan linealmente los dos mapas MIP más cercanos relevantes para la muestra.
Filtrado bilineal
En el filtrado bilineal, se muestrean los cuatro texels más cercanos al centro del píxel (en el nivel de mapa MIP más cercano) y sus colores se combinan mediante un promedio ponderado según la distancia. Esto elimina el 'bloqueo' 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. El filtrado bilineal para 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 y económica.
La Nintendo 64 utilizó una versión inusual de filtrado bilineal en la que solo se utilizan tres píxeles, en lugar de cuatro, debido a problemas de optimización del hardware. Esto introduce un notable "sesgo de triangulación" en algunas texturas.
Filtrado trilineal
El filtrado trilineal es una solución a un artefacto común que se observa en imágenes filtradas bilinealmente en mapas 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 resuelve esto realizando una búsqueda de textura y un filtrado bilineal en los dos niveles de mapa MIP más cercanos (uno de mayor y otro de menor calidad) y luego interpolando linealmente los resultados. Esto da como resultado una suave degradación de la calidad de la textura a medida que aumenta la distancia desde el espectador, en lugar de una serie de caídas repentinas. Por supuesto, más cerca del nivel 0 solo hay un nivel de mapa MIP disponible y el algoritmo vuelve al filtrado bilineal.
Filtrado anisotrópico
El filtrado anisotrópico es el filtrado de mayor calidad disponible en las tarjetas gráficas 3D de consumo actuales. Más simple, "isotrópico" Las técnicas utilizan solo mapas MIP cuadrados que luego se interpolan mediante filtrado bi o trilineal. (Isotrópico significa igual 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. Consideremos el caso común del suelo 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 proyectada en el espacio de textura, y dicha huella no siempre está alineada con el eje de la textura. Además, cuando se trata de la teoría de muestras, un píxel no es un pequeño cuadrado, por lo que su huella no sería un cuadrado proyectado. El ensamblaje de huellas en el espacio de textura muestra cierta aproximación de la función calculada de un píxel proyectado en el espacio de textura, pero los detalles suelen ser aproximados, altamente patentados y llenos de opiniones sobre la teoría de muestras. Sin embargo, conceptualmente el objetivo es tomar una muestra anisotrópica más correcta y con 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 del mipmapping tradicional durante la construcción del resultado intermedio o final.
Porcentaje de filtrado más cercano
El mapeo de sombras basado en profundidad puede utilizar un interesante filtro de porcentaje más cercano (PCF) con texturas mapeadas en profundidad que amplía la percepción de los tipos de filtros de textura que se pueden aplicar. En PCF se representa un mapa de profundidad de la escena a partir de la fuente de luz. Durante la representación posterior de la escena, este mapa de profundidad se proyecta nuevamente dentro de la escena desde la posición de la luz y se realiza una comparación entre la coordenada de profundidad proyectiva y la profundidad de muestra de textura obtenida. La coordenada proyectiva será la profundidad de los píxeles de la escena desde la luz, pero la profundidad obtenida del mapa de profundidad representará la profundidad de la escena a lo largo de esa dirección proyectada. De esta manera se puede determinar la visibilidad de la luz y, por tanto, la iluminación de la luz para el píxel renderizado. Por lo tanto, esta operación de texturizado es una prueba booleana de si el píxel está iluminado; sin embargo, se pueden probar varias muestras para un píxel determinado y los resultados booleanos se suman y promedian. De esta manera, en combinación con parámetros variables, como la ubicación del texel muestreado e incluso la ubicación de la proyección del mapa de profundidad con fluctuaciones, se puede calcular un promedio o porcentaje de muestras posteriores a la comparación de profundidad más cercanas y, por lo tanto, iluminadas para un píxel. Fundamentalmente, la suma de los resultados booleanos y la generación de un valor porcentual se deben realizar después de la comparación de profundidad de la profundidad proyectiva y la recuperación de la muestra, de modo que esta comparación de profundidad se convierta en una parte integral del filtro de textura. Este porcentaje se puede utilizar para ponderar un cálculo de iluminación y proporcionar no sólo un valor booleano de iluminación o sombra, sino también un resultado de penumbra de sombra suave. Una versión de esto es compatible con hardware moderno donde se realiza una comparación y se aplica un filtro bilineal post comparación booleano por distancia.