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.

Névoa Volumétrica e Volumes de Névoa (Fog Volumes)

Nota

Neblina volumétrica só é suportada pelo renderizador Forward+, não pelo os renderizadores Mobile, ou Compatibility.

Como descrito em Ambiente e pós-processamento, o Godot suporta vários efeitos visivos, incluindo dois tipos de névoa: névoa tradicional (não volumétrica) e névoa volumétrica. A névoa tradicional afeta toda a cena de uma vez e não pode ser personalizada com um Shaders de neblina (Fog shaders).

A névoa tradicional pode ser usada ao mesmo tempo que a névoa volumétrica, se desejado.

Nesta página, você aprenderá:

  • Como configurar a névoa volumétrica no Godot.

  • O que são volumes de névoa (Fog Volumes) e como eles diferem da névoa volumétrica "global".

Ver também

Você pode ver o funcionamento da neblina volumétrica utilizando o projeto de demonstração Volumetric Fog demo project.

Aqui está uma comparação entre a névoa tradicional (que não interage com a iluminação) e a névoa volumétrica, que é capaz de interagir com a iluminação:

../../_images/volumetric_fog_comparison.png

Propriedades da neblina volumétrica

Depois de ativar a névoa volumétrica no recurso Environment do nó WorldEnvironment, você pode editar as seguintes propriedades:

  • Density: A densidade exponencial base da névoa volumétrica. Defina isso para a densidade mais baixa que você deseja ter globalmente. FogVolumes podem ser usados para adicionar ou subtrair desta densidade em áreas específicas. Um valor de 0.0 desativa a névoa volumétrica global, permitindo que os FogVolumes exibam névoa volumétrica em áreas específicas. A renderização da névoa é exponencial como na vida real.

  • Albedo: A cor da névoa volumétrica ao interagir com as luzes. Névoa e neblina têm um albedo próximo ao branco (Color(1, 1, 1, 1)), enquanto a fumaça tem um albedo mais escuro.

  • Emission: A luz emitida a partir da névoa volumétrica. Mesmo com a emissão, a névoa volumétrica não projetará luz sobre outras superfícies. A emissão é útil para estabelecer uma cor ambiente. Como o efeito de névoa volumétrica usa apenas o espalhamento único (single-scattering), a névoa costuma precisar de um pouco de emissão para suavizar as sombras marcadas.

  • Emission Energy: O brilho da luz emitida a partir da névoa volumétrica.

  • GI Inject: Escala a força da Iluminação Global usada na cor do albedo da névoa volumétrica. Um valor de 0.0 significa que a Iluminação Global não impactará a névoa volumétrica. Isso tem um pequeno custo de desempenho quando definido acima de 0.0.

  • Anisotropy: A direção da luz espalhada à medida que ela passa pela névoa volumétrica. Um valor próximo a 1.0 significa que quase toda a luz é espalhada para frente. Um valor próximo a 0.0 significa que a luz é espalhada igualmente em todas as direções. Um valor próximo a -1.0 significa que a luz é espalhada principalmente para trás. A névoa e a neblina espalham a luz ligeiramente para frente, enquanto a fumaça espalha a luz igualmente em todas as direções.

  • Length: A distância sobre a qual a névoa volumétrica é computada. Aumente para computar a névoa em um alcance maior, diminua para adicionar mais detalhes quando um longo alcance não for necessário. Para uma névoa de melhor qualidade, mantenha este valor o mais baixo possível.

  • Detail Spread: A distribuição do tamanho ao longo do comprimento do buffer de froxel. Um valor mais alto comprime os froxels para mais perto da câmera e coloca mais detalhes perto da câmera.

  • Ambient Inject: Escala a força da luz ambiente usada na névoa volumétrica. Um valor de 0.0 significa que a luz ambiente não impactará a névoa volumétrica. Isso tem um pequeno custo de desempenho quando definido acima de 0.0.

  • Sky Affect: Controla o quanto da névoa volumétrica deve ser desenhada sobre o céu de fundo. Se definido como 0.0, a névoa volumétrica não afetará em nada a renderização do céu (incluindo FogVolumes).

Duas propriedades adicionais são oferecidas na seção Temporal Reprojection:

  • Temporal Reprojection > Enabled: Ativa a reprojeção temporal na névoa volumétrica. A reprojeção temporal mistura a névoa volumétrica do quadro atual com a do quadro anterior para suavizar bordas serrilhadas. O custo de desempenho é mínimo, no entanto, isso faz com que FogVolumes e Light3Ds em movimento criem um efeito de "fantasma" (ghosting) e deixem um rastro atrás deles. Quando a reprojeção temporal estiver ativada, tente evitar mover os FogVolumes ou Light3Ds muito rápido. Efeitos de iluminação dinâmica de curta duração devem ter o Volumetric Fog Energy definido como 0.0 para evitar o ghosting.

  • Temporal Reprojection > Amount: A quantidade pela qual o último quadro é misturado com o quadro atual. Um número maior resulta em uma névoa volumétrica mais suave, mas piora bastante o efeito de "fantasma". Um valor menor reduz o fantasma, mas pode fazer com que a oscilação temporal por quadro (temporal jitter) se torne visível.

Nota

Ao contrário da névoa não volumétrica, a névoa volumétrica possui um alcance finito. Isso significa que a névoa volumétrica não pode cobrir inteiramente um mundo grande, pois ela eventualmente deixará de ser renderizada à distância.

Se você deseja ocultar áreas distantes do jogador, recomenda-se ativar tanto a névoa não volumétrica quanto a névoa volumétrica ao mesmo tempo, e ajustar suas densidades de acordo.

Interação da luz com a névoa volumétrica

Para simular o comportamento de espalhamento da luz na névoa na vida real, todos os tipos de luz interagirão com a névoa volumétrica. O quanto cada luz afetará a névoa volumétrica pode ser ajustado usando a propriedade Volumetric Fog Energy em cada luz. Ativar as sombras em uma luz também tornará essas sombras visíveis na névoa volumétrica.

Se a interação da luz com a névoa não for desejada por motivos artísticos, isso pode ser desativado globalmente definindo Volumetric Fog > Albedo para uma cor preta pura no recurso Environment. A interação da luz com a névoa também pode ser desativada para luzes específicas definindo seu Volumetric Fog Energy para 0. Fazer isso também melhorará ligeiramente o desempenho ao excluir a luz dos cálculos de névoa volumétrica.

Usando a névoa volumétrica como uma solução de iluminação volumétrica

Embora não seja fisicamente preciso, é possível ajustar as configurações da névoa volumétrica para funcionar como uma solução de iluminação volumétrica. Isso significa que as partes não iluminadas do ambiente não serão mais escurecidas pela névoa, mas a luz ainda será capaz de tornar a névoa mais brilhante em áreas específicas.

Isso pode ser feito definindo a densidade da névoa volumétrica para o menor valor permitido maior que zero (0.0001) e, em seguida, aumentando a propriedade Volumetric Fog Energy nas luzes para valores muito mais altos do que o padrão para compensar. Valores entre 200.0 e 5000.0 costumam funcionar bem para isso.

../../_images/volumetric_fog_lighting.png

Equilibrando desempenho e qualidade

Existem algumas configurações de projeto disponíveis para ajustar o desempenho e a qualidade da névoa volumétrica:

  • Rendering > Environment > Volumetric Fog > Volume Size: Tamanho base usado para determinar o tamanho do buffer de froxel nos eixos X e Y da câmera. O tamanho final é dimensionado pela proporção da tela, portanto os valores reais podem diferir do que foi definido. Defina um tamanho maior para uma névoa mais detalhada, defina um tamanho menor para um melhor desempenho.

  • Rendering > Environment > Volumetric Fog > Volume Depth: Número de fatias (slices) a serem usadas ao longo da profundidade do buffer de froxel para a névoa volumétrica. Um número menor será mais eficiente, mas pode resultar em artefatos aparecendo durante o movimento da câmera.

  • Rendering > Environment > Volumetric Fog > Use Filter: Ativa a filtragem do efeito de névoa volumétrica antes da integração. Isso desfoca substancialmente a névoa, o que reduz os detalhes finos, mas também suaviza bordas duras e artefatos de serrilhado. Desative quando for necessário mais detalhes.

Nota

A névoa volumétrica pode fazer com que o banding apareça na viewport, especialmente em níveis de densidade mais altos. Consulte Faixas de cores para orientações sobre como reduzir o banding.

Usando volumes de névoa (Fog Volumes) para névoa volumétrica local

Às vezes, você deseja que a névoa fique restrita a áreas específicas. Por outro lado, você pode querer ter uma névoa volumétrica global, mas a névoa deve ser excluída de certas áreas. Ambas as abordagens podem ser seguidas usando nós FogVolume.

Aqui está um guia de início rápido para usar FogVolumes:

  • Certifique-se de que o Volumetric Fog esteja ativado nas propriedades de Environment. Se a névoa volumétrica global não for desejada, defina sua Density para 0.0.

  • Crie um nó FogVolume.

  • Atribua um novo FogMaterial à propriedade Material do nó FogVolume.

  • No FogMaterial, defina Density com um valor positivo para aumentar a densidade dentro do FogVolume, ou um valor negativo para subtrair a densidade da névoa volumétrica global.

  • Configure a extensão (extents) e a forma (shape) do FogVolume conforme necessário.

Nota

Volumes de névoa finos podem parecer piscar (flicker) quando a câmera se move ou gira. Isso pode ser aliviado aumentando a configuração de projeto Rendering > Environment > Volumetric Fog > Volume Depth (com um custo de desempenho) ou diminuindo Length nas propriedades de névoa volumétrica do Environment (sem custo de desempenho, mas ao custo de um menor alcance da névoa). Alternativamente, o FogVolume pode ser tornado mais espesso e usar uma densidade menor no Material.

Propriedades do FogVolume

  • Extents: O tamanho do FogVolume quando Shape for Ellipsoid, Cone, Cylinder ou Box. Se Shape for Cone ou Cylinder, o cone/cilindro será ajustado para caber dentro das extensões. O redimensionamento não uniforme de formas de cone/cilindro através da propriedade Extents não é suportado, mas você pode redimensionar o nó FogVolume em vez disso.

  • Shape: A forma do FogVolume. Pode ser definido como Ellipsoid, Cone, Cylinder, Box ou World (atua como névoa volumétrica global).

  • Material: O material usado pelo FogVolume. Pode ser um FogMaterial integrado ou um ShaderMaterial personalizado (Shaders de neblina (Fog shaders)).

Depois de escolher New FogMaterial na propriedade Material, você pode ajustar as seguintes propriedades no FogMaterial:

  • Density: A densidade do FogVolume. Objetos mais densos são mais opacos, mas podem sofrer com artefatos de subamostragem que se parecem com listras. Valores negativos podem ser usados para subtrair névoa de outros FogVolumes ou da névoa volumétrica global.

  • Albedo: A cor de espalhamento único (single-scattering) do FogVolume. Internamente, o albedo do membro é convertido em espalhamento único, que é misturado aditivamente com outros FogVolumes e com o Albedo da névoa volumétrica global.

  • Emission: A cor da luz emitida pelo FogVolume. A luz emitida não projetará luz ou sombras em outros objetos, mas pode ser útil para modular a cor do FogVolume independentemente das fontes de luz.

  • Height Falloff: A taxa pela qual a névoa baseada em altura diminui de densidade à medida que a altura aumenta no espaço do mundo. Uma queda alta resultará em uma transição abrupta, enquanto uma queda baixa resultará em uma transição mais suave. Um valor de 0.0 resulta em névoa de densidade uniforme. O limiar de altura é determinado pela altura do FogVolume associado.

  • Edge Fade: A rigidez das bordas do FogVolume. Um valor mais alto resultará em bordas mais suaves, enquanto um valor mais baixo resultará em bordas mais duras.

  • Density Texture: A textura 3D usada para dimensionar a densidade do membro do FogVolume. Isso pode ser usado para variar a densidade da névoa dentro do FogVolume com qualquer tipo de padrão estático. For efeitos animados, considere usar um fog shader personalizado. Você pode importar qualquer imagem como uma textura 3D alterando seu tipo de importação na aba Import.

Utilizando texturas de densidade de ruído 3D

Desde o Godot 4.1, existe um recurso NoiseTexture3D que pode ser usado para gerar ruído 3D proceduralmente. Isso é ideal para texturas de densidade do FogMaterial, o que pode resultar em efeitos de névoa mais detalhados:

Comparação do FogMaterial (sem e com textura de densidade)

Captura de tela tirada com a configuração de projeto Volume Size definida em 192 para tornar os detalhes de alta frequência mais visíveis na névoa.

Para fazer isso, selecione a propriedade Density Texture e escolha New NoiseTexture3D. Edite este NoiseTexture3D clicando nele, depois clique em Noise na parte inferior das propriedades do NoiseTexture3D e escolha New FastNoiseLite. Ajuste a largura, altura e profundidade da textura de ruído de acordo com as dimensões do seu volume de névoa.

Para melhorar o desempenho, recomenda-se usar tamanhos de textura baixos (64×64×64 ou menor), pois detalhes de alta frequência são difíceis de notar em um FogVolume. Se você deseja representar variações de densidade mais detalhadas, precisará aumentar Rendering > Environment > Volumetric Fog > Volume Size nas configurações do projeto, o que possui um custo de desempenho.

Nota

O Color Ramp do NoiseTexture3D afeta as texturas de densidade do FogMaterial, mas como apenas o canal vermelho da textura é amostrado, apenas o canal vermelho do gradiente de cor afetará a densidade resultante.

No entanto, usar um gradiente de cor não tingirá o volume da névoa de acordo com a textura. Você precisará usar um shader personalizado que leia uma Texture3D para conseguir isso.

Shaders personalizados para FogVolume

Esta página cobre apenas as configurações integradas oferecidas pelo FogMaterial. Se você precisar personalizar o comportamento da névoa dentro de um nó FogVolume (como criar névoa animada), a aparência dos nós FogVolume pode ser personalizada usando Shaders de neblina (Fog shaders).

Simulando névoa volumétrica usando quads

Em alguns casos, pode ser melhor usar QuadMeshes configurados de forma especial como uma alternativa à névoa volumétrica:

  • Quads funcionam com qualquer método de renderização, incluindo Mobile e Compatibility.

  • Quads não requerem reprojeção temporal para parecerem suaves, o que os torna adequados para efeitos dinâmicos de movimento rápido, como lasers. Eles também podem representar pequenos detalhes que a névoa volumétrica não consegue fazer de forma eficiente.

  • Quads geralmente têm um custo de desempenho menor do que a névoa volumétrica.

Entretanto, essa abordagem possui algumas desvantagens:

  • O efeito de névoa tem uma queda (falloff) menos realista, especialmente se a câmera entrar na névoa.

  • Problemas de ordenação de transparência podem ocorrer quando os sprites se sobrepõem.

  • O desempenho não será necessariamente melhor do que a névoa volumétrica se houver muitos sprites perto da câmera.

Para criar um sprite de névoa baseado em QuadMesh:

  1. Crie um nó MeshInstance3D com um recurso QuadMesh atribuído à propriedade Mesh. Defina o tamanho desejado.

  2. Crie um novo StandardMaterial3D na propriedade Material da malha.

  3. No StandardMaterial3D, defina Shading > Shading Mode para Unshaded, Billboard > Mode para Enabled, ative Proximity Fade e defina Distance Fade para Pixel Alpha.

  4. Defina o Albedo > Texture para la textura abaixo (clique com o botão direito e escolha Save as…):

    ../../_images/volumetric_fog_quad_mesh_texture.webp
  5. Após definir a textura do albedo, vá para a aba Import, selecione a textura e altere seu modo de compressão para Lossless para melhorar a qualidade.

A cor da névoa é definida usando a propriedade Albedo > Color; sua densidade é definida usando o canal alfa da cor. Para melhores resultados, você terá que ajustar o Proximity Fade > Distance e o Distance Fade > Max Distance dependendo do tamanho do seu QuadMesh.

Opcionalmente, o billboarding pode ser deixado desativado se você posicionar o quad de forma que todos os seus cantos fiquem dentro de uma geometria sólida. Isso pode ser útil para enevoar grandes planos nos quais a câmera não pode entrar, como poços sem fundo.