Índice das dicas
Entendendo o antialiasing e o anisotropic filtering
Por Carlos E. Morimoto em 26 de outubro de 2009 às 03h29
9Antes de ser renderizada, a imagem 3D é uma espécie de desenho vetorial, que pode ser exibido em qualquer resolução, sem perda de qualidade. O problema é que o monitor possui uma resolução definida, de forma que a placa de vídeo precisa renderizar a imagem de acordo com a limitação de resolução do monitor, muitas vezes descartando detalhes das imagens.
A partir do ponto em que a placa de vídeo tem potência suficiente para renderizar os frames a uma resolução superior à do monitor, você pode ativar o uso de um algoritmo de antialiasing, o que permite aplicar parte dos ciclos ociosos em melhorar a qualidade das imagens exibidas.
Os algoritmos de antialiasing são chamados genericamente de "FSAA" (Full-Screen Antialiasing). A ideia básica é suavizar as imagens (sobretudo os contornos), reduzindo a granulação e tornando a imagem mais "lisa", de forma que ela aparente uma resolução maior que a real:

Temos aqui um exemplo de aplicação do antialiasing. Nos dois screenshots temos exatamente a mesma cena, mas você pode perceber que a de baixo ficou com os contornos mais suaves e uma qualidade geral muito melhor:


A primeira geração foi o SSAA (SuperSampling Antialiasing), suportado desde as primeiras versões das placas nVidia GeForce e ATI Radeon. A ideia por trás do SSAA é bastante simples: renderizar imagens 2, 4 ou 8 vezes maiores do que a resolução do monitor e em seguida reduzi-las até a resolução que será exibida, aplicando um algoritmo de antialiasing. Com isso os detalhes são suavizados e a imagem preserva a maior parte dos detalhes da imagem inicial.
O grande problema é que usar o SSAA causa uma grande redução no desempenho da placa de vídeo, já que ela passa a essencialmente renderizar as imagens em uma resolução muito mais alta. Ao usar o valor "4X", a placa passa a renderizar imagens 4 vezes maiores que a resolução do monitor (2560x1600 ao usar 1280x800, por exemplo), o que reduz o fill-rate efetivo da placa a aproximadamente um quarto do valor original, reduzindo severamente o FPS em casos onde o limitante não é o processador ou o processamento de shaders. Isso faz com que o SSAA seja utilizável apenas em resoluções relativamente baixas, ou ao rodar jogos mais antigos.
A segunda geração é o MSAA, suportado a partir das GeForce 3. No MSAA o cálculo de antialiasing é feito de forma mais inteligente com a renderização de múltiplas cópias de cada pixel e a interpolação entre eles e o uso de algoritmos otimizados, que permitem que a placa se concentre nos trechos da imagem onde o antialiasing vai resultar em um maior ganho de qualidade. Se dentro de um polígono existem 4 pixels idênticos, por exemplo, eles são processados como se fossem apenas um e o mesmo valor de cor é aplicado aos quatro. No SSAA eles seriam processados como 4 pixels separados, o que consumiria 4 vezes mais processamento.
Com a aplicação de sucessivas melhorias no algoritmo do MSAA, tanto por parte da nVidia, quanto por parte da ATI, chegamos ao ponto atual, onde as placas são capazes de aplicar o algoritmo de Antialiasing com uma perda de desempenho relativamente pequena, se comparada ao que tínhamos na época do SSAA.
O antialiasing pode ser ajustado tanto dentro dos jogos quanto através do driver. A configuração dentro das opções de cada jogo são quase sempre preferíveis, já que permitem escolher entre os modos oficialmente suportados pelo desenvolvedor. De uma maneira geral, o uso de antialiasing de 4x com multisampling é o melhor custo-benefício, já que oferece uma melhoria perceptível na qualidade, sem uma perda tão gritante no FPS. Os níveis mais altos (vai até o 16x) oferecem ganhos incrementais, mas a redução no FPS é grande demais.
A segunda opção é forçar o uso de um modo específico através do driver, o que permite escolher entre todos os modos suportados pela placa, mas em compensação resulta em muito mais problemas. Um bom meio termo é o "Enhance the application setting", que tenta ativar a configuração quando possível, sem forçar o uso em jogos onde ela resulta em problemas.

O Anisotropic Filtering, por sua vez, é uma técnica usada para melhorar a qualidade das texturas quando aplicadas sobre objetos de formato irregular (como, por exemplo, a textura aplicada sobre o piso, em jogos de primeira pessoa), evitando que a qualidade e a nitidez da textura variem de acordo com a proximidade. Veja um exemplo, com o anisotroic filtering ativado:

... e agora desativado:

Tudo começou com o Bilinear Filtering, efeito usado em jogos antigos, onde a mesma textura é usada em toda a extensão do objeto, utilizando um simples algoritmo de zoom. O Bilinear Filtering é bastante leve, mas resulta em uma qualidade visual ruim, pois faz com que a parte mais próxima fique pixerizada.
Em seguida veio o Trilinear Filtering, que utiliza diferentes versões da mesma textura (com diferentes tamanhos) para obter transições mais suaves. Dessa forma, uma versão de 512x512 maior da mesma textura pode ser utilizada na parte mais próxima e versões menores (de 256x256, 128x128, etc.) podem ser utilizadas na parte mais distante, amenizando o problema. Naturalmente, o uso do Trilinear Filtering consome mais recursos da placa, sobretudo mais memória, mas nas placas atuais a diferença não é tão grande assim.
O Trilinear Filtering oferece resultados satisfatórios em superfícies verticais (como no caso das paredes e janelas), mas resulta em texturas borradas no caso de superfícies em ângulos abertos, como no caso do piso.
O Anisotropic Filtering segue o mesmo princípio, mas utiliza um número muito maior de versões da mesma textura, incluindo também versões oblíquas, com resoluções como 128x512, 256x64 e assim por diante. Isso permite que a placa combine o uso de diferentes versões da mesma textura, aplicando as que mais se aproximam do ângulo de visão utilizado.
Quando ativado, você pode configurar o Anisotropic Filtering com valores de 2x (duas vezes mais versões de cada textura do que no Trilinear Filtering) a 32x (32 vezes mais).

Cada aumento no valor corresponde a um pequeno ganho de qualidade, mas a partir de 8x a diferença torna-se muito pequena. De uma forma geral, os modos 2x e 4x são os que oferecem um melhor custo-benefício, já que oferecem um ganho tangível sobre o Trilinear Filtering, sem uma redução tão grande no FPS.
A principal observação é que o Anisotropic Filtering taxa pesadamente o barramento com a memória, fazendo com que a placa passe a armazenar um volume muito maior de texturas (o que aumenta tanto o volume de memória de vídeo usada, quanto o volume de dados transferidos).
Isso faz com que ele tenha um impacto relativamente pequeno sobre o FPS em placas como as Radeon HD 4870 ou as GeForce GTX 285, que desfrutam de barramentos mais largos com a memória, mas seja desastroso em placas de baixo custo, como a Radeon HD 4650, onde a GPU é gargalada pelo barramento estreito. No caso delas, você acaba sendo obrigado a usar o Trilinear Filtering com texturas de média qualidade para manter um bom FPS.
9 comentáriosPor Carlos E. Morimoto. Revisado 23 de março de 2011 às 12h35


Comentários