Este artigo é baseado nas revistas de Jorge Jimenez, Jose Echevarria, Thiago Sauce e Diego Gutierrez.
A implementação demo do SMAA pode ser encontrada
aqui (arquivo .exe). No meu GTX 960 2GB, ele funciona muito bem.
Métodos anti-aliasing antigos
Por muitos anos, os padrões de suavização foram MSAA (Multisampling Antialiasing) e SSAA (Supersampling Antialiasing). De fato, eles ainda fornecem a mais alta qualidade entre todas
as técnicas
modernas de anti-aliasing. Como sabemos, o alias ocorre devido à falta de amostras, tanto no nível espacial (linhas tracejadas) quanto no nível temporal (tremulação), geralmente próximas às bordas e áreas da imagem com alto / baixo contraste. Para lidar com isso, temos dois métodos que foram as únicas soluções: Supersampling e Multisampling. Com a superamostragem, aumentamos a imagem e reduzimos a amostragem para a resolução desejada. Esse princípio funciona muito bem porque se aplica a todos os aspectos do problema. A amostragem múltipla usa uma solução semelhante. Neste método, cada amostra é duplicada com base em um coeficiente específico. Com altas resoluções modernas, isso requer placas gráficas bastante poderosas. Portanto, precisamos de novos métodos de suavização, tanto no nível espacial quanto no temporal. Todos esses métodos usam um algoritmo no reconhecimento de borda de trabalho. Mas eles realizam outras operações.
Métodos modernos de suavização
Existem muitos métodos modernos baseados em filtro que fazem um bom trabalho, apesar de serem inferiores aos dois listados acima. FXAA, DEAA, GPAA, GBAA, CSAA, EQAA, DLAA ... Neste artigo, falaremos sobre o SMAA e seu antecessor - MLAA. Esses métodos modernos baseados em filtro têm seus próprios problemas:
- A maioria dos algoritmos de reconhecimento de borda subjacentes a esses métodos considera apenas diferenças numéricas entre os pixels e ignora a maneira como eles são exibidos para o visualizador.
- A forma original do objeto nem sempre é preservada, o arredondamento geral dos cantos quase sempre é claramente visível em textos, cantos afiados e elementos de subpixel.
- A maioria das soluções é projetada para lidar apenas com padrões horizontais ou verticais e ignorar diagonais.
- Os elementos reais do subpixel e o movimento do subpixel não são processados corretamente. As reflexões de aliasing (especular) e sombreamento (sombreamento) não são completamente eliminadas.
Como você pode imaginar, levantamos esses problemas porque queremos eliminá-los.
Antialiasing Morfológico (MLAA)
O MLAA está tentando avaliar a cobertura da geometria original. Para uma rasterização precisa do triângulo suavizado, é necessário calcular a área de cobertura de cada pixel dentro do triângulo para misturá-lo adequadamente com o fundo. O MLAA começa com uma imagem sem serrilhado e, em seguida, reverte o processo vetorizando as silhuetas para calcular as áreas que cobrem. Como o plano de fundo não pode ser reconhecido após a rasterização, o MLAA o mistura com o vizinho, assumindo que seu valor esteja próximo do valor do plano de fundo original.
Em outras palavras , o algoritmo reconhece limites (usando informações sobre cor ou profundidade) e, em seguida, encontra padrões específicos neles. A suavização é fornecida pela mistura inteligente de pixels nas bordas. O MLAA possui implementações no DirectX 10 e Mono Game (XNA). É honestamente implementado em jogos como o Fable II. Mais tarde, os criadores do MLAA criaram o SMAA, ou
Antialiasing Morfológico de Subpixel Aprimorado (anti-aliasing morfológico de subpixel avançado), que é o tema principal deste artigo.
MLAA em açãoAntialiasing Morfológico de Subpixel Aprimorado (SMAA)
Comparação de SMAA e outros métodos em Crysis 2O SMAA fornece reconhecimento de borda confiável, bem como uma maneira simples e eficiente de lidar com elementos geométricos nítidos e linhas diagonais. Além disso, o SMAA não altera a forma da geometria, como muitos outros métodos.
Acima - AA não; no meio - MLAA; abaixo - SMAAO SMAA é construído no pipeline do MLAA e aprimora ou repensa cada etapa dele. Em particular, o reconhecimento de bordas é aprimorado usando informações de cores, além de adaptar o contraste local para criar bordas mais nítidas. O método expande o número de padrões usados para salvar elementos geométricos e diagonais nítidos. Finalmente, ele mostra como a suavização morfológica pode ser combinada com precisão com a multisampling ou supersampling e reprojeção temporal.
Reconhecimento de borda
O reconhecimento de bordas é uma etapa crítica porque as bordas não reconhecidas permanecem distorcidas. Por outro lado, muitas arestas com filtragem reduzem a qualidade da imagem suavizada. Várias informações podem ser usadas para o reconhecimento das bordas: cor, brilho, profundidade, superfície normal e sua combinação. O SMAA usa luma por quatro razões:
- Menos artefatos.
- O brilho é sempre visível.
- Ele pode lidar com distorção de sombreamento.
- E, finalmente, é mais rápido que o chroma.
Esquerda e centro: outros métodos de reconhecimento de arestas, levando ao aparecimento de cruzamentos e artefatos vermelhos; à direita: arestas perfeitamente afiadas SMAALembre-se desta imagem. Veja como o reconhecimento de borda funciona: o valor final calculado é um valor booleano chamado de
borda da borda esquerda . Da mesma forma, os valores booleanos da borda superior são calculados. Formula
Todos os valores de c são chamados
deltas de contraste .
Processamento de Padrões
Reconhecimento de padrões O SMAA permite salvar elementos geométricos nítidos, como ângulos, processa diagonais e fornece uma pesquisa precisa de distâncias.
Elementos geométricos agudos: a vetorização de silhuetas no MLAA é propensa a arredondar cantos. Para evitar isso, o SMAA usa a observação de que a interseção das arestas nas linhas de contorno tem um tamanho máximo de um pixel e, para cantos afiados, esse comprimento provavelmente será maior. Portanto, o SMAA possui bordas cruzadas com dois pixels de comprimento, o que permite um processamento de canto menos agressivo.
Padrões diagonais: adicionamos uma maneira completamente nova de reconhecer padrões diagonais. Consiste nas duas etapas seguintes:
- Pesquisa de distância diagonal e esquerda e direita das linhas diagonais.
- Obtendo bordas cruzadas e .
- Utilizando essa entrada, definimos um padrão diagonal específico para acessar a textura pré-calculada da região, obtendo a região e .
Se o reconhecimento de padrões diagonais falhar, o reconhecimento de padrões ortogonais será iniciado.
Pesquisa precisa de distâncias: a chave para reconhecer e classificar padrões é obter a distância exata da aresta (o comprimento das duas extremidades da linha). Para acelerar esse processo, o MLAA está usando ativamente a interpolação de hardware. A filtragem bilinear de hardware pode ser usada para obter e codificar até quatro valores diferentes em uma única operação de acesso à memória. Essa interpolação linear de dois valores binários (isto é,
bilineares ) cria um único valor de ponto flutuante descrito pela seguinte fórmula:
Onde
e
São dois valores binários (0 ou 1) e
É o valor da interpolação.
Resultados
O MLAA trabalha com uma amostra por pixel. O que leva à subamostragem, pelo que é impossível recriar elementos reais de subpixels.
Compare MLAA com SMAA e sem AANo entanto, o SMAA opera no nível de sub-pixel. Isso leva ao seguinte:
- Contraste local
- Reconhecendo padrões diagonais
- Elementos geométricos afiados
- Pesquisa exata
Tudo isso pode ser visto na imagem abaixo, onde esses aspectos são comparados com os resultados de outros métodos. De fato, o SMAA pode produzir resultados próximos ao SSAA 16x.
A sobrecarga criada por cada uma dessas soluções é insignificante. Em particular, a adaptação do contraste local leva apenas 0,08 ms, o reconhecimento de elementos geométricos nítidos e as distâncias exatas levam 0,01 ms, e o processamento das diagonais adiciona 0,12 ms extra. Simplificando, o SMAA é bastante rápido, mais lento que o SSAA e o MSAA, mas mais produtivo e com menos recursos.