Enquanto o anti-aliasing é, de forma geral, a suavização de bordas serrilhadas em diferentes objetos e superfícies, o Multi-Sampling Anti-Aliasing é justamente uma técnica avançada de anti-aliasing. Na verdade, a maior parte das placas de vídeo — VGAs — modernas é capaz de empregar esse procedimento para melhorar a qualidade dos visuais exibidos na tela.
É comum encontrar várias opções relacionadas ao MSAA em menus avançados de jogos eletrônicos. Games robustos de tiro, como Half-Life 2, geralmente permitem que o usuário manipule diversas configurações gráficas.
Até mesmo alguns programas das VGAs instaladas em computadores — os aplicativos que lidam com os famosos drivers — podem aplicar diferentes amostras de MSAA em qualquer software que exiba visuais tridimensionais. Bons exemplos são o ATI Catalyst Control Center e o NVIDIA Control Panel.
Amostras, amostras...
Afinal de contas, como funcionam essas tecnologias?
Em suma, o MSAA é uma forma “otimizada” de supersampling, uma das técnicas mais utilizadas de anti-aliasing. Por definição, no MSAA amostras múltiplas — multisampling — são coletadas de várias formas e são misturadas juntas para o surgimento do pixel resultante, segundo os próprios desenvolvedores do OpenGL.
Um exemplo padrão disso é o sistema quincunx, no qual são retiradas quatro amostras nos cantos e uma no meio. No multisampling, cada célula possui duas amostras. A figura abaixo indica que foram tomadas três amostras de células vizinhas. A técnica leva em conta as cores em volta do pixel em questão. E, assim, ocorre uma mistura das cores para que o resultado desejado seja obtido.O multisampling, portanto, ocorre apenas quando uma célula está coberta por mais de uma cor. Caso contrário, uma cor única é escolhida e, obviamente, não precisa ser calculada.
O MSAA funciona da seguinte forma: cada pixel da borda de um polígono é amostrado múltiplas vezes. Para cada passada de amostra, um leve offset é aplicado a todas as coordenadas da tela. Esse offset é menor que o tamanho atual dos pixels. Pela média de todas essas amostras, o resultado é uma transição mais suave das cores nas beiradas.
Respeitando o padrão, o número de amostras retiradas para cada pixel indica o nível de multisampling. Portanto, o modo MS 2x significa que duas amostras são retiradas, enquanto MS 4x quer dizer que quatro amostras são retiradas para cada pixel no limite de um polígono.
A NVIDIA apresentou um modo multisampling com uma linha de quadros 8x00 que, como o número indica, retira oito amostras. É importante reforçar que esse modo é chamado 8xQ, enquanto o que muitos conhecem simplesmente por 8x é, na realidade, um modo Coverage Sample.
As vantagens do uso do MSAA consistem em eficiência — todos os modos MS afetam ligeiramente o desempenho gráfico, mas possuem um efeito impressionante na qualidade de imagem — e disponibilidade (todas as resoluções são suportadas). Ainda assim, o MSAA é encarado como uma das opções mais favoráveis de AA que não diminuem drasticamente o desempenho.
É claro que a técnica também possui desvantagens. Somente as bordas dos polígonos são suavizadas, sendo que as partes “internas” das texturas permanecem inalteradas. Isso é facilmente visível em texturas alpha-test (fendas, falhas pelas quais você enxerga além do objeto).
Essas texturas são comumente usadas em portões, cercas, galhos de árvores e estruturas similares. Por quê? Simplesmente porque esses objetos não são modelados com polígonos para a redução da complexidade do ambiente.
Outro ponto negativo do MSAA é que a técnica não reduz o shimmering de texturas (texturas trêmulas, que parecem “se mover” ou brilhar enquanto o personagem se movimenta na tela), causado por texturas com estruturas bastante detalhadas. Geralmente, os criadores de texturas tentam evitar esses detalhes, mas é claro que certos jogos contam com um nível assustador de shimmering.
Resumidamente...
MS, portanto, é uma técnica de supersampling com pixel-rate shading, “otimizada” para eficiência e desempenho (se compararmos com outros métodos). A MSAA é, na verdade, uma técnica FSAA — Full-Scene Anti-Aliasing — que funciona com todas as formas geométricas básicas de “renderização”.
O MSAA interage bem com outros mecanismos OpenGL, especialmente fragmentos — dados necessários para gerar um único pixel capaz de desenhar uma forma geométrica básica no frame buffer — e operações de frame buffer.
A técnica ainda lida com oclusões corretamente (enquanto o pre-filtering não consegue fazer isso) e pode ser utilizada em conjunção com pre-filter anti-aliasing para a “otimização” da qualidade de pontos e linhas.
De forma geral, o MSAA — com o filtro anisotrópico ativado — é superior ao supersampling porque uma qualidade superior é alcançada com o mesmo desempenho ou, respectivamente, qualidade comparável com um maior desempenho. Isso é verídico somente se a resolução puder ser aumentada. Uma resolução mais elevada possui bordas mais suavizadas e texturas mais detalhadas, obviamente.
O site nHancer (clique aqui e confira) criou um sistema enxuto para mostrar as mudanças entre cenas de um jogo com e sem aplicação de diferentes níveis de anti-aliasing. De fato, o MSAA afeta somente as bordas de linhas e bordas de polígonos.
É claro que o mesmo nível de Multi-Sampling Anti-Aliasing não é uma técnica que simplesmente “iguala” visuais gerados por diferentes placas de vídeo. Abaixo, compare a diferença gráfica entre as versões demonstrativas de Mass Effect 2 para os consoles PlayStation 3 e Xbox 360 (sendo que o game para a plataforma da Microsoft roda com 2xMSAA):
“Alfa para a Cobertura”
O Alpha-to-Coverage é um procedimento multisampling mais usado em situações específicas, como cenários nos quais uma folhagem densa ou um campo de grama conta com vários polígonos sobrepostos. No DirectX 10, por exemplo, o processo funciona mesmo que o multisampling não esteja ativado no Rasterizer State.
O ATC consiste em tomar o componente alfa de um valor RGBA depois que ele tenha sido gerado por um pixel shader e convertê-lo para uma “máscara de cobertura de X passos” (X sendo o número de amostras).
Em seguida, essa máscara — sim, a mask relacionada a operações binárias — de cobertura de X passos é combinada (AND binário) com uma máscara de cobertura multiamostra, e o resultado é usado para determinar quais amostras devem ser atualizadas para todos os alvos de “renderização” atrelados à fusão de saída no momento.
Quando o multisampling é aplicado no ATC, cada fragmento de saída obtém uma transparência de 0 ou 1, dependendo da cobertura alfa e do resultado do multisampling.
O valor alfa original na saída do pixel shader não é modificado quando esse valor alfa é usado para criar a máscara de cobertura de X passos (alpha blending ainda ocorrerá em uma base por amostra). Alpha-to-Coverage multisampling é essencialmente o mesmo que o multisampling normal, com a exceção de que a máscara de cobertura de X passos é gerada e combinada (AND) com a máscara de cobertura multiamostra.
Nenhum comentário:
Postar um comentário