Anti-Aliasing: Multi-Sampling e Alpha-to-Coverage

5 min de leitura
Imagem de: Anti-Aliasing: Multi-Sampling e Alpha-to-Coverage
Avatar do autor

O Multi-Sampling é uma das técnicas de anti-aliasing (o processo que suaviza serrilhados na imagem, explicado neste artigo). Ele foi introduzido com a série GeForce 3 de placas de vídeo da NVIDIA, sendo considerado como de segunda geração, e atualmente é utilizado pela maioria dos jogos. Um exemplo é Half-Life 2, cuja tela de configuração pode ser vista abaixo:

Fonte: AnandTechO MSAA funciona da seguinte maneira: a placa de vídeo processa a imagem, verifica em que pontos é necessário eliminar serrilhados (geralmente nas bordas dos objetos) e aplica o filtro a eles, ignorando boa parte do restante.

Para que isso ocorra, algoritmos calculam a diferença entre a profundidade dos polígonos e determinam, por exemplo, quais porções da imagem estão contidas em um mesmo objeto, quais pixels e valores precisam ser filtrados e assim por diante. O processo é muito mais inteligente que o do Super-Sampling Anti-Aliasing (SSAA). 

Para fins de comparação, o SSAA renderiza toda a imagem em uma resolução altíssima, não se importando com questões como desempenho ou necessidade de suavização de serrilhados. Se um ponto está na imagem, ele é processado individualmente e depois reescalonado para a resolução do monitor.

Fonte: DriverHeaven

O Multi-Sampling, por sua vez, reconhece pixels idênticos em uma região e os filtra como um único conjunto, aplicando o mesmo valor de cor a todos. O resultado imediato é um ganho enorme de desempenho, que pode ser aproveitado pela placa para rodar com folga cenas mais complexas — seja em termos de geometria dos cenários, qualidade de texturas ou até mesmo melhoras nos efeitos visuais.

Embora alguns jogos não tragam opções para a ativação do Multi-Sampling Anti-Aliasing, os jogadores podem recorrer diretamente aos drivers das placas de vídeo e ativar o recurso manualmente. Para este exemplo, foi utilizado o centro de controle de uma placa da AMD.

Amostras, amostras...Como funciona a filtragem da imagem?Uma vez definida a região em que deve ser aplicada a suavização de serrilhados, inicia-se o processo de filtragem. São colhidas amostras de cores a partir dos pixels da imagem. Essas amostras são calculadas e recombinadas, formando transições mais graduais entre as diferentes cores. Como resultado, o jogador não vê serrilhados, mas sim uma linha suave.

O número de amostras colhidas é determinado pelo jogador (no caso de jogos para computador) ou pelos desenvolvedores (em consoles), e é diretamente proporcional à qualidade da imagem. Isso explica porque há 4xMSAA, 2xMSAA, entre outros.

Em uma explicação mais técnica, as amostras colhidas a partir do centro de um pixel têm mais peso do que aquelas obtidas a partir dos cantos dele, para a criação dos novos valores de cor. De acordo com documentos da NVIDIA, o centro equivale a 4/8 do cálculo, enquanto cada um dos cantos do pixel tem peso de 1/8 para a equação. 

Fonte: NVIDIA

CSAA: uma variação esperta

Se comparado ao SSAA, o MSAA é muito mais leve, mas ainda assim impraticável para altas resoluções (ainda mais em jogos como Crysis, que exigem processamento para milhares de outros cálculos feitos em tempo real).

Portanto, a NVIDIA desenvolveu o que chama de Coverage-Sampling Anti-Aliasing (CSAA). O procedimento é muito similar ao empregado no MSAA, com a diferença que o número de amostras de cobertura foi desligado das amostras de cor e profundidade, liberando ainda mais os recursos da placa. As comparações da NVIDIA podem ser vistas abaixo. Notem que o recurso somente está disponível em placas da empresa, a partir da oitava geração: 

Fonte: NVIDIA

Alpha-to-Coverage: uma solução elegante

O MSAA não é isento de falhas. Por limitar a filtragem apenas a áreas externas dos polígonos, as texturas internas não recebem nenhum tipo de tratamento. Isso não é problema quando o objeto recriado com os polígonos é sólido, tal como uma pedra ou uma parede de cenário.

No entanto, quando desenvolvedores utilizam texturas transparentes (chamadas alpha) para criar coisas como cercas metálicas, folhagem, árvores e portões, o serrilhado persiste, incomodando os olhos do jogador e reduzindo consideravelmente a qualidade de imagem. É como se essas texturas caminhassem junto com a câmera, criando um defeito conhecido como Texture Shimmering.

Para que fique claro, os objetos citados acima são muitas vezes construídos apenas por texturas para poupar o poder de processamento das placas, em vista da complexidade bem reduzida. Exemplos do problema são ilustrados na imagem abaixo. Reparem especialmente nas pontas dos galhos das árvores e na folhagem, que ganham definição e perdem o visual pontilhado:

Fonte das imagens: XtremeSystems Forums

A solução está em estender a aplicação do MSAA para as texturas, através do Alpha-to-Coverage ("Alfa para Cobertura"). De um modo simplificado, o Alpha-to-Coverage faz a amostragem das texturas transparentes (assim como para um polígono) e interpreta o quanto elas cobrem um pixel da imagem. O resultado é recombinado e aplicado à cena.

O processo, tecnicamente, é bem mais complexo, envolvendo a criação de uma série de máscaras de filtragens e a recombinação delas na imagem final. Ainda que esta filtragem das texturas tenha um peso considerável, ela ainda é muito mais leve do que aplicar SSAA aos cenários.

O resultado também é quase impecável (ficando as texturas um pouco mais borradas em suas bordas, em comparação à aplicação de SSAA). Para corrigir isso, alguns desenvolvedores optam por acrescentar um multiplicador de contraste para essas texturas, na tentativa de torná-las mais visíveis.

Abaixo, colocamos algumas imagens comparativas obtidas a partir dos fóruns do site Beyond3D. Trata-se de uma versão modificada de Doom 3 com um objetivo muito específico: mostrar as cercas compostas por texturas alpha

Normal 6xAA

Fonte: B3D Forum ATC 6xAA

Fonte: B3D Forum

Outro bom exemplo é Final Fantasy XIII, no Xbox 360. Os métodos adotados no console da Microsoft fazem com que as texturas transparentes no cabelo das personagens fiquem serrilhadas. O defeito é agravado pela resolução diminuída na plataforma da Microsoft, com o objetivo de poupar o processador gráfico do console:
 

De um modo sucinto, o MSAA é uma técnica de suavização de serrilhados inteligente, que reconhece quais porções da imagem necessitam da aplicação do recurso, apresentando desempenho muito superior ao método SSAA tradicional. O site nHancer (clique aqui e confira) criou um sistema enxuto para mostrar as mudanças.

A falha do MSAA na leitura de texturas alpha pode ser corrigida por meio do uso da técnica Alpha-to-Coverage, resultando em uma qualidade de imagem equiparável à apresentada pelo SSAA, ainda que com um desempenho vastamente superior.

Por fim, salientamos que diferentes placas de vídeo (até da mesma fabricante) produzem qualidades diferentes de filtragem de imagem. Um exemplo clássico vem dos consoles Xbox 360 e PlayStation 3 — que possuem respectivamente um chipset gráfico fabricado pela AMD e pela NVIDIA.

Em Mass Effect 2, ambos utilizam MSAA de duas amostras, mas notem que as bordas do rosto da garota são ligeiramente diferentes. Efeitos de iluminação devem ser desconsiderados neste caso, pois são fruto de outros processos da placa.

Fonte: DigitalFoundry
Veja também: