SMAA: suavizado morfológico de subpíxeles mejorado


Este artículo está basado en la revista de Jorge Jiménez, José Echevarría, Thiago Sauce y Diego Gutiérrez.

Su implementación de demostración de SMAA se puede encontrar aquí (archivo .exe). En mi GTX 960 2GB funciona bastante bien.

Viejos métodos anti-aliasing


Durante muchos años, los estándares para el suavizado fueron MSAA (Antaliasing de muestreo múltiple) y SSAA (Antialiasing de muestreo múltiple). De hecho, todavía proporcionan la más alta calidad entre todas las técnicas modernas de suavizado. Como sabemos, el alias se produce debido a la falta de muestras, tanto a nivel espacial (líneas discontinuas) como a nivel temporal (parpadeo), generalmente cerca de los bordes y áreas de la imagen con alto / bajo contraste. Para tratarlo, tenemos dos métodos que alguna vez fueron las únicas soluciones: Supersampling y Multisampling. Con el supermuestreo, ampliamos la imagen y luego reducimos su muestreo a la resolución deseada. Este principio funciona muy bien porque se aplica a todos los aspectos del problema. Multimuestreo utiliza una solución similar. En este método, cada muestra se duplica en función de un coeficiente específico. Con altas resoluciones modernas, esto requiere tarjetas gráficas bastante potentes. Por lo tanto, necesitamos nuevos métodos de suavizado, tanto a nivel espacial como temporal. Todos estos métodos utilizan un algoritmo en su reconocimiento de borde de trabajo. Pero realizan otras operaciones.

Métodos modernos de alisado


Existen muchos métodos modernos basados ​​en filtros que hacen un buen trabajo, a pesar de ser inferiores a los dos mencionados anteriormente. FXAA, DEAA, GPAA, GBAA, CSAA, EQAA, DLAA ... En este artículo hablaremos sobre SMAA y su predecesor, MLAA. Estos métodos modernos basados ​​en filtros tienen sus propios problemas:

  • La mayoría de los algoritmos de reconocimiento de bordes que subyacen a estos métodos solo consideran las diferencias numéricas entre los píxeles e ignoran la forma en que se muestran al espectador.
  • La forma original del objeto no siempre se conserva, el redondeo general de las esquinas casi siempre es claramente visible en textos, esquinas afiladas y elementos de subpíxeles.
  • La mayoría de las soluciones están diseñadas para manejar solo patrones horizontales o verticales, e ignorar las diagonales.
  • Los elementos de subpíxeles reales y el movimiento de subpíxeles no se procesan correctamente. Los reflejos de alias (especular) y el sombreado (sombreado) no se eliminan por completo.

Como puede suponer, planteamos estos problemas porque queremos eliminarlos.

Antialiasing morfológico (MLAA)


MLAA está tratando de evaluar la cobertura de la geometría original. Para una rasterización precisa del triángulo suavizado, es necesario calcular el área de cobertura de cada píxel dentro del triángulo para mezclarlo adecuadamente con el fondo. MLAA comienza con una imagen suavizada y luego invierte el proceso vectorizando las siluetas para calcular las áreas que cubren. Dado que el fondo no puede reconocerse después de la rasterización, el MLAA lo mezcla con el vecino, suponiendo que su valor es cercano al valor del fondo original. En otras palabras , el algoritmo reconoce los límites (utilizando información sobre el color o la profundidad) y luego encuentra patrones específicos en ellos. El suavizado es proporcionado por una mezcla inteligente de píxeles en los bordes. MLAA tiene implementaciones en DirectX 10 y Mono Game (XNA). Honestamente se implementa en juegos como Fable II. Los creadores del MLAA más tarde crearon el SMAA, o Antialias morfológicas subpíxeles mejoradas (anti-alias morfológico subpíxel avanzado), que es el tema principal de este artículo.


MLAA en acción

Antialias morfológica mejorada de subpíxeles (SMAA)



Comparación de SMAA y otros métodos en Crysis 2

SMAA proporciona un reconocimiento de bordes confiable, así como una forma simple y eficiente de manejar elementos geométricos afilados y líneas diagonales. Además, SMAA no altera la forma de la geometría, como lo hacen muchos otros métodos.


Arriba - AA no; en el medio - MLAA; abajo - SMAA

SMAA se basa en la canalización de MLAA y mejora o replantea cada paso de la misma. En particular, el reconocimiento de bordes se mejora mediante el uso de información de color junto con la adaptación del contraste local para crear bordes más nítidos. El método expande el número de patrones utilizados para guardar elementos geométricos y diagonales definidos. Finalmente, muestra cómo el alisamiento morfológico se puede combinar con precisión con el muestreo múltiple o el muestreo múltiple y la reproyección temporal.

Reconocimiento de borde


El reconocimiento de bordes es un paso crítico porque los bordes no reconocidos permanecen distorsionados. Por otro lado, demasiados bordes con filtrado reducen la calidad de la imagen suavizada. Se puede utilizar diversa información para el reconocimiento de bordes: color, brillo, profundidad, superficie normal y su combinación. SMAA usa luma por cuatro razones:

  1. Menos artefactos.
  2. El brillo siempre es visible.
  3. Puede manejar la distorsión de sombreado.
  4. Y finalmente, es más rápido que el croma.


Izquierda y centro: otros métodos de reconocimiento de bordes, que conducen a la aparición de intersecciones y artefactos rojos; a la derecha: bordes perfectamente afilados SMAA

Recuerda esta imagen. Así es como funciona el reconocimiento de bordes: el valor final calculado es un valor booleano llamado borde del borde izquierdo . Del mismo modo, se calculan los valores booleanos para el borde superior. Formula

cmax=max left(cl,cr,cb,ci,c2l right)


e lprime=el wedgecl>0.5.cmax


Todos los valores de c se denominan deltas de contraste .

Procesamiento de patrones


El reconocimiento de patrones SMAA le permite guardar elementos geométricos nítidos, como ángulos, procesa diagonales y proporciona una búsqueda precisa de distancias.

Elementos geométricos afilados: la vectorización de siluetas en el MLAA es propensa a redondear esquinas. Para evitar esto, la SMAA utiliza la observación de que la intersección de los bordes en las líneas de contorno tiene un tamaño máximo de un píxel, y para esquinas afiladas, es probable que esta longitud sea más larga. Por lo tanto, el SMAA toma bordes de intersección de dos píxeles de largo, lo que permite un procesamiento de esquinas menos agresivo.

Patrones diagonales: hemos agregado una forma completamente nueva de reconocer patrones diagonales. Consiste en las siguientes dos etapas:

  1. Búsqueda a distancia diagonal dl y dr izquierda y derecha de líneas diagonales.
  2. Obteniendo bordes de intersección e1 y e2 .
  3. Usando esta entrada, definimos un patrón diagonal específico para acceder a la textura precalculada de la región, obteniendo la región at y ab .

Si falla el reconocimiento de patrones diagonales, comienza el reconocimiento de patrones ortogonales.

Búsqueda precisa de distancias: la clave para reconocer y clasificar patrones es obtener la distancia exacta del borde (la longitud a ambos extremos de la línea). Para acelerar este proceso, MLAA está utilizando activamente la interpolación de hardware. El filtrado de hardware bilineal se puede utilizar para obtener y codificar hasta cuatro valores diferentes en una sola operación de acceso a memoria. Esta interpolación lineal de dos valores binarios (es decir, bilineal ) crea un único valor de coma flotante descrito por la siguiente fórmula:

fx(b1,b2,x)=x.b1(1−x).b


Donde b1 y b2 Son dos valores binarios (0 o 1), y x Es el valor de interpolación.

Resultados


MLAA funciona con una muestra por píxel. Lo que conduce al submuestreo, por lo que es imposible recrear elementos reales de subpíxeles.


Compare MLAA con SMAA y no AA

Sin embargo, SMAA opera a un nivel de subpíxel. Esto lleva a lo siguiente:

  • Contraste local
  • Reconociendo patrones diagonales
  • Elementos geométricos afilados
  • Búsqueda exacta

Todo esto se puede ver en la imagen a continuación, donde se comparan estos aspectos con los resultados de otros métodos. De hecho, SMAA puede producir resultados cercanos a SSAA 16x.


La sobrecarga creada por cada una de estas soluciones es insignificante. En particular, la adaptación del contraste local toma solo 0.08 ms, el reconocimiento de elementos geométricos agudos y las distancias exactas toma 0.01 ms, y el procesamiento de diagonales agrega 0.12 ms adicionales. En pocas palabras, SMAA es bastante rápido, más lento que SSAA y MSAA, pero más fructífero y requiere menos recursos.

Source: https://habr.com/ru/post/440428/


All Articles