2D antialiasing

Ver também

Godot também oferece suporte a antialiasing na renderização 3D. Isso é abordado na página 3D antialiasing.

Introdução

Devido à sua resolução limitada, cenas renderizadas em 2D podem exibir artefatos de aliasing. Esses artefatos geralmente se manifestam como um efeito de "escada" nas bordas da geometria, sendo mais perceptíveis ao usar nós como Line2D, Polygon2D ou TextureProgressBar. Desenho personalizado em 2D também pode apresentar artefatos de aliasing em métodos que não oferecem suporte a antialiasing.

No exemplo abaixo, você pode notar como as bordas têm uma aparência quadrada:

A imagem é dimensionada em 2× com filtragem de vizinho mais próximo (nearest-neighbor) para tornar o aliasing mais perceptível.

A imagem é dimensionada em 2× com filtragem de vizinho mais próximo (nearest-neighbor) para tornar o aliasing mais perceptível.

Para combater isso, o Godot oferece suporte a vários métodos de ativação do antialiasing na renderização 2D.

Propriedade antialiasing em Line2D e desenho personalizado

Este é o método recomendado, ao ter menor impacto no desempenho na maioria dos casos.

Line2D possui uma propriedade Antialiased que você pode habilitar no inspetor. Além disso, vários métodos para Desenho personalizado em 2D suportam um parâmetro opcional antialiased, que pode ser definido como true ao chamar a função.

Esses métodos não requerem que o MSAA esteja ativado, tornando seu custo de desempenho base baixo. Em outras palavras, não há custo adicional permanente se nenhuma geometria com antialiasing estiver sendo desenhada em determinado momento.

A desvantagem desses métodos de antialiasing é que eles funcionam gerando geometria adicional. Se você estiver gerando geometria 2D complexa que é atualizada a cada quadro, isso pode ser um gargalo. Além disso, Polygon2D, TextureProgressBar e vários métodos de desenho personalizados não possuem uma propriedade de antialiasing. Para esses nós, você pode usar o antialiasing multiamostragem 2D.

Multisample antialiasing (MSAA)

This is only available in the Forward+ and Mobile renderers, not the Compatibility renderer.

Antes de habilitar o MSAA em 2D, é importante entender sobre o que o MSAA irá atuar. O MSAA em 2D segue restrições semelhantes às do 3D. Embora não introduza nenhum desfoque, seu escopo de aplicação é limitado. As principais aplicações do MSAA em 2D são:

  • Arestas geométricas, como desenho de linhas e polígonos.

  • Bordas de sprite apenas para pixels que tocam uma das bordas da textura. Isso funciona tanto para filtragem linear quanto para filtragem de vizinho mais próximo (nearest-neighbor). Bordas de sprite criadas usando transparência na imagem não são afetadas pelo MSAA.

A desvantagem do MSAA é que ele opera apenas nas bordas. Isso ocorre porque o MSAA aumenta o número de amostras de cobertura, mas não o número de amostras de cor. No entanto, como o número de amostras de cor não aumentou, os shaders de fragmento ainda são executados para cada pixel apenas uma vez. Como resultado, o MSAA não afetará os seguintes tipos de aliasing de forma alguma:

  • Aliasing dentro de texturas filtradas de vizinhos mais próximos (pixel art).

  • Aliasing causado por shaders 2D personalizados.

  • Aliasing especular ao usar Light2D.

  • Aliasing na renderização de fontes.

O MSAA pode ser habilitado nas Configurações do Projeto alterando o valor da configuração Rendering > Anti Serrilhamento > Qualidade > MSAA 2D. É importante alterar o valor da configuração MSAA 2D e não MSAA 3D, pois essas são configurações completamente separadas.

Comparação entre sem antialiasing (esquerda) e vários níveis de MSAA (direita). O canto superior esquerdo contém um nó Line2D, o canto superior direito contém 2 nós TextureProgressBar. A parte inferior contém 8 sprites em pixel art, com 4 deles tocando as bordas (fundo verde) e 4 deles não tocando as bordas (logo do Godot):

../../_images/antialiasing_msaa_2x.webp ../../_images/antialiasing_msaa_4x.webp ../../_images/antialiasing_msaa_8x.webp