Aliasing e Anti-Aliasing, o que são e como funcionam

Nota: Este artigo encontra-se algo desactualizado face à evolução das técnicas de Anti-Aliasing. Recomendamos por isso a leitura deste outro artigo, bastante mais actual.

ANTI-ALIASING

Muitas vezes ouvimos falar e até activamos os modos AA ou Anti-Aliasing. Mas o que são eles efectivamente?

O que o Anti-Aliasing faz é notório a olho nu, e é um método que permite minimizar o “efeito de escada” das linhas em diagonal. Mas porque é que o Aliasing existe, e como funcionam os métodos usados para a sua resolução?



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. Chama-se de pixels ou pontos de imagem.

Tomando como exemplo uma resolução tradicional de 800*600, esta imagem é constituída por 800 colunas de pixels e 600 linhas de pixels, com um total de 480 mil pixels independentes.

Naturalmente ao se criar uma imagem constituída por estes pequenos quadrados, e dado o seu alinhamento, as linhas horizontais ou verticais ficam perfeitas. Mas já as linhas inclinadas, quando analisadas ao detalhe, 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.

Como é fávil de ver no exemplo, caso colocássemos os pixels que constituem a linha numa sequencia horizontal ou vertical, possuíamos uma linha perfeita. Mas desta forma, ao possuirmos uma linha inclinada o alinhamento terá de ser ajustado o melhor possível, criando assim uma linha onde são notórias as deformações e a existência de quadrados.

A consequência deste efeito é notória na foto que se segue:

É aqui que entra o Anti-Aliasing, um conjunto de métodos que permitem reduzir o efeito de escada na imagem.

Imaginemos de novo a linha de exemplo colocada em cima. Caso aplicasse-mos um dos diversos métodos de anti-aliasing de que falaremos de seguida, o que acham que lhe acontecia?

Não era possível diminuir o tamanho dos pixels, pois isso serial alterar a resolução, e mover os mesmos de posição também não alteraria nada. Então o que será que o Anti-Aliasing poderia fazer?

Reparem na imagem que se segue:

O que um tratamento de anti-aliasing faria seria alterar ligeiramente as tonalidades da cor onde fosse necessário, criando igualmente 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).

E se ao olharmos para a grelha até ficarmos com a ideia que até nem melhoramos muito a imagem, reparem num exemplo menos aumentado, e vejam a diferença que este método criou na foto de cima.

Impressionante, não? O efeito de escada desapareceu quase por completo, mas naturalmente que quanto menor for a resolução com que estão a visualizar a foto, mais notório será que o efeito ainda existe, apesar de fortemente suavizado.

Mais exemplos mostram bem as vantagens destes métodos, quer em grafismo (desenho de linhas), quer em imagens cruas:

Mas que métodos existem de anti-aliasing e que impacto os mesmos tem sobre a performance de um computador?

Na prática existem milhentos modos de se criar um anti-aliasing, mas todos eles derivam de três métodos fundamentais. Como será notório pela explicação, a aplicação do anti-aliasing é algo que pouca ou nenhuma diferença faz caso seja aplicado a imagens estáticas.

Onde os impactos na performance se notam é na sua aplicação a universos 3D calculados em tempo real e onde o caso mais comum é os Videojogos.

Ora ao termos um universo 3D calculado a 60 imagens por segundo, e onde todas essas 60 imagens podem, ou não, ser diferentes entre si, obriga a que o anti-aliasing seja aplicado a todas elas, ou seja, igualmente terá de ser aplicado 60 vezes por segundo.

E aqui é que o anti-aliasing pesa. Mas passemos a explicar, de forma bastante simplificada, os vários métodos e perceberemos melhor.

EDGE ANTI-ALIASING



O Edge anti-aliasing é um método de anti-aliasing exclusivo ao universo 3D, não podendo ser aplicado em imagens 2D. O motivo de tal é que este método se baseia na análise dos polígonos constituintes das peças 3D, tentando detectar-lhes as suas bordas (edges). O método aplica então um tratamento de imagem apenas aos pixéis que constituem as bordas dos polígonos, eliminado assim o efeito de escada nos locais mais notórios. É contudo um método muito imperfeito e incompleto, tendo sido muito usado nos tempos da Nintendo 64 e mesmo na PS2, mas tendo caído em desuso pela complexidade da sua programação e resultados pouco eficazes. Era contudo um método muito pouco pesado pois simplificava o processo ao não ser aplicado o anti-aliasing à totalidade da imagem, mas sim apenas às partes onde ele efectivamente era mais preciso.

SUPER SAMPLING (SSAA)

O Super sampling é já, à semelhança de dos seguintes métodos, um método de Anti Aliasing de ecrã total, isto é, aplicado à totalidade da imagem. É suportado por todas as placas gráficas que permitem Anti-Aliasing, mas é um método que caiu em desuso por ser extremamente pesado.

Efectivamente, o que este método fazia era render a imagem a uma resolução superior para depois, a trabalhar por pedaços de 32*16 pixeis, que eram posteriormente reduzidos por interpolação bicúbica para pedaços de 16*8 pixeis.

No entanto, dado o grande aumento das resoluções nos últimos anos, trabalhar uma imagem com uma resolução de 1680*1050, obrigava a placa a render uma imagem a 3360*2100, o que como é lógico torna o processamento demasiadamente pesado, e como tal, com grande impacto no número de imagens por segundo que a placa gráfica consegue debitar. E nem vamos falar dos casos de imagens em Full HD.

MULTISAMPLING (ou OVERSAMPLING) (MSAA)

Este é o método mais usado para o Anti-Aliasing, e basicamente o que faz é pegar em vários frames e igualmente usando métodos de interpolação bicúbica cria uma única imagem com a mediana dos valores obtidos. O número de imagens e a qualidade da amostragem (área) varia conforme o nível de Anti-Aliasing solicitado, podendo nos modos mais avançados usar parcialmente o conceito do supersampling.

Este método possui uma grande falha, o facto de não considerar a existência de texturas transparentes, o que levou quer a ATI, quer a Nvidia a criarem variantes do mesmo que denominam respectivamente de Adaptative Anti-Aliasing (AdAA), e Transparent Anti-Aliasing (TrAA), e que tomam as transparências em consideração.

O motivo para a falha na aplicação de AA às zonas transparente é que as texturas que aparecem transparentes no ecrã, não o são na realidade. Elas apenas utilizam uma determinada cor pré definida que depois é ignorada no processamento 3D, como o rosa usado na imagem de baixo e relativa a uma textura de uma rede.

O que iria acontecer é que o MSAA, para não misturar o rosa com o branco pura e simplesmente iria ignorar a transparência, sendo que estas texturas iriam aparecer sem qualquer tratamento. Já com o AdAA ou o TrAA, o problema não se coloca, como se pode ver em baixo.

COVERAGE SAMPLING (CSAA)

Este é um método exclusivo das placas Nvidia, e que foi desenvolvido de forma a permitir que se consiga obter resultados equivalentes a 8xAA ou 16xx com um impacto de performance semelhante ao 4xAA.

Basicamente trata-se de uma evolução do MSAA, com a introdução de novos tipos de amostragem, que resultam numa melhoria significativa do resultado final. O motivo prende-se basicamente com o facto de, entre outros factores, o Z buffer (ou a profundidade da imagem) deixar de ser tomada em conta. Tal permite reduzir a largura de banda, memória e a alocação do GPU ao processo.

Vejamos o exemplo retirado do site da Nvidia:

Sem AA

4x MSAA

16x MSAA

16x CSAA ou 16xQAA como a Nvidia lhe chama

Como se vê, os resultados com 16x CSAA são em tudo semelhantes aos 16x MSAA, mas tendo em conta o impacto de performance de um 4XAA, o método revela-se bastante melhor.



Esperemos que tenham ficado com uma noção do que significam estes termos.



Posts Relacionados