El antialiasing multimuestra ( MSAA ) es un tipo de antialiasing espacial , una técnica utilizada en gráficos por computadora para eliminar irregularidades .
El término generalmente se refiere a un caso especial de supermuestreo . Las implementaciones iniciales de anti-aliasing de escena completa ( FSAA ) funcionaron conceptualmente simplemente renderizando una escena a una resolución más alta y luego reduciendo la resolución a una salida de resolución más baja. La mayoría de las GPU modernas son capaces de realizar esta forma de suavizado, pero exige en gran medida recursos como la textura, el ancho de banda y la tasa de relleno . (Si un programa está altamente vinculado a TCL o a CPU , se puede utilizar el supermuestreo sin afectar mucho el 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 evalúe el programa de fragmentos una vez por píxel y sólo supermuestree "realmente" los valores de profundidad y plantilla . (Esto no es lo mismo que supermuestreo pero, según la especificación OpenGL 1.5, [2] la definición se actualizó para incluir también implementaciones de supermuestreo completo).
En la literatura gráfica en general, "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 siguientes se refieren específicamente a la definición ARB_multisample.
En el antialiasing de supermuestra, se muestrean múltiples ubicaciones dentro de cada píxel, y cada una de esas muestras [3] se renderiza completamente y se combina con las demás para producir el píxel que finalmente se muestra. Esto es computacionalmente costoso, porque todo el proceso de renderizado debe repetirse para cada ubicación de muestra. También es ineficiente, ya que el alias normalmente solo se nota en algunas partes de la imagen, como los bordes, mientras que el supermuestreo se realiza para cada píxel.
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á representando, se debe realizar un cálculo de sombreado para ese triángulo. Sin embargo, este cálculo sólo debe realizarse una vez para todo el píxel, independientemente de cuántas posiciones de muestra se cubran; el resultado del cálculo de sombreado simplemente se aplica a todas las ubicaciones de muestras múltiples relevantes.
En el caso en que solo un triángulo cubra 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 (y el resultado no es diferente) que en la imagen sin suavizado. Esto es cierto en el medio de los triángulos, donde el alias no es un problema. ( La detección de bordes puede reducir esto aún más limitando explícitamente el cálculo de MSAA a píxeles cuyas muestras involucran múltiples triángulos o triángulos a múltiples profundidades). En el caso extremo en el que cada una de las ubicaciones de múltiples muestras esté cubierta por un triángulo diferente, se requiere un cálculo de sombreado diferente. Se realizará para cada ubicación y los resultados luego se combinarán para obtener 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 sobre 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 más antiguos que se utiliza para representar objetos translúcidos rechazando la escritura de píxeles en el framebuffer. [4] Si el valor alfa de un fragmento translúcido (píxel) está por debajo de un umbral específico, se descartará. Debido a que esto se realiza píxel por píxel, la imagen no recibe los beneficios del muestreo múltiple (todas las muestras múltiples en un píxel se descartan según la prueba alfa) para estos píxeles. La imagen resultante puede contener alias a lo largo de los bordes de objetos transparentes o bordes dentro de texturas, aunque la calidad de la imagen no será peor que sin ningún suavizado. [5] Los objetos translúcidos que se modelan utilizando texturas de prueba alfa también tendrán alias 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 en escenas que contienen muchos objetos transparentes. [6]
Debido a que el muestreo múltiple calcula los fragmentos de polígonos interiores solo una vez por píxel, los 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 requiere menos 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 posprocesamiento anti-aliasing como FXAA , SMAA y MLAA. . Las primeras técnicas de esta categoría tienden a tener un menor impacto en el rendimiento, pero adolecen de 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 alias combinando datos de fotogramas renderizados previamente, han visto la reversión de esta tendencia, ya que el posprocesamiento AA se vuelve más versátil y más caro que MSAA, que no puede suavizar un fotograma completo por sí solo.
En una máscara de muestreo puntual, el bit de cobertura para cada multimuestra solo se establece si la multimuestra está ubicada dentro de la primitiva representada. Las muestras nunca se toman desde fuera de una primitiva renderizada, por lo que las imágenes producidas usando muestreo de puntos serán geométricamente correctas, pero la calidad del filtrado puede ser baja porque la proporción de bits establecida 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 utilizando máscaras de área de muestreo. En este método, el número de bits establecidos en una máscara de cobertura para un píxel debe ser proporcional al área de cobertura real del fragmento. Esto dará como resultado que se establezcan algunos bits de cobertura para muestras múltiples que en realidad no están ubicadas dentro de la primitiva renderizada y pueden 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, configurar máscaras de subpíxeles, color de muestreo y profundidad). Este método es computacionalmente costoso debido a la gran cantidad de muestras. La optimización de los bordes es deficiente para los bordes alineados con la pantalla, pero la calidad de la imagen es buena cuando la cantidad de muestras múltiples es grande.
Un patrón de muestra de cuadrícula regular escaso es un subconjunto de muestras que se eligen del patrón de muestra de cuadrícula regular. Al igual que con la cuadrícula normal, la evaluación de atributos se simplifica gracias 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 muestras múltiples en todo el píxel. El espaciado irregular de las muestras complica la evaluación de atributos. El método es rentable debido al bajo recuento de muestras (en comparación con los patrones de cuadrícula regulares). Optimización de bordes con este método, aunque no es óptimo para bordes alineados en la pantalla. La calidad de la imagen es excelente para un número moderado de muestras.
En comparación con el supermuestreo, el antialiasing multimuestra puede proporcionar una calidad similar con un rendimiento mayor o una mejor calidad con el mismo rendimiento. Se pueden lograr resultados aún mejores utilizando máscaras de subpíxeles de cuadrícula rotadas. El ancho de banda adicional requerido por el muestreo múltiple es razonablemente bajo si están disponibles la 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.