Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Antisserrilhamento 3D
Ver também
O Godot também suporta anti-aliasing na renderização 2D. Isso é abordado na página Antialiasing 2D.
Introdução
Devido à sua resolução limitada, cenas renderizadas em 3D podem exibir artefatos de serrilhado (aliasing). Esses artefatos comumente se manifestam como um efeito de "escada" nas bordas das superfícies (serrilhado de borda) e como piscadas (flickering) e/ou faíscas em superfícies reflexivas (serrilhado especular).
No exemplo abaixo, você pode notar como as bordas têm uma aparência pixelada. A vegetação também está piscando para dentro e para fora, e linhas finas no topo da caixa quase desapareceram:
A imagem é dimensionada em 2× com filtragem de vizinho mais próximo (nearest-neighbor) para tornar o aliasing mais perceptível.
Para combater isso, várias técnicas de anti-aliasing podem ser usadas no Godot. Elas estão detalhadas abaixo.
Ver também
Você pode comparar algoritmos de antisserrilhamento em funcionamento utilizando o projeto de demonstração 3D Antialiasing demo project.
Antisserrilhamento de várias amostras (MSAA)
Isso está disponível em todos os renderizadores.
Esta técnica é a forma "histórica" de lidar com o serrilhado. O MSAA é muito eficaz em bordas de geometria (especialmente em níveis mais altos). O MSAA não introduz nenhum tipo de desfoque.
O MSAA está disponível em 3 níveis: 2×, 4×, 8×. Níveis mais altos são mais eficazes no anti-aliasing de bordas, mas são significativamente mais exigentes. Em jogos com visuais modernos, manter o MSAA em 2× ou 4× é altamente recomendado, pois o MSAA de 8× geralmente é exigente demais.
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 fragment shaders ainda são executados para cada pixel apenas uma vez. Portanto, o MSAA não reduz o serrilhado de transparência para materiais que usam o modo de transparência Alpha Scissor (transparência de 1 bit). O MSAA também é ineficaz contra o serrilhado especular.
Para mitigar o serrilhado em materiais com alpha scissor, o anti-aliasing alfa (também chamado de alpha to coverage) pode ser ativado em materiais específicos nas propriedades do StandardMaterial3D ou ORMMaterial3D. O alpha to coverage tem um custo de desempenho moderado, mas é eficaz na redução do serrilhado em materiais transparentes sem introduzir qualquer desfoque.
Para tornar o serrilhado especular menos perceptível, use o Limitador de rugosidade em espaço de tela (Screen-space roughness limiter), que vem ativado por padrão.
O MSAA pode ser ativado nas Configurações do Projeto alterando o valor da configuração Rendering > Anti Aliasing > Quality > MSAA 3D. É importante alterar o valor da configuração MSAA 3D e não do MSAA 2D, pois essas são configurações totalmente separadas.
Comparação entre nenhum anti-aliasing (esquerda) e vários níveis de MSAA (direita). Note que o anti-aliasing alfa não está sendo usado aqui:
Antialiasing temporal (TAA)
Isso está disponível apenas no renderizador Forward+, não nos renderizadores Mobile ou Compatibility.
O antialiasing temporal funciona convergindo o resultado de quadros renderizados anteriormente em um único quadro de alta qualidade. Este é um processo contínuo que funciona tremendo (jittering) a posição de todos os vértices na cena a cada quadro. Essa trepidação é feita para capturar detalhes de sub-pixel e deve ser imperceptível, exceto em situações extremas.
Esta técnica é comumente usada em jogos modernos, pois fornece a forma mais eficaz de anti-aliasing contra serrilhado especular e outros artefatos induzidos por shaders. O TAA também oferece suporte completo para anti-aliasing de transparência.
O TAA introduz uma pequena quantidade de desfoque quando ativado em cenas estáticas, mas esse efeito de desfoque torna-se mais pronunciado quando a câmera está se movendo. Outra desvantagem do TAA é que ele pode exibir artefatos de ghosting atrás de objetos em movimento. Renderizar em uma taxa de quadros mais alta permitirá que o TAA converta mais rapidamente, tornando esses artefatos de ghosting menos visíveis.
O anti-aliasing temporal pode ser ativado nas Configurações do Projeto alterando o valor da configuração Rendering > Anti Aliasing > Quality > TAA.
Comparação entre nenhum anti-aliasing (esquerda) e TAA (direita):
AMD FidelityFX Super Resolution 2.2 (FSR2)
Isso está disponível apenas no renderizador Forward+, não nos renderizadores Mobile ou Compatibility.
Desde o Godot 4.2, há suporte integrado para o AMD FidelityFX Super Resolution 2.2. Este é um método de redimensionamento de resolução compatível com todas as GPUs recentes de qualquer fabricante. O FSR2 normalmente é projetado para melhorar o desempenho reduzindo a resolução interna de renderização 3D e, em seguida, fazendo o redimensionamento para a resolução de saída.
No entanto, ao contrário do FSR1, o FSR2 também fornece anti-aliasing temporal. Isso significa que o FSR2 pode ser usado na resolução nativa para um anti-aliasing de alta qualidade, com a resolução de entrada sendo igual à resolução de saída. Nesta situação, ativar o FSR2 na verdade diminuirá o desempenho, mas melhorará significativamente a qualidade da renderização.
Usar o FSR2 na resolução nativa é mais exigente do que usar o TAA na resolução nativa, portanto, seu uso só é recomendado se você tiver uma folga significativa de GPU. Pelo lado positivo, o FSR2 oferece uma melhor cobertura de anti-aliasing com menos desfoque em comparação ao TAA, especialmente em movimento.
Comparação entre nenhum anti-aliasing (esquerda) e FSR2 na resolução nativa (direita):
Nota
Por padrão, a configuração de projeto FSR Sharpness é definida como 0.2 (valores mais altos resultam em menos nitidez). Para fins de comparação, a nitidez do FSR foi desativada definindo-a como 2.0 na captura de tela acima.
Antialiasing aproximado rápido (FXAA)
Isso está disponível apenas nos renderizadores Forward+ e Mobile, não no renderizador Compatibility.
O antialiasing aproximado rápido é uma solução de antialiasing de pós-processamento. Ele é mais rápido de executar do que qualquer outra técnica de antialiasing e também suporta antialiasing em transparências. No entanto, como carece de informações temporais, não fará muito contra o serrilhado especular (specular aliasing).
Esta técnica ainda é usada às vezes em jogos para celular. No entanto, em plataformas desktop, o FXAA geralmente caiu em desuso em favor do anti-aliasing temporal, que é muito mais eficaz contra o serrilhado especular. Apesar disso, disponibilizar o FXAA como uma opção no jogo ainda pode valer a pena para jogadores com GPUs de baixo custo.
O FXAA introduz uma quantidade moderada de desfoque quando ativado (mais do que o TAA quando estático, mas menos do que o TAA quando a câmera está se movendo).
O FXAA pode ser ativado nas Configurações do Projeto alterando o valor da configuração Rendering > Anti Aliasing > Quality > Screen Space AA para FXAA.
Comparação entre nenhum anti-aliasing (esquerda) e FXAA (direita):
Antialiasing morfológico de sub-pixel (SMAA 1x)
Isso está disponível apenas nos renderizadores Forward+ e Mobile, não no renderizador Compatibility.
O anti-aliasing morfológico de sub-pixel (SMAA) é uma solução de anti-aliasing pós-processamento. Ele roda um pouco mais lento que o FXAA, mas produz menos desfoque. Isso é muito útil quando a resolução da tela é 1080p ou inferior. Assim como o FXAA, o SMAA 1x carece de informações temporais e, portanto, não fará muito contra o serrilhado especular.
Use o SMAA 1x se você não puder arcar com o custo do MSAA, mas achar o FXAA muito borrado.
Combine-o com o TAA, ou até mesmo com o FSR2, para maximizar o anti-aliasing a um custo de GPU mais alto e com um pouco mais de desfoque. Isso é mais benéfico em cenas de movimento rápido ou logo após um corte de câmera, especialmente em taxas de FPS mais baixas.
O SMAA 1x pode ser habilitado nas Configurações do Projeto alterando o valor da configuração Rendering > Anti Aliasing > Quality > Screen Space AA para SMAA.
Comparação entre sem antisserrilhamento (esquerda) e SMAA 1x (direita):
Antialiasing por superamostragem (SSAA)
Isso está disponível em todos os renderizadores.
A superamostragem (SSAA) fornece a maior qualidade de anti-aliasing possível, mas também é a mais cara. Funciona sombreando cada pixel da cena várias vezes. Isso permite que o SSAA faça o anti-aliasing de bordas, transparências e do serrilhado especular ao mesmo tempo, sem introduzir possíveis artefatos de fantasma.
A desvantagem do SSAA é o seu custo extremamente alto. Esse custo geralmente torna o SSAA difícil de usar para fins de jogo, mas você ainda pode achar a superamostragem útil para renderização offline.
O anti-aliasing por superamostragem é realizado aumentando a configuração avançada de projeto Rendering > Scaling 3D > Scale acima de 1.0, enquanto garante que Rendering > Scaling 3D > Mode esteja definido como Bilinear (o padrão). Como o fator de escala é definido por eixo, um fator de escala de 1.5 resultará em SSAO de 2.25×, enquanto um fator de escala de 2.0 resultará em SSAA de 4×. Como o Godot usa a filtragem bilinear do próprio hardware para realizar a subamostragem (downsampling), o resultado parecerá mais nítido em fatores de escala inteiros (ou seja, 2.0).
Comparação entre nenhum anti-aliasing (esquerda) e vários níveis de SSAA (direita):
Aviso
A superamostragem também possui requisitos altos de memória de vídeo (VRAM), pois precisa renderizar na resolução alvo e depois reduzir a escala para o tamanho da janela. Por exemplo, exibir um projeto em 3840×2160 (resolução 4K) com SSAA de 4× exigirá a renderização da cena em 7680×4320 (resolução 8K), o que representa 4 vezes mais pixels.
Se você estiver usando um tamanho de janela alto, como 4K, poderá descobrir que aumentar a escala de resolução além de um certo valor causará uma forte lentidão (ou até mesmo um travamento) devido à falta de VRAM.
Limitador de rugosidade em espaço de tela
Isso está disponível apenas nos renderizadores Forward+ e Mobile, não no renderizador Compatibility.
Este não é um método de anti-aliasing de borda, mas é uma maneira de reduzir o serrilhado especular em 3D.
O limitador de rugosidade em espaço de tela funciona melhor em geometrias detalhadas. Embora ele tenha um efeito na própria renderização do mapa de rugosidade, seu impacto ali é limitado.
O limitador de rugosidade em espaço de tela vem ativado por padrão; ele não requer nenhuma configuração manual. Ele possui um pequeno impacto no desempenho, então considere desativá-lo se o seu projeto não for muito afetado pelo serrilhado especular. Você pode desativá-lo com a configuração de projeto Rendering > Quality > Screen Space Filters > Screen Space Roughness Limiter.
Limitador de rugosidade da textura na importação
Assim como o limitador de rugosidade em espaço de tela, este não é um método de anti-aliasing de borda, mas é uma maneira de reduzir o serrilhado especular em 3D.
A limitação de rugosidade na importação funciona especificando um mapa de normais (normal map) para usar como guia para limitar a rugosidade. Isso é feito selecionando o mapa de rugosidade na aba FileSystem, indo até a aba Import e definindo Roughness > Mode para o canal de cor no qual o mapa de rugosidade está armazenado (tipicamente Green), e depois definindo o caminho para o mapa de normais do material. Lembre-se de clicar em Reimport na parte inferior da aba Import após definir o caminho para o mapa de normais.
Como esse processamento ocorre puramente na importação, ele não tem custo de desempenho algum. No entanto, seu impacto visual é limitado. Limitar a rugosidade na importação apenas ajuda a reduzir o serrilhado especular dentro das texturas, não o serrilhado que ocorre nas bordas da geometria em malhas detalhadas.
Qual técnica de antisserrilhamento devo utilizar?
Não existe uma técnica de anti-aliasing "tamanho único" (one size fits all). Como o anti-aliasing costuma ser exigente na GPU ou pode introduzir desfoques indesejados, você vai querer adicionar uma configuração para permitir que os jogadores desativem o anti-aliasing.
Para projetos com uma direção de arte fotorrealista, o TAA geralmente é a opção mais adequada. Embora o TAA possa introduzir artefatos de fantasma, não há outra técnica que combata o serrilhado especular tão bem quanto o TAA. O limitador de rugosidade em espaço de tela ajuda um pouco, mas é muito menos eficaz contra o serrilhado especular no geral. Se você tiver poder de GPU de sobra, poderá usar o FSR2 na resolução nativa para uma forma de anti-aliasing temporal com melhor visual em comparação ao TAA padrão.
Para projetos com uma quantidade baixa de superfícies reflexivas (como um estilo de arte em desenho animado/cartoon), o MSAA pode funcionar bem. O MSAA também é uma boa opção se evitar desfoques e artefatos temporais for importante, como em jogos competitivos.
Ao visar plataformas de baixo custo, como dispositivos móveis ou gráficos integrados, o FXAA costuma ser a única opção viável. O MSAA de 2× pode ser utilizável em algumas circunstâncias, mas níveis mais altos de MSAA dificilmente rodarão de forma suave em GPUs móveis.
O Godot permite o uso de múltiplas técnicas de anti-aliasing ao mesmo tempo. Isso geralmente é desnecessário, mas pode fornecer melhores visuais em GPUs de ponta ou para renderização em tempo não real. Por exemplo, para fazer com que as bordas em movimento pareçam melhores quando o TAA está ativado, você também pode ativar o MSAA ao mesmo tempo.
Comparação de antisserrilhamento
Recurso |
MSAA |
TAA |
FSR2 |
FXAA |
SMAA 1x |
SSAA |
SSRL |
|---|---|---|---|---|---|---|---|
Antisserrilhamento de bordas |
🟢 Sim |
🟢 Sim |
🟢 Sim |
🟢 Sim |
🟢 Sim |
🟢 Sim |
🔴 Não |
Antisserrilhamento especular |
🟡 Algum |
🟢 Sim |
🟢 Sim |
🟡 Algum |
🟡 Algum |
🟢 Sim |
🟢 Sim |
Antisserrilhamento de transparência |
🟡 Algum [1] |
🟢 Sim [2] |
🟢 Sim [2] |
🟢 Sim |
🟢 Sim |
🟢 Sim |
🔴 Não |
Desfoque adicionado |
🟢 Nenhum |
🟡 Algum |
🟡 Algum |
🟡 Algum |
🟢 Baixo |
🟡 Algum [3] |
🟢 Nenhum |
Artefatos de ghosting |
🟢 Nenhum |
🔴 Sim |
🔴 Sim |
🟢 Nenhum |
🟢 Nenhum |
🟢 Nenhum |
🟢 Nenhum |
Custo de desempenho |
🟡 Médio |
🟡 Médio |
🔴 Alto |
🟢 Muito Baixo |
🟢 Baixo |
🔴 Muito Alto |
🟢 Baixo |
Forward+ |
✔️ Sim |
✔️ Sim |
✔️ Sim |
✔️ Sim |
✔️ Sim |
✔️ Sim |
✔️ Sim |
Mobile |
✔️ Sim |
❌ Não |
❌ Não |
✔️ Sim |
✔️ Sim |
✔️ Sim |
✔️ Sim |
Compatibilidade |
✔️ Sim |
❌ Não |
❌ Não |
❌ Não |
❌ Não |
✔️ Sim |
❌ Não |