Os tipos de Anti-Aliasing existentes e a sua diferença – FXAA, SMAA, MSAA e outros.

Muito se tem vindo a falar de métodos de Anti-Alising, e com a conversa termos como FXAA, SMAA e MSAA  aparecem ao barulho. Sabe o que vale cada um destes métodos e o seu impacto nas performances.

O que é o Aliasing

As imagens criadas por métodos digitais são constituídas por um conjunto de milhares de pontos minúsculos. Estes pontos são, normalmente, quadrados e em número tal que constituem a resolução da imagem. São os chamados Pixels.

Assim, como podem perceber pela foto do lado que simula uma grelha de pixels, criar uma linha inclinada perfeita (neste caso a vermelho), com este tipo de ferramenta é algo impossível. A imagem ao ser totalmente formada por estes pequenos quadrados permite linhas linhas horizontais ou verticais perfeitas, mas linhas inclinadas, quando analisadas ao detalhe como na foto do lado que aumenta a situação ao extremo, criam o chamado “efeito de escada”… E dado que um ecrã possui uma dimensão fixa, é lógico que quanto menor a resolução, maiores se tornam os pixels e, consequentemente mais se nota este efeito.

Este efeito de escada criado pelos pixels é chamado na gíria de programação como Aliasing e pode ser bastante incómodo em imagens em movimento, criando cintilações de ecrã e um efeito de linhas quebradas.

Publicidade

Retomando o nosso artigo

Naturalmente com maiores resoluções, como o Full HD ou superior onde trabalhamos com uma densidade de pixels muito grande, a dimensão dos mesmos, particularmente em ecrãs mais pequenos, torna-se reduzida, ajudando de forma natural a reduzir o efeito. No entanto, apesar de o reduzir, não o elimina. E para o eliminar precisamos de usar um método que se chama de Anti-Aliasing.

O Anti-Aliasing

Como se percebe, resolver este problema do Aliasing é fisicamente impossível, pelo que a solução passa basicamente por enganar os nossos olhos com métodos de Anti-Aliasing. Basicamente o efeito de escada é minimizado trabalhando os pixels anexos à zona afectada de forma a criar uma suavização entre as cores existentes na zona. Tal vai afectar outros pixels, nunca criando uma imagem perfeita, mas visualmente o resultado é impressionantemente melhor.

Assim no nosso caso com a linha vermelha, o que o tratamento de anti-aliasing fez foi alterar ligeiramente as tonalidades da cor onde se revelou necessário, criando pixels de transição com tonalidades intermédias entre as duas cores em contraste (neste caso o vermelho e o branco), dando origem a umas tonalidades rosa.

Dado que os exemplos aumentados não são muito bons para se perceber o ganho vamos mostrar aqui o efeito aplicado a uma letra e que depois colocamos no seu tamanho original.

AAaa

Como agora se torna perfeitamente claro, a aplicação do Anti-Aliasing criou uma letra muito mais perfeita e onde todas as irregularidades criadas pelo efeito de escada desapareceram, ou foram minimizados.

A questão é que aplicar este tipo de tratamento a uma imagem na sua totalidade e a 30 ou mais fotogramas por segundo não é uma tarefa simples, e nesse sentido surgiram vários métodos de Anti-Aliasing que, com qualidades variáveis, são mais ou menos penalizadores nas performances. Naturalmente mais qualidade implica maior perda de performance.

Ao longo dos tempos existiram vários métodos de Anti-Aliasing que eram basicamente melhorias uns dos outros. Mas no entanto a maior parte deles caiu em desuso. Na lista que se segue vamos referir apenas os métodos vulgarmente mais usados e mais comuns.

A imagem que vamos tratar é a que se segue e que é retirada de parte do ecrã de Crisis 3 a 1920*1080 e onde podemos ver o efeito de Aliasing no corrimão e vigas metálicas verticais:

NoAA

Edge Anti-Aliasing

O Edge Anti-Aliasing é um método só por si pouco usado, mas particularmente útil para consolas portáteis e sistemas com fraco poder de processamento que pretendam aplicar uma solução de Anti-Aliasing.

Este é um método exclusivo ao universo 3D, não podendo ser aplicado em imagens 2D, e o motivo é que se baseia na análise dos polígono constituintes das peças 3D, tentando detectar-lhes as suas bordas (edges).

Ao ser aplicado um tratamento apenas aos pixéis que constituem as bordas dos polígonos o método revela-se bastante pouco exigente a nível de performances. No entanto é um método que só por si é algo incompleto, e que caiu em desuso pela complexidade da sua programação (na altura em que era usado).

No entanto, resolvemos explicar este método de anti-aliasing apenas para que percebam que existem métodos que não são aplicados à totalidade da imagem, mas apenas a partes dela. E como irão perceber, este método está englobado em um outro bastante mais complexo.

Métodos rápidos de Anti-Aliasing – Pós processamento de imagem.

FXAA (Fast Approximate Anti-Aliasing)

O FXAA é um método de anti-alising de cena total, mas é igualmente, e como o nome deixa entender, a metodologia mais simples e menos penalizadora das performances actualmente existente. É usada para se conseguir um Anti-Aliasing aproximado, sem impactos dignos desse nome na performance do sistema.

Os seus resultados existem, mas longe de perfeitos como podem ver pela imagem comparativa.

Note-se que a imagem original, sem AA se encontra sempre do lado esquerdo, com o método de Anti-Aliasing em análise presente do lado direito.

FXAA1

Este método, usado nas novas consolas em jogos como Tomb Raider: Definitive Edition é, como referido, bastante simples. Os resultados estão longe de perfeitos, mas a redução do efeito existe. O grande inconveniente é a imagem algo desfocada como se existisse um pouquinho de nevoeiro, no entanto não é algo que seja verdadeiramente chocante. Podem ver um exemplo do efeito aqui.

Apesar de aqui não irmos falar deles, o FXAA pode ter vários níveis de intensidade

SMAA (Subpixel Morphological Anti-Aliasing)

Tal como o FXAA, o SMAA é um anti-aliasing pós-processamento, sendo no entanto um pouco mais penalizador, mas igualmente melhor.

A grande diferença imediatamente notória é que o efeito de imagem desfocada ou neblina deixam de estar presentes.

O método pode ser aplicado em três modalidades (apesar que pode haver combinações): SMAA Baixo (1x), SMAA Médio (2Tx) e SMAA Alto (4x).

O SMAA 1x é na realidade uma evolução do antigo MLAA (Morphological Anti-Aliasing).

O SMAA 2Tx é basicamente o SMAA 1x, mas ao qual se acrescenta uma mistura de um outro efeito, 2x Temporal AA, um efeito de Anti-Aliasing baseado no SuperSampling (já falaremos de seguida sobre ele ao abordar um outro método). Na realidade este método não se trata da aplicação sucessiva dois efeitos, mas sim uma mistura simplificada dos dois.

O SMAA 4x é uma combinação ainda mais complexa, misturando SMAA 1x, 2x Temporal AA e 2x MSAA (de que falaremos de seguida). Curiosamente e sem percebermos o porque, o T desaparece da designação normalmente usada, apesar de o Temporal AA estar presente.

Recentemente, e não podemos deixar de o referir, surgiu o SMAA 1TX que, como o nome indica acaba por ser um SMAA 2Tx remodelado. No entanto os criadores não o definem como melhor, mas como mais “robusto”, e pela descrição feita por Tiago Alex Sousa, Engenheiro Principal de Pesquisa e Desenvolvimento Gráfico da Crytek, parece usar o mesmo tipo de técnica do 2Tx (MLAA + Temporal AA), mas com muito maior mistura de frames e uma melhor média de cores nos pixels. Este é o tipo de Anti-Aliasing usado em Ryse: Son of Rome na Xbox One e foi criado pela Crytek para o seu Cry Engine, desconhecendo-se se, ao contrário dos outros métodos, ele é de uso livre. Não há porém grande possibilidade de verificarmos a sua qualidade face ao 2Tx uma vez que não há muitos jogos a usar esta técnica.

Mas vejamos estes métodos aplicados à imagem em estudo:

SMAA1x1

Como podemos ver ao comparar o SMAA 1x (á direita) com a imagem sem AA (à esquerda), apercebemos-nos que, tal como com o FXAA, as diferenças não são extraordinárias. É um Anti-Aliasing de pós processamento relativamente básico.

Comparemos lado a lado com o FXAA:

FXAASMAA

Como é notório as diferenças não são gigantes, apesar da vantagem estar do lado do SMAA 1x, particularmente pela remoção do efeito de pequeníssima desfocagem/neblina do outro método.

Vajamos agora o SMAA 2 Tx:

SMAA-2TX

Como se pode facilmente ver, o SMAA 2Tx oferece uma melhoria já substancial no tratamento da imagem. No entanto este método, tal como todos os métodos que usem Temporal Anti Aliasing, podem criar problemas com efeitos de imagem fantasma nas zonas em movimento.

Eis um exemplo dos problemas característicos do uso de Temporal Anti-Aliasing no jogo Halo Reach (vejam a zona do monitor e braço onde aparecem duas imagens). Note-se porém que aqui temos um Temporal AA puro pelo que o efeito é mais extremo.:

Halo-Reach

No que toca a esta distorção, o SMAA 1Tx este revela-se igualmente superior ao utilizar umas técnicas diferentes de implementação do Temporal Anti-Aliasing baseadas na nova técnica com o mesmo nome, o TXAA que é criado pela Nvidia e disponível apenas nas placas série 600 e 700. No entanto, mesmo mascarando o efeito, este não desaparece a 100%, pois é uma consequência de qualquer temporal Anti-Aliasing como os slides de Sousa demonstram. A Crytek chama ao resultado final “filmic image quality” (ver link acima para a entrevista à Eurogamer).

Vejamos agora o efeito de um SMAA 4x:

SMAA4x

Os efeitos deste método começam a ser bastante visíveis e o efeito de escada fica bastante reduzido. Infelizmente o efeito de fantasma do Temporal Anti-Aliasing mantêm-se, o que torna estes métodos pouco desejáveis e este método, o mais exigente dos SMAA, pouco usado.

Mas agora que acabamos com os efeitos de Anti-Aliasing menos penalizadores para a placa gráfica e baseados num pós-processamento de imagem (os chamados Anti-Aliasing “baratos”), falemos do método de Anti-Aliasing puro e efectuado durante a criação da imagem. Trata-se naturalmente de um método bastante mais penalizador das performances, mas igualmente mais eficaz.

Publicidade

Retomando o nosso artigo

Métodos de cálculo puro de AA – Efectuado durante a criação da imagem

MSAA (Multi-Sample Anti-Aliasing)

Nos primórdios das técnicas do Anti-Aliasing existia uma metodologia denominada de Super-Sampling e que apresentava resultados extraordinários. A ideia era render a imagem a uma resolução superior à real, e depois reduzi-la para a resolução visualizada no ecrã.

A imagem gerada na redução criaria médias de intensidades de cor nas regiões de pixels, e assim o pixel do ecrã em vez de ter a cor que teria se fosse calculado àquela resolução, passaria a ter uma cor adequada à sua envolvente.

É a forma mais pura de Anti-Aliasing, e igualmente a mais eficaz. Infelizmente tem um grande problema que levou a que a metodologia desaparecesse: a sua grande carga na placa gráfica que teria de calcular uma imagem com o dobro da resolução num Super-Sampling 2x e com o quádruplo da resolução num Super-Sampling 4x.

Mas eis que surge o seu sucessor, o MSAA!

A especificação do OpenGL GL_ARB_multisample define o MSAA como uma metodologia de Super-Sampling, mas no entanto o seu funcionamento é muito mais inteligente.

Apesar de a metodologia envolver mais processamentos aqui ignorados, o principal a reter do MSAA é que este mistura o EDGE Anti-Aliasing que referimos no início com o Super-Sampling tradicional. É assim uma alternativa para o Super-Sampling, a melhor forma de Anti-Aliasing existente, mas muito menos exigente.

Para todos os efeitos no que toca à rasterização, o MSAA funciona tal como o Super-Sampling com as análises de cobertura stencil, profundidade e oclusão a serem feitas a 2x, 4x ou 8x mais resolução conforme se usa o MSAA 2x,4x ou 8x

No entanto a nível de tratamento dos polígonos o MSAA usa o Edge Anti-Aliasing para diminuir a quantidade de processamento a analisar e suavizando os mesmos apenas nos seus limites, o que reduz, consequentemente, a carga da placa gráfica.

Não deixa porém de ser um método bastante exigente a nível de processamento, e que no global oferece resultados superiores aos métodos de pós processamento.

Apesar de tal, na sua versão mais básica, o MSAA 2x, não se revela esmagadoramente superior ao SMAA 1x, revelando-se algo perto do SMAA 2Tx, mas sem os efeitos de fantasma criados pelo uso do Temporal Anti-Aliasing. Quer isso dizer que apesar das pequenas vantagens, o seu uso em detrimento de um SMAA fica ao critério das necessidades dos programadores mais do que outra coisa. Já as versões 4x e 8x batem claramente em qualidade todos os métodos de pós processamento existentes, particularmente por não apresentaram os efeitos de fantasma que destroem a qualidade de imagem. São considerados os melhores métodos actualmente existentes, apesar da penalização no processamento a eles associado.

Vamos ver então esses métodos em acção:

MSAA2x

Comparemos  com o SMAA 1x e SMAA 2Tx para verificarmos as afirmações de cima.

comp2

Publicidade

Retomando o nosso artigo

comp3

Já a versão MSAA 4x é claramente superior, mas com graves impactos na performance, algo que piora ainda mais com o uso do MSAA 8x.

MSAA4x

Como se pode ver, não existe uma solução Anti-Aliasing que seja completamente perfeita, apenas algumas que são melhores que outras.

Se cada método tem vantagens e inconvenientes, o MSAA também os tem, e o seu ponto fraco passa por problemas com as transparências como se pode ver na rede da imagem da esquerda situada em baixo, e onde o tratamento de imagem não existe.

MSAA-Transp

No entanto a Nvidia e a AMD possuem as suas próprias versões do MSAA com uma solução para esse problema. Apesar de normalmente as mesmas serem apenas designadas como MSAA, na realidade as soluções possuem nomes diferentes. A da Nvidia chama-se CSAA, e a da AMD, EQAA. Estes métodos de Anti-Aliasing são o MSAA visto na rede da imagem de cima na foto da direita onde se vê o problema ao Aliasing resolvido na zona de transparência.

Para finalizar esta parte há que referir que as imagens usadas neste artigo são zooms a uma determinada zona do ecrã de forma a tornar os efeitos do Aliasing e da solução aplicada mais visíveis, motivo pelo qual em nenhum dos casos poderíamos ter uma redução completamente notória do Anti-Aliasing. Da mesma forma, para auferirmos a totalidade da qualidade dos efeitos eram necessárias imagens em movimento e não apenas imagens estáticas

Note-se igualmente que o artigo não pretende ser completamente técnico ou perfeito nas explicações das metodologias, mas sim apenas esclarecer sobre as técnicas existentes e diferentes funcionamentos.

Há ainda que referir os PCs normalmente possuem níveis de Anti-Aliasing variáveis e por vezes várias alternativas de metodologia disponíveis.

Performances

Vamos de seguida ver uma comparação do impacto de cada um destes métodos nas performances de uma placa gráfica. O exemplo de baixo é meramente exemplificativo das perdas que podem, no entanto, variar um pouco de jogo para jogo

performances-AA

Os valores referem-se às performances das metodologias no motor CryEngine em Crysis 3 e vemos o impacto de cada um dos métodos no jogo. Assim, num sistema com este jogo e  capaz de debitar 58 FPS a 1080p sem qualquer solução Anti-Aliasing perde um ou dois fps com a aplicação de um FXAA, aumentando a perda em mais um ou dois fps ao passar para SMAA 1x e ainda mais um ou dois fps ao usar para SMAA 2Tx. São contudo impactos pequenos que roubarão pouco mais do que uma meia dezena de fotogramas.

Já a passagem para SMAA 4x é significativa no impacto da placa gráfica roubando uma média de 30% à performance geral.

O MSAA 2x revela-se, naturalmente, mais penalizador com uma quebra média de 24% face à solução sem Anti-Aliasing, mas é a partir da versão 4x que o impacto começa a ser verdadeiramente grande roubando em média 45% de performance. Na versão 8X essa quebra pode chegar aos 60% de performance.

Conclusões

Basicamente podemos resumir cada um dos métodos da seguinte forma:

Pós processamento

FXAA

  • Prós
    • – É um efeito de Anti-Aliasing obtido quase sem penalizações nas performances
  • Contras
    • – Está longe de ser considerado um tratamento eficaz
    • – Produz distorção na imagem ao criar um efeito de desfocagem/névoa, apesar de não ser algo extremamente chocante ou notório.

SMAA 1x

  • Prós
    • – Pequenas penalização na performance (apesar de ser um pouco maior que o FXAA)
    • – Não cria qualquer distorção na imagem
  • Contras
    • – Não é mais eficaz do que o FXAA

SMAA 1Tx

– SMAA 2Tx

– SMAA 4x

  • Prós
    • SMAA 1x
      • A descrição de Tiago Sousa dá a entender um efeito com uma qualidade que até deverá ser superior ao SMAA 2TX, mas com a mesma penalização de performances. No entanto tal só poderá ser confirmado perante um jogo que implemente os dois efeitos e permita comparar.
    • SMAA 2x
      • É um efeito que se demonstra com uma capacidade de Anti-Aliasing já eficaz, e com uma pequena penalização de performances.
    • SMAA 4X
      • Um bom efeito de Anti-Aliasing. É o melhor dos três métodos.
  • Contras
    • Todos
      • Todos estes métodos acrescentam distorção de imagem ao apresentarem, em maior ou menor quantidade, e mais ou menos mascarado, o efeito de fantasma típico do Temporal AA.
    • SMAA 4X
      • Impacto na performance geral que no caso de cima implica perdas de 30%.

Como vemos, com excepção do SMAA 1x (que é de fraca qualidade) não existe um método de pós processamento que não introduza, em maior ou menor escala, distorções à imagem original. Esse é o motivo pelo qual estes métodos não são considerados puros e, dependendo do programador achar que o efeito de distorção se adapta ou não ao seu jogo, se dá preferência a outros como é o caso do MSAA 2x. 

O maior problema dos SMAA 1TX, 2TX e 4X prende-se com o uso do Temporal AA que não faz mais do que “borratar” a imagem entre dois fotogramas, criando assim uma suavização de cena, mas um efeito de fantasma. Talvez compreendam melhor o uso da palavra “borratar” se souberem que o Temporal AA é também conhecido por outro termo bem mais familiar…. Motion Blur. Esta é uma situação comprovada nestes outros slides de Tiago Alex Sousa. Podem ver mais uma consequência da sua presença nesta imagem, bem como o seu efeito na sua componente mais pura nesta outra imagem.

Durante o processamento

MSAA 2X

  • Prós
    • Um efeito de Anti-Aliasing relativamente eficaz e sem qualquer distorção de imagem criada pelo seu uso
  • Contras
    • Não é superior a um SMAA 2TX, mas possui mais impacto nas performances (24% no exemplo de cima).
    • Possui problemas nas zonas de transparências a não ser que usado nas versões optimizadas pela Nvidia ou ATI.

MSAA 4X

– MSAA 8x

  • Prós
    • Apresentam bons resultados (4x) e muito bons resultados (8x), sem distorções de imagem.
  • Contras
    • Bastante penalizadores nas performances (no exemplo de cima temos 45% no 4X e 60% no 8x)
    • Possui problemas nas zonas de transparências a não ser que usado nas versões optimizadas pela Nvidia ou ATI.

O que não se pode deixar de referir é que todos estes métodos são de livre implementação. A escolha de um método sobre o outro dependerá apenas da facilidade com que o mesmo se adapta ao motor usado e efeitos visuais pretendidos (e nesse aspecto o Motion Blur pode ser interessante em alguns casos), bem como da performance disponível para o utilizar. O uso de maiores resoluções levam a uma cada vez menor necessidade de métodos de AA ao se reduzir o tamanho dos pixels, motivo pelo qual o SMAA está a tornar-se a metodologia de preferência.

Publicidade

Posts Relacionados