El anti-aliasing multimuestra ( MSAA ) es un tipo de anti-aliasing espacial , una técnica utilizada en gráficos de computadora para eliminar bordes irregulares .
El término generalmente se refiere a un caso especial de supermuestreo . Las implementaciones iniciales del anti-aliasing de escena completa ( FSAA ) funcionaban conceptualmente simplemente renderizando una escena a una resolución más alta y luego reduciéndola a una salida de resolución más baja. La mayoría de las GPU modernas son capaces de esta forma de anti-aliasing, pero exige mucho recursos como textura, ancho de banda y tasa de relleno . (Si un programa está altamente limitado por TCL o CPU , se puede usar el supermuestreo sin mucha pérdida de rendimiento).
Según la especificación OpenGL GL_ARB_multisample, [1] "multimuestreo" se refiere a una optimización específica del supermuestreo. La especificación dicta que el renderizador debe evaluar el programa de fragmentos una vez por píxel y solo "realmente" realizar un supermuestreo de los valores de profundidad y de esténcil . (Esto no es lo mismo que el supermuestreo, pero, según la especificación OpenGL 1.5, [2] la definición se había actualizado para incluir también implementaciones de supermuestreo completo).
En la literatura sobre gráficos en general, el término "multimuestreo" se refiere a cualquier caso especial de supermuestreo en el que algunos componentes de la imagen final no están completamente supermuestreados. Las listas que aparecen a continuación hacen referencia específicamente a la definición de ARB_multisample.
En el anti-aliasing de supermuestras, se toman muestras de varias ubicaciones dentro de cada píxel, y cada una de esas muestras [3] se renderiza por completo y se combina con las demás para producir el píxel que se muestra en última instancia. Esto es costoso en términos computacionales, porque se debe repetir todo el proceso de renderización para cada ubicación de muestra. También es ineficiente, ya que el aliasing generalmente solo se nota en algunas partes de la imagen, como los bordes, mientras que el supermuestreo se realiza para cada píxel individual.
En el suavizado de múltiples muestras, si alguna de las ubicaciones de múltiples muestras en un píxel está cubierta por el triángulo que se está renderizando, se debe realizar un cálculo de sombreado para ese triángulo. Sin embargo, este cálculo solo debe realizarse una vez para todo el píxel, independientemente de cuántas posiciones de muestra estén cubiertas; el resultado del cálculo de sombreado simplemente se aplica a todas las ubicaciones de múltiples muestras relevantes.
En el caso en que solo un triángulo cubre cada ubicación de muestra múltiple dentro del píxel, solo se realiza un cálculo de sombreado, y estos píxeles son un poco más costosos que (y el resultado no es diferente de) la imagen sin anti-aliasing. Esto es cierto para la mitad de los triángulos, donde el aliasing no es un problema. ( La detección de bordes puede reducir esto aún más al limitar explícitamente el cálculo de MSAA a los píxeles cuyas muestras involucran múltiples triángulos o triángulos en múltiples profundidades). En el caso extremo donde cada una de las ubicaciones de muestra múltiple está cubierta por un triángulo diferente, se realizará un cálculo de sombreado diferente para cada ubicación y luego los resultados se combinarán para dar el píxel final, y el resultado y el gasto computacional son los mismos que en la imagen supermuestreada equivalente.
El cálculo del sombreado no es la única operación que se debe realizar en un píxel determinado; las implementaciones de muestreo múltiple pueden muestrear de diversas formas otras operaciones, como la visibilidad, en diferentes niveles de muestreo.
La prueba alfa es una técnica común en los videojuegos antiguos que se utiliza para renderizar objetos translúcidos al rechazar la escritura de píxeles en el búfer de cuadros. [4] Si el valor alfa de un fragmento translúcido (píxel) está por debajo de un umbral especificado, se descartará. Debido a que esto se realiza píxel por píxel, la imagen no recibe los beneficios del muestreo múltiple (se descartan todas las muestras múltiples de un píxel en función de la prueba alfa) para estos píxeles. La imagen resultante puede contener aliasing a lo largo de los bordes de los objetos transparentes o bordes dentro de las texturas, aunque la calidad de la imagen no será peor que sin ningún anti-aliasing. [5] Los objetos translúcidos que se modelan utilizando texturas de prueba alfa también tendrán aliasing debido a la prueba alfa. Este efecto se puede minimizar renderizando objetos con texturas transparentes varias veces, aunque esto daría como resultado una gran reducción del rendimiento para las escenas que contienen muchos objetos transparentes. [6]
Debido a que el muestreo múltiple calcula fragmentos de polígonos interiores solo una vez por píxel, el alias y otros artefactos seguirán siendo visibles dentro de los polígonos renderizados donde la salida del sombreador de fragmentos contiene componentes de alta frecuencia.
Si bien es menos intensivo en rendimiento que SSAA (supermuestreo), es posible en ciertos escenarios (escenas con muchos fragmentos complejos) que MSAA sea varias veces más intensivo para un cuadro determinado que las técnicas de anti-aliasing de posprocesamiento como FXAA , SMAA y MLAA . Las primeras técnicas en esta categoría tienden a tener un menor impacto en el rendimiento, pero sufren problemas de precisión. [7] Las técnicas de anti-aliasing basadas en posprocesamiento más recientes, como el anti-aliasing temporal (TAA), que reduce el aliasing al combinar datos de cuadros renderizados previamente, han visto la reversión de esta tendencia, ya que el AA de posprocesamiento se vuelve más versátil y más costoso que MSAA, que no puede antialiasear un cuadro completo por sí solo.
En una máscara de muestreo puntual, el bit de cobertura de cada multimuestra solo se establece si la multimuestra se encuentra dentro de la primitiva renderizada. Las muestras nunca se toman desde fuera de una primitiva renderizada, por lo que las imágenes producidas mediante muestreo puntual serán geométricamente correctas, pero la calidad del filtrado puede ser baja porque la proporción de bits establecidos en la máscara de cobertura del píxel puede no ser igual a la proporción del píxel que está realmente cubierto por el fragmento en cuestión.
La calidad del filtrado se puede mejorar mediante el uso de máscaras de muestreo de área. En este método, la cantidad de bits establecidos en una máscara de cobertura para un píxel debe ser proporcional a la cobertura de área real del fragmento. Esto dará como resultado que se establezcan algunos bits de cobertura para muestras múltiples que en realidad no se encuentran dentro de la primitiva renderizada, lo que puede causar alias y otros artefactos.
Un patrón de muestra de cuadrícula regular, donde las ubicaciones de múltiples muestras forman una cuadrícula espaciada uniformemente a lo largo del píxel, es fácil de implementar y simplifica la evaluación de atributos (es decir, la configuración de máscaras de subpíxeles, el color y la profundidad de muestreo). Este método es costoso en términos computacionales debido a la gran cantidad de muestras. La optimización de bordes es deficiente para bordes alineados con la pantalla, pero la calidad de la imagen es buena cuando la cantidad de múltiples muestras es grande.
Un patrón de muestra de cuadrícula regular dispersa es un subconjunto de muestras que se eligen del patrón de muestra de cuadrícula regular. Al igual que con la cuadrícula regular, la evaluación de atributos se simplifica debido al espaciado regular. El método es menos costoso computacionalmente debido a que tiene menos muestras. La optimización de bordes es buena para los bordes alineados de la pantalla y la calidad de la imagen es buena para una cantidad moderada de muestras múltiples.
Un patrón de muestra estocástico es una distribución aleatoria de múltiples muestras en todo el píxel. El espaciado irregular de las muestras hace que la evaluación de atributos sea complicada. El método es rentable debido al bajo recuento de muestras (en comparación con los patrones de cuadrícula regulares). La optimización de bordes con este método, aunque no es óptima para los bordes alineados con la pantalla. La calidad de imagen es excelente para una cantidad moderada de muestras.
En comparación con el supermuestreo, el anti-aliasing multimuestra puede proporcionar una calidad similar con un mayor rendimiento, o una mejor calidad con el mismo rendimiento. Se pueden lograr resultados aún mejores utilizando máscaras de subpíxeles de cuadrícula rotada. El ancho de banda adicional requerido por el multimuestreo es razonablemente bajo si se dispone de compresión Z y de color. [8]
La mayoría de las GPU modernas admiten muestras MSAA de 2×, 4× y 8×. Los valores más altos dan como resultado una mejor calidad, pero son más lentos.