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...
Simulando iluminação global
Por que simular iluminação global?
Godot fornece diversas técnicas de iluminação global (GI), todas com suas vantagens e desvantagens. No entanto, continua a ser possível evitar a utilização de qualquer técnica GI e, em vez disso, utilizar uma abordagem artesanal. Existem algumas razões para usar uma abordagem "artesanal" para iluminação global em vez de VoxelGI, SDFGI ou lightmaps pré-calculados:
Você precisa ter um bom desempenho de renderização, mas não pode se dar ao luxo de passar por um processo de pré-cálculo de lightmaps potencialmente complicado.
Você precisa de uma abordagem de GI que seja totalmente em tempo real e que funcione em níveis gerados proceduralmente.
Você precisa de uma abordagem de GI que seja totalmente em tempo real e que não sofra vazamentos de luz significativos.
As abordagens descritas abaixo cobrem apenas a iluminação difusa indireta, e não a iluminação especular. Para iluminação especular, considere usar ReflectionProbes, que geralmente são baratos o suficiente para serem usados em conjunto com essa abordagem de GI falsa.
Ver também
Não tem certeza se simular a iluminação global com luzes é adequado às suas necessidades? Veja Qual técnica de iluminação global devo usar? para uma comparação das técnicas de GI disponíveis no Godot 4.
Simulando iluminação global com DirectionalLight3D
Embora o céu forneça sua própria iluminação direcional, o nó DirectionalLight3D principal da cena normalmente emite uma grande quantidade de luz. Ao usar uma técnica GI, esta luz seria refletida em superfícies sólidas e retornaria na maioria das superfícies sombreadas ao ar livre.
Podemos simular isso adicionando um segundo nó DirectionalLight3D com as seguintes alterações:
Gire a luz em 180 graus. Isso permite representar a iluminação refletida pelo nó DirectionalLight3D principal.
Defina Sombras como Desligado. Isso reduz a carga de desempenho da luz secundária, ao mesmo tempo que permite que áreas sombreadas recebam alguma iluminação (que é o que queremos aqui).
Defina Energia para 10-40% do valor original. Não existe um valor “perfeito”, então experimente vários valores de energia dependendo da luz e das cores típicas do material.
Defina Especular como
0.0. A iluminação indireta não deve emitir lóbulos especulares visíveis, então precisamos desabilitar totalmente a iluminação especular para a luz secundária.
Nota
Essa abordagem funciona melhor em cenas principalmente externas. Ao entrar em ambientes internos, a luz do DirectionalLight3D secundário ainda estará visível, pois esta luz tem sombras desativadas.
Isso pode ser contornado diminuindo suavemente a energia do DirectionalLight3D secundário ao entrar em uma área interna (e fazendo o oposto ao sair da área interna). Por exemplo, isso pode ser conseguido usando um nó Area3D e AnimationPlayer.
Simulando iluminação global com luz posicional
É possível seguir a mesma abordagem do DirectionalLight3D para luzes posicionais (OmniLight3D e SpotLight3D). No entanto, isso exigirá mais trabalho manual, pois esta operação precisa ser repetida para que cada nó de luz posicional na cena tenha uma boa aparência.
Em um cenário ideal, OmniLight3Ds adicionais devem ser adicionados em todos os locais onde uma quantidade significativa de luz atinge uma superfície suficientemente brilhante. No entanto, devido a restrições de tempo, isto nem sempre é facilmente viável (especialmente quando se realiza geração procedural de níveis).
Se estiver com pressa, você pode colocar um nó OmniLight3D secundário na mesma posição que o nó OmniLight3D principal. Você pode adicionar este nó como filho do nó OmniLight3D principal para facilitar a movimentação e ocultação de ambos os nós ao mesmo tempo.
No nó OmniLight3D secundário, execute as seguintes alterações:
Aumente o Alcance da luz em 25-50%. Isto permite que a luz secundária ilumine o que anteriormente não estava iluminado pela luz original.
Defina Sombras como Desligado. Isso reduz a carga de desempenho da luz secundária, ao mesmo tempo que permite que áreas sombreadas recebam alguma iluminação (que é o que queremos aqui).
Defina Energia para 10-40% do valor original. Não existe um valor “perfeito”, então experimente vários valores de energia dependendo da luz e do ambiente.
Defina Especular como 0. A iluminação indireta não deve emitir lóbulos especulares visíveis, portanto, precisamos desabilitar totalmente a iluminação especular para a luz secundária.
Para SpotLight3D, o mesmo truque pode ser usado. Neste caso, o OmniLight3D secundário deve ser colocado de uma forma que reflita onde a maioria luz será refletida. Geralmente fica próximo ao local de impacto principal do SpotLight3D.
No exemplo abaixo, um nó SpotLight3D é usado para iluminar o chão da sala. Porém, como não há iluminação indireta, o resto da sala permanece totalmente escuro. Na vida real, as paredes e o teto da sala seriam iluminados pela luz refletida. Utilizar um nó OmniLight3D posicionado entre a origem do SpotLight3D e o piso permite simular este efeito: