Usando a global illumination por Voxel

VoxelGI é uma forma de iluminação global totalmente em tempo real, projetada para ser usada em cenas 3D de pequeno a médio porte. O VoxelGI exige bastante da GPU, portanto é mais indicado quando se está desenvolvendo para placas de vídeo dedicadas.

Importante

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

Ver também

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

Comparação visual

VoxelGI desativado.

VoxelGI desativado.

VoxelGI habilitado.

VoxelGI habilitado.

Setting up VoxelGI

  1. Certifique-se de que a geometria estática do seu nível seja importada com a opção Light Baking definida como Static ou Static Lightmaps no painel de importação. Para os nós MeshInstance3D adicionados manualmente, verifique se a propriedade Global Illumination > Mode está definida como Static no inspetor.

  2. Create a VoxelGI node in the Scene tree dock.

  3. Mova o nó VoxelGI para o centro da área que você deseja cobrir, arrastando o gizmo de manipulação na viewport 3D. Em seguida, ajuste as extensões (extents) do VoxelGI arrastando os pontos vermelhos na viewport3D (ou inserindo os valores no inspetor). Certifique-se de que as extensões do VoxelGI não sejam maiores do que o necessário, ou a qualidade será prejudicada.

  4. Selecione o nó VoxelGI e clique em Bake na parte superior da janela de visualização 3D do editor. Isso levará pelo menos alguns segundos para ser concluído (dependendo do número de subdivisões do VoxelGI e da complexidade da cena).

Se pelo menos uma malha contida dentro das extensões do VoxelGI tiver seu modo de iluminação global definido como Static, você deverá ver a iluminação indireta aparecer na cena.

Nota

Para evitar inflar arquivos de cena baseados em texto com grandes quantidades de dados binários, certifique-se de que o recurso VoxelGIData seja sempre salvo em um arquivo binário externo. Esse arquivo deve ser salvo com a extensão .res (recurso binário) em vez de .tres (recurso baseado em texto). Usar um recurso binário externo para o VoxelGIData manterá sua cena baseada em texto pequena, garantindo ao mesmo tempo que ela seja carregada e salva rapidamente.

VoxelGI node properties

As seguintes propriedades podem ser ajustadas no inspetor do nó VoxelGI antes de fazer o baking:

  • Subdiv: Valores mais altos resultam em uma iluminação indireta mais precisa, ao custo de menor desempenho, tempos de bake mais longos e maiores exigências de armazenamento.

  • Extents: Representa o tamanho da caixa na qual a iluminação indireta deve ser processada. As extensões são centralizadas em torno da origem do nó VoxelGI.

As seguintes propriedades podem ser ajustadas no resource VoxelGIData contido dentro de um nó VoxelGI após ele ter sido bakeado:

  • Dynamic Range: O brilho máximo que pode ser representado na iluminação indireta. Valores mais altos permitem representar luz indireta mais intensa, ao custo de menor precisão (o que pode resultar em faixas visíveis). Em caso de dúvida, deixe este valor inalterado.

  • Energy: A energia geral da iluminação indireta. Isso também afeta a energia da iluminação direta emitida por malhas com materiais emissores.

  • Bias: Viés opcional adicionado às consultas no buffer de voxels em tempo de execução. Isso ajuda a evitar artefatos de autooclusão.

  • Normal Bias: Semelhante ao Bias, mas desloca a consulta no buffer de voxels pela normal da superfície. Isso também ajuda a evitar artefatos de autooclusão. Valores mais altos reduzem reflexos próprios visíveis em materiais não ásperos, ao custo de maior vazamento de luz visível e iluminação indireta com aparência mais plana. Para priorizar a ocultação de reflexos próprios em detrimento da qualidade da iluminação, defina Bias como 0.0 e Normal Bias para um valor entre 1.0 e 2.0.

  • Propagation: O fator de energia a ser usado para a iluminação indireta refletida. Valores mais altos resultarão em iluminação mais brilhante e difusa (que pode acabar parecendo muito plana). Quando Use Two Bounces estiver habilitado, você pode querer diminuir Propagation para compensar a iluminação indireta geral mais intensa.

  • Use Two Bounces: Se habilitado, a iluminação será refletida duas vezes em vez de apenas uma. Isso resulta em uma iluminação indireta com aparência mais realista e faz com que a iluminação indireta também seja visível em reflexos. Habilitar isso geralmente não tem custo de desempenho perceptível.

  • Interior: Se habilitado, a iluminação do céu do ambiente não será considerada pelo VoxelGI. Isso deve ser habilitado em cenas internas para evitar vazamento de luz do ambiente.

VoxelGI interaction with lights and objects

Para garantir visuais corretos ao usar o VoxelGI, você deve configurar as propriedades de iluminação global de suas malhas e luzes conforme o propósito delas na cena (estático ou dinâmico).

There are 3 global illumination modes available for meshes:

  • Disabled: The mesh won't be taken into account for VoxelGI baking. The mesh will receive indirect lighting from the scene, but it will not contribute indirect lighting to the scene.

  • Static (padrão): A malha será considerada no bake do VoxelGI. A malha receberá e também contribuirá com iluminação indireta para a cena. Se a malha for alterada de qualquer forma após o bake, o nó VoxelGI deverá ser bakeado novamente. Caso contrário, a iluminação indireta ficará incorreta.

  • Dynamic: A malha não será considerada no bake do VoxelGI, mas ainda assim receberá e contribuirá com iluminação indireta para a cena em tempo real. Essa opção é muito mais lenta em comparação com Static. Use o modo de iluminação global Dynamic apenas em malhas grandes que mudarão significativamente durante a jogabilidade.

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 VoxelGI. Ela não contribuirá com iluminação indireta para a cena.

  • Static: A luz será considerada no bake do VoxelGI. Ela contribuirá com iluminação indireta para a cena. Se a luz for alterada de qualquer forma após o bake, o nó VoxelGI deverá ser bakeado novamente ou a iluminação indireta ficará incorreta. Em caso de dúvida, use este modo para a iluminação do cenário.

  • Dynamic (padrão): A luz não será considerada no bake do VoxelGI, 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 VoxelGI

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

Na seção Rendering > Global Illumination das Configurações do Projeto, a qualidade do VoxelGI também pode ser ajustada de duas maneiras:

  • Voxel Gi > Quality: Se definido como Low em vez de High, a rastreabilidade de cones de voxel usará apenas 4 amostras em vez de 6. Isso acelera a renderização ao custo de uma oclusão ambiental menos pronunciada.

  • Gi > Use Half Resolution: Se habilitado, tanto o VoxelGI quanto o SDFGI terão o buffer de GI renderizado em resolução reduzida pela metade. Por exemplo, ao renderizar em 3840×2160, o buffer de GI será calculado em 1920×1080. Habilitar esta opção economiza bastante tempo de GPU, mas pode introduzir serrilhado visível em detalhes finos.

Observe que a opção Advanced deve estar habilitada na caixa de diálogo de configurações do projeto para que as configurações acima fiquem visíveis.

Além disso, o VoxelGI pode ser desabilitado completamente ocultando o nó VoxelGI. Isso pode ser usado para fins de comparação ou para melhorar o desempenho em sistemas de baixo custo.

Reduzindo vazamentos de luz e artefatos do VoxelGI

Após bakear o VoxelGI, você pode notar que a luz indireta está vazando em alguns pontos da geometria do seu nível. Isso pode ser resolvido de várias maneiras:

  • Para vazamento de luz e artefatos, tente mover ou rotacionar o nó VoxelGI e, em seguida, bakear novamente.

  • Para combater o vazamento de luz em geral, certifique-se de que a geometria do seu nível esteja completamente selada. Isso é melhor feito no software de modelagem 3D usado para projetar o nível, mas nós MeshInstance3D primitivos com seu modo de iluminação global definido como Static também podem ser usados.

  • Para combater o vazamento de luz em geometrias finas, é recomendado tornar a geometria em questão mais espessa. Se isso não for possível, adicione um nó MeshInstance3D primitivo com seu modo de iluminação global definido como Static. Bakeie o VoxelGI novamente e, em seguida, oculte o nó MeshInstance3D primitivo (ele ainda será considerado pelo VoxelGI). Para resultados ideais, o MeshInstance3D deve ter um material cuja cor corresponda à geometria fina original.

  • Para combater artefatos que podem aparecer em superfícies reflexivas, tente aumentar Bias e/ou Normal Bias no recurso VoxelGIData, conforme descrito acima. Não aumente esses valores demais, ou o vazamento de luz se tornará mais evidente.

Se você notar nós VoxelGI aparecendo e desaparecendo enquanto a câmera se move, isso provavelmente ocorre porque o mecanismo está renderizando muitas instâncias de VoxelGI ao mesmo tempo. O Godot é limitado a renderizar 8 nós VoxelGI simultaneamente, o que significa que até 8 instâncias podem estar no campo de visão da câmera antes que algumas delas comecem a piscar.

Além disso, por motivos de desempenho, o Godot só pode mesclar entre 2 nós VoxelGI em um determinado pixel da tela. Se você tiver mais de 2 nós VoxelGI sobrepostos, a iluminação global pode parecer piscar conforme a câmera se move ou gira.