Obs. Termos técnicos em inglês não serão traduzidos, para que não percam o sentido.
Tecnologia NVIDIA FXAA
FXAA significa Fast approXimate Anti-Aliasing, um algoritmo novo criado por TIMOTHY LOTTES, funcionário da NVIDIA, que sentiu a necessidade de um AA com maior desempenho, sendo executado apenas uma vez na fase de pós-processamento, tendo menor consumo de memória, porém compromissado com a precisão e qualidade. As vantagens estão relacionadas principalmente com a redução de Specular Aliasing e sub-pixel aliasing ( flicker causado por superfícies renderizados a menor que um simples pixel ).
Pontos interessantes
1. Reduz a pixelação das imagens mantendo a acurácia com desempenho a um custo prático de ms/frame para o engine típico em games. Uma GTX480 processando em 1920×1200 consegue fazer em até 1ms para o FXAA Preset.
2. O efeito é efetivo nos cantos dos triângulos e no resultado do processamento shader. FXAA tem lógica para reduzir pixelação causada por single-pixel e sub-pixel, repare na imagem abaixo, a melhoria do visual na área sombreada em relação a ausência do AA.
3. É fácil de integrar num shader single pixel, tendo a execução única a cada passo sobre um sample de imagem. FXAA traz vantagens sobre o MSAA, principalmente usando render targets Stereo e multi-displays ou back buffers (ROPs).
4. Tem uma vantagem de performance para uso com deferred rendering , ao contrário do MSAA com múltiplos shaders. Outro importante aspecto do FXAA a se notar é que ele é compatível com GPUs da NVIDIA e AMD , o desenvolvedor queria algo que pudesse ser melhor que MLAA no quesito sub-pixel e que não requeresse código GPGPU, que pudesse rodar também em jogos DirectX9 e até em hardware puro DX9. Sim, FXAA não usa DirectCompute ou CUDA ou OpenCL, ele é apenas um shader simples de pós-processamento implementado no jogo, é eficiente e é uma das melhores alternativas ao MSAA que é impraticável ou inefetivo dependendo do jogo e do custo envolvido. FXAA tem uma característica bem interessante que permite o próprio desenvolvedor adaptar da melhor forma possível o efeito aos jogos conforme suas necessidades de desempenho e IQ (Image quality), não é algo imposto como o MSAA ou MLAA, a flexibilidade é maior, porém demanda a intervenção do programador, lidando com a redução da pixelação, ou aumento da performance final. Jogos que não tem a implementação, jamais poderão ter este AA.
Versões para FXAA
FXAA 1 – Descrito no SDK DX11 da NVIDIA, é o método padrão usado nos games F3AR e DNF, Age of Conan, Crysis 2 e Brink.
FXAA 2 – usado no Xbox 360
FXAA 3 – tem duas variações, modo Quality para o PC e modo Console para Xbox 360 e PS3. A performance do FXAA3 é maior do que o FXAA 1, a título de comparação, uma imagem típica em 720p pode ser processada por volta de 0.21 ms/frame em uma GTX480 com DirectX 11. Performance vai variar entre DX9 e DX11 nas mesmas configurações (DX11 leva vantagem devido a instruções especiais como gather4 e offsets programáveis).
Desempenho
O site HOCP fez comparativos bem interessantes, misturando 0XAA, MSAA 2XAA , MSAA 4XAA, com FXAA, seguem os testes que dão uma boa ideia de como o FXAA consegue ser melhor em desempenho do que seus rivais, tanto em NVIDIA como em AMDs.
Em Fear, usando uma GTX580, com FXAA 1, se nota o pouco impacto deste recurso nos frames quando ligado.
GTX580 com bons FPS quando FXAA ligado!!
HD6970 também desempenhando bem o FXAA.
GTX560TI com ótimo rendimento.
Qualidade visual em AMD e NVIDIA em FXAA 1
A qualidade final percebida para o FXAA é idêntica tanto para AMD como NVIDIA, abaixo duas imagens representando o efeito final alcançado:
A imagem acima demonstra como o FXAA 3 atua, que é muito efetivo na cena toda. A imagem à esquerda não usa AA, está horrível, já a imagem Central, está usando a versão FXAA 3.9 porém com “sub-pixel contrast reduction” desativado, repare que as folhas do topo ainda aparecem pixeladas, já a imagem da direita, está com o “sub-pixel contrast reduction ativado” fazendo uma grande diferença no resultado final eliminando qualquer flicker que possa ocorrer ali naquela área. Este tipo de ajuste do sub-pixel é normalmente o desenvolvedor que o faz, dispensando o usuário de ter que configurar painéis específicos da placa de vídeo.
MLAA x FXAA – Quem é o melhor em técnica e desempenho?
FXAA é a resposta da NVIDIA ao MLAA da AMD. O MLAA é também um técnica de filtragem de pós-processamento porém ocorre fora do tradicional pipeline de rendering do desenvolvedor de games. AMD clama que esta técnica é independente de hardware ou engine gráfico, sendo compatível tanto com Direct3D como oGL ou qualquer outro engine que utilize DirectCompute. Atualmente este recurso somente pode ser ativado nas AMD GPUs. No geral, o MLAA funciona semelhante ao FXAA, tratando as informações de cores da imagem renderizada, rastreando pixels com alto grau de contraste local, então ele aplica um filtro para reduzir o contraste e a pixelação consequentemente. Agora como cada técnica está funcionando, é bem diferente, FXAA identifica locais na cena de alto contraste para cada pixel, já o MLAA rastreia por padrões de alto contraste nos mesmos pixels, o que acaba dando uma vantagem para o FXAA em termos de qualidade, pois ele trabalha a nível de pixel (melhor para tratar os problemas de sub-pixel comentados anteriormente).
Falando-se em performance final, o FXAA é superior ao MLAA, veja abaixo o teste feito em uma radeon em 3 resoluções distintas:
MLAA x FXAA – Quem é o melhor em qualidade da imagem?
O HOCP tentou responder a estas questões, porém não conseguiu exatamente eleger um grande vencedor, ambas as técnicas são muito boas, e dificilmente se constata diferenças a olho nu ou até com um zoom na imagem.