Iluminação global por Campo de Distância com Sinal (SDFGI)

Signed distance field global illumination (SDFGI) is a novel technique available in Godot. It provides semi-real-time global illumination that scales to any world size and works with procedurally generated levels.

O SDFGI oferece suporte a luzes dinâmicas, mas não a oclusores dinâmicos nem a superfícies emissivas dinâmicas. Portanto, o SDFGI oferece uma capacidade de tempo real melhor do que os lightmaps pré-calculados, mas pior do que o VoxelGI.

Do ponto de vista de desempenho, o SDFGI é uma das técnicas de iluminação global mais exigentes do Godot. Assim como no VoxelGI, ainda existem várias configurações disponíveis para ajustar suas exigências de desempenho, ao custo de qualidade.

Importante

SDFGI is only supported when using the Forward+ renderer, not the Mobile or Compatibility renderers.

Ver também

Não tem certeza se o SDFGI é adequado às suas necessidades? Consulte Which global illumination technique should I use? para uma comparação das técnicas de GI disponíveis no Godot 4.

Comparação visual

SDFGI disabled.

SDFGI disabled.

SDFGI ativado.

SDFGI ativado.

Setting up SDFGI

No Godot, o SDFGI é a técnica de iluminação global com o menor número de etapas necessárias para ser habilitada:

  1. Certifique-se de que os nós MeshInstance tenham a propriedade Global Illumination > Mode definida como Static no inspetor.

  • Para cenas 3D importadas, o modo de bake pode ser configurado no painel Import após selecionar o arquivo da cena 3D no painel FileSystem.

  1. Adicione um nó WorldEnvironment e crie um recurso Environment para ele.

  2. Edite o recurso Environment, role para baixo até a seção SDFGI e desdobre-o.

  3. Habilite SDFGI > Enabled. O SDFGI seguirá automaticamente a câmera quando ela se mover, portanto você não precisa configurar as extensões (diferente do VoxelGI).

Environment SDFGI properties

No recurso Environment , há várias propriedades disponíveis para ajustar a aparência e a qualidade do SDFGI:

  • Use Occlusion: Se habilitado, o SDFGI lançará raios adicionais para localizar e reduzir vazamentos de luz. Isso tem um custo de desempenho, então habilite essa propriedade apenas se realmente for necessário.

  • Read Sky Light: Se habilitado, a iluminação do ambiente será representada na iluminação global. Isso deve ser habilitado em cenas externas e desabilitado em cenas totalmente internas.

  • Bounce Feedback: Por padrão, a iluminação indireta só é refletida uma vez ao usar SDFGI. Definir esse valor acima de 0.0 fará com que o SDFGI reflita mais de uma vez, proporcionando uma iluminação indireta mais realista com um pequeno custo de desempenho. Valores sensatos geralmente ficam entre 0.3 e 1.0, dependendo da cena. Note que, em algumas cenas, valores acima de 0.5 podem causar loops de feedback infinitos, fazendo com que a cena fique extremamente brilhante em poucos segundos. Se sua iluminação indireta parecer "manchada", considere aumentar esse valor acima de 0.0 para obter uma iluminação mais uniforme. Se a iluminação ficar muito intensa como resultado, diminua Energy para compensar.

  • Cascades: Valores mais altos resultam em informações de GI mais detalhadas (e/ou maior distância máxima), mas são significativamente mais exigentes para a CPU e a GPU. O custo de desempenho de ter mais cascatas aumenta especialmente quando a câmera se move rapidamente, portanto, considere reduzir este valor para 4 ou menos se sua câmera se mover em alta velocidade.

  • Min Cell Size: O tamanho mínimo de célula do SDFGI a ser usado para a cascata mais próxima e detalhada. Valores mais baixos resultam em iluminação indireta e reflexos mais precisos, ao custo de menor desempenho. Ajustar essa configuração também afeta automaticamente Cascade 0 Distance e Max Distance.

  • Cascade 0 Distance: A distância na qual a cascata mais próxima e detalhada termina. Valores maiores tornam a transição da cascata mais próxima menos perceptível, ao custo de reduzir o nível de detalhe dessa cascata. Ajustar essa configuração também afeta automaticamente Min Cell Size e Max Distance.

  • Max Distance: Controla até que distância o campo de distância com sinal será calculado (para a cascata menos detalhada). O SDFGI não terá efeito além dessa distância. Esse valor deve sempre ser definido abaixo do valor Far da câmera, pois não há benefício em calcular o SDFGI além da distância de visualização. Ajustar essa configuração também afeta automaticamente Min Cell Size e Cascade 0 Distance.

  • Y Scale: Controla o quão espaçadas as sondas do SDFGI são distribuídas verticalmente. Por padrão, a distribuição vertical é igual à horizontal. No entanto, como a maioria das cenas de jogos não possui grande verticalidade, definir o Y Scale para 75% ou até 50% pode proporcionar melhor qualidade e reduzir vazamentos de luz sem impactar o desempenho.

  • Energy: O multiplicador de brilho para iluminação indireta do SDFGI.

  • Normal Bias: O viés normal a ser usado para os raios refletidos das sondas do SDFGI. Diferente de Probe Bias, esse valor é aumentado apenas em relação às normais da malha. Isso torna o ajuste do viés mais sutil e evita aumentá-lo demais sem necessidade. Aumente esse valor se você notar artefatos em faixas na iluminação indireta ou nos reflexos.

  • Probe Bias: O viés a ser usado para os reflexos de raios de sondagem do SDFGI. Aumente este valor se notar artefatos de listras em iluminação indireta ou reflexos.

SDFGI interaction with lights and objects

A quantidade de energia indireta emitida por uma luz é determinada por suas propriedades de cor, energia e energia indireta. Para fazer com que uma luz específica emita mais ou menos energia indireta sem afetar a quantidade de luz direta emitida, ajuste a propriedade Indirect Energy no inspetor do Light3D.

Para garantir visuais corretos ao usar SDFGI, você deve configurar as propriedades de iluminação global de suas malhas e luzes de acordo com sua finalidade na cena (estática ou dinâmica).

There are 3 global illumination modes available for meshes:

  • Desativado: A malha não será considerada na geração do SDFGI. A malha receberá iluminação indireta da cena, mas não contribuirá com iluminação indireta para a cena.

  • Static (padrão): A malha será considerada na geração do SDFGI. Ela receberá e também contribuirá com iluminação indireta para a cena. Se a malha for alterada de qualquer forma após a geração do SDFGI, a câmera deve se afastar do objeto e depois se aproximar novamente para que o SDFGI seja regenerado. Alternativamente, o SDFGI pode ser desativado e reativado. Se nenhuma dessas ações for feita, a iluminação indireta ficará incorreta.

  • Dynamic (não suportado com SDFGI): A malha não será considerada na geração do SDFGI. Ela receberá iluminação indireta da cena, mas não contribuirá com iluminação indireta para a cena. Isso funciona de forma idêntica ao modo de bake **Disabled* ao usar SDFGI.*

Além disso, existem 3 modos de bake disponíveis para luzes (DirectionalLight3D, OmniLight3D e SpotLight3D):

  • Disabled: A luz não será considerada no bake do SDFGI. Ela não contribuirá com iluminação indireta para a cena.

  • Static: A luz será considerada para o baking do SDFGI. A luz contribuirá com iluminação indireta para a cena. Se a luz for alterada de alguma forma após o baking, a iluminação indireta parecerá incorreta até que a câmera se afaste da luz e volte (o que faz com que o SDFGI seja novamente submetido ao baking). Se estiver em dúvida, use este modo para iluminação de nível.

  • Dynamic (padrão): A luz não será considerada no bake do SDFGI, mas ainda assim contribuirá com iluminação indireta para a cena em tempo real. Essa opção é mais lenta em comparação com Static. Use o modo de iluminação global Dynamic apenas em luzes que mudarão significativamente durante a jogabilidade.

Nota

A quantidade de energia indireta emitida por uma luz depende de suas propriedades de cor, energia e energia indireta. Para fazer com que uma luz específica emita mais ou menos energia indireta sem afetar a quantidade de luz direta emitida, ajuste a propriedade Indirect Energy no inspetor do Light3D.

Ver também

Consulte Qual modo de iluminação global devo usar em malhas e luzes? para recomendações gerais de uso.

Ajustando o desempenho e a qualidade do SDFGI

Como o SDFGI é relativamente exigente, ele terá o melhor desempenho em sistemas com GPUs dedicadas recentes. Em GPUs dedicadas mais antigas e gráficos integrados, é necessário ajustar as configurações para obter desempenho razoável.

Na seção Renderização > Iluminação Global das Configurações do Projeto, a qualidade do SDFGI também pode ser ajustada de várias maneiras:

  • Sdfgi > Número de Raios de Sonda: Valores mais altos resultam em melhor qualidade, mas com maior uso da GPU. Se esse valor for definido muito baixo, as superfícies podem apresentar "manchas" visíveis de iluminação indireta devido ao número muito baixo de raios emitidos.

  • Sdfgi > Frames To Converge: Higher values result in better quality, but GI will take more time to fully converge. The effect of this setting is especially noticeable when first loading a scene, or when lights with a bake mode other than Disabled are moving fast. If this value is set too low, this can cause surfaces to have visible "splotches" of indirect lighting on them due to the number of rays thrown being very low. If your scene's lighting doesn't have fast-moving lights that contribute to GI, consider setting this to 30 to improve quality without impacting performance.

  • Sdfgi > Frames To Update Light: Lower values result in moving lights being reflected faster, at the cost of higher GPU usage. If your scene's lighting doesn't have fast-moving lights that contribute to GI, consider setting this to 16 to improve performance.

  • Gi > Use Half Resolution: If enabled, both SDFGI and VoxelGI will have their GI buffer rendering at halved resolution. For instance, when rendering in 3840×2160, the GI buffer will be computed at a 1920×1080 resolution. Enabling this option saves a lot of GPU time, but it can introduce visible aliasing around thin details.

O desempenho de renderização SDFGI também depende do número de cascatas e do tamanho da célula escolhido no recurso Ambiente (ver acima).

Ressalvas do SDFGI

O SDFGI tem algumas desvantagens devido à sua natureza em cascata. Quando a câmera se move, as mudanças em cascata podem ser visíveis na iluminação indireta. Isso pode ser aliviado ajustando o tamanho da cascata, mas também adicionando névoa (que fará deslocamentos de cascata distantes menos perceptíveis).

Além disso, o desempenho sofrerá se a câmera se mover muito rápido. Isso pode ser corrigido de duas maneiras:

  • Garantir que a câmera não se move muito rápido em qualquer situação.

  • Desabilitar temporariamente o SDFGI no recurso Ambiente se a câmera precisar ser movida em alta velocidade, e depois habilitar o SDFGI assim que a velocidade da câmera diminuir.

Quando o SDFGI está habilitado, também levará algum tempo para a iluminação global convergir completamente (25 frames por padrão). Isso pode criar um efeito de transição perceptível enquanto a Iluminação Global (GI) ainda está convergindo. Para esconder isso, você pode usar um nó ColorRect que se estende por toda a viewport e desvanece-o (fade out) ao trocar de cena, usando um nó AnimationPlayer.

O campo de distância assinado (signed distance field) é atualizado apenas quando a câmera entra e sai de uma cascata. Isso significa que, se a geometria for modificada à distância, a aparência da iluminação global estará correta assim que a câmera se aproximar. No entanto, se um objeto próximo com o modo de cálculo (bake mode) definido como Static ou Dynamic for movido (como uma porta), a iluminação global parecerá incorreta até que a câmera se afaste do objeto.

As reflexões nítidas (sharp reflections) do SDFGI são visíveis apenas em materiais opacos. Materiais transparentes usarão apenas reflexões ásperas (rough reflections), mesmo que a rugosidade (roughness) do material seja inferior a 0.2.