O anti-aliasing tem um nome intimidador, mas o que ele faz pelas telas de nossos computadores é bastante fundamental. Pense da seguinte forma: uma linha tem resolução infinita, mas nossas telas digitais não. Portanto, quando “encaixamos” uma linha na grade de pixels do monitor, podemos compensar imaginando pixels parciais ao longo da linha, fingindo que temos uma tela de resolução muito maior do que a que temos de fato. Assim:
Como o senhor pode ver nessas pequenas linhas pretas onduladas que desenhei, o anti-aliasing produz uma imagem superior usando pixels cinza para simular pixels parciais ao longo das bordas da linha. É um truque, mas, em se tratando de truques, é bastante eficaz. É claro que o adequado A solução adequada para esse problema é ter telas de resolução extremamente alta, em primeiro lugar. Mas, além dos minúsculos dispositivos portáteis, Eu não esperaria que isso acontecesse tão cedo.
Isso também se aplica a cenas gráficas 3D muito mais complexas. Talvez ainda mais, já que o a adição de movimento amplifica os efeitos de aliasing de todas as linhas rastejantes que compõem as bordas da cena.
Mas o anti-aliasing, especialmente a 30 ou 60 quadros por segundo em um jogo complexo de última geração, com milhões de polígonos e efeitos ativos, não é barato. De acordo com minha resposta aqui, o senhor geralmente pode esperar um custo de desempenho de pelo menos 25% para um anti-aliasing 4X adequado. E isso é para a versão mais otimizada do anti-aliasing que conseguimos criar:
Super-Sampled Anti-Aliasing (SSAA). O truque mais antigo do livro – eu o classifico como universal porque o senhor pode usá-lo em praticamente qualquer lugar: renderização direta ou diferida, ele também anti-serrilhamento de recortes alfa e proporciona uma melhor amostragem de textura em alta anisotropia. Basicamente, o senhor renderiza a imagem em uma resolução mais alta e reduz a amostragem com um filtro quando terminar. As bordas nítidas ficam com suavização de serrilhado à medida que são reduzidas. É claro que há um motivo pelo qual as pessoas não usam SSAA: custa uma fortuna. Seja qual for a sua conta de taxa de preenchimento, ela é de 4x até mesmo para SSAA mínima.
Anti-Sampled Anti-Aliasing (MSAA). Isso é o que o senhor normalmente tem em hardware em uma placa de vídeo moderna. A placa de vídeo renderiza em uma superfície maior do que a imagem final, mas ao sombrear cada “cluster” de amostras (que terminará em um único pixel na tela final), o sombreador de pixels é executado apenas uma vez. Economizamos uma tonelada de taxa de preenchimento, mas ainda queimamos a largura de banda da memória. Essa técnica não elimina o alias de nenhum efeito que sai do shader, porque o shader é executado a 1x, de modo que os recortes alfa são irregulares. Essa é a maneira mais comum de executar um jogo de renderização progressiva. A MSAA não funciona em um renderizador diferido porque as decisões de iluminação são tomadas depois que a MSAA é “resolvida” (reduzida) para o tamanho final da imagem.
Anti-aliasing de amostra de cobertura (CSAA). Uma otimização adicional no MSAA da NVidia [ed: ATI has an equivalent]. Além de executar o shader em 1x e o framebuffer em 4x, o rasterizador da GPU é executado em 16x. Portanto, embora o buffer de profundidade produza um melhor anti-aliasing, os tons intermediários de mistura produzidos são ainda melhores.
Praticamente todo o anti-aliasing “moderno” é uma variante do hack MSAA, e até mesmo o esse custa um quarto de sua taxa de quadros. Isso é proibitivamente caro, a menos que o senhor tenha tanto desempenho que nem se importe, o que raramente é verdade para qualquer jogo recente. Embora as linhas rastejantes de aliasing me incomodem, não acho que o anti-aliasing por si só valha a pena abrir mão de um quarto da minha taxa de quadros e/ou diminuir outros detalhes para pagar por ele.
Mas isso foi antes de eu saber que o existem algumas alternativas emergentes à MSAA. E então, para minha surpresa, essas alternativas começaram a aparecer como opções gráficas reais nos jogos de PC desta temporada: Battlefield 3, Skyrim, Batman: Arkham City e assim por diante. O que é esse tal de FXAA e como ele funciona? Vamos ver isso em ação:
(este é um fragmento ampliado; clique para ver a tela inteira)
FXAA significa Fast Approximate Anti-Aliasing (Anti-serrilhamento Aproximado Rápido) e é um recurso de ainda mais inteligente que o MSAApois ignora polígonos e bordas de linha, e simplesmente analisa os pixels na tela. É um programa de sombreamento de pixels documentado neste PDF que executa cada quadro em um ou dois milissegundos. Quando ele vê pixels que criam uma borda artificial, ele os suaviza. É isso mesmo, nas palavras do autor, “a coisa mais simples e mais fácil de integrar e usar”.
O FXAA tem duas vantagens principais:
- O FXAA suaviza as bordas em todos pixels na tela, inclusive aqueles dentro de texturas com mistura alfa e aqueles resultantes de efeitos de sombreamento de pixels, que antes eram imunes aos efeitos da MSAA sem soluções alternativas.
- É rápido. Muito, muito rápido. Versão 3 do algoritmo FXAA leva cerca de 1,3 milissegundos por quadro em uma placa de vídeo de US$ 100. As versões anteriores foram consideradas o dobro da velocidade do 4x MSAAportanto, o senhor tem um custo modesto de 12 ou 13% na taxa de quadros para ativar o FXAA e, em troca, obtém um considerável redução considerável no aliasing.
A única desvantagem, e é pequena, é que o senhor pode ver um pouco de “redução” indesejada das bordas dentro das texturas ou em outros lugares. Não sei se é justo chamar isso de desvantagem, mas o FXAA não pode ser aplicado diretamente a jogos mais antigos; os jogos precisam ser especificamente codificados para chamar o shader de pixel FXAA antes que o eles desenhem a interface do usuário do jogo, caso contrário, ele também suavizará as bordas dos elementos do HUD na tela.
O método FXAA é portanto bom, na verdade, ele torna todas as outras formas de suavização de serrilhado em tela cheia praticamente obsoletas da noite para o dia. Se o senhor tiver uma opção FXAA no jogo, deve ativá-la imediatamente e ignorar quaisquer outras opções de AA.
O FXAA é um excelente exemplo do poder de hacks e heurísticas simples. Mas também é uma ótima demonstração de como atacar problemas de programação de um ângulo diferente — ou seja, em vez de pensar na tela como uma coleção de polígonos e linhas, pense nela como uma coleção de pixels, pode permitir que o senhor resolva problemas computacionalmente difíceis de forma mais rápida e indiscutível melhor do que qualquer um imaginava ser possível.
[advertisement] Qual é o seu próximo passo na carreira? Carreiras no Stack Overflow tem as melhores listas de empregos de grandes empresas, quer o senhor esteja procurando oportunidades em uma startup ou na Fortune 500. O senhor pode pesquisar em nosso anúncios de emprego ou criar um perfil e deixe que os empregadores encontrem o senhor. |