5 problemas comuns de mapeamento de luz e dicas para ajudá-lo a corrigi-los

Recentemente, desenvolvi um guia para solução de problemas do Progressive Lightmapper para ajudar os desenvolvedores a aproveitar ao máximo o Baked Global Illumination (GI) no Unity Editor. Aqui, descrevo cinco dos problemas mais comuns de mapeamento de luz e suas soluções, apoiados por imagens e links para páginas no Manual do Unity. Para o guia completo, visite os fóruns.

Se certos pré-requisitos não forem atendidos, o Progressive Lightmapper pode não conseguir gerar iluminação na sua cena. Essas condições incluem, mas não estão limitadas a:
- Nenhum objeto marcado como GI Contributors
- Nenhuma luz assada na cena
- Problemas com shaders
Para corrigir isso, recomendo tentar uma das soluções descritas abaixo.

Marque os objetos que você deseja mapear como GI Contributors seguindo estas etapas:
Selecione seu GameObject.
Navegue até o componenteMesh Renderer.
Desdobre o cabeçalho de iluminação .
Marque a caixa de seleção Contribuir para a Iluminação Global .
Isso habilitará o parâmetro Receber Iluminação Global abaixo. Ele contém duas opções:
- Mapas de luz: Destinado a objetos mapeados com luz estática – GameObject receberá e contribuirá com GI para mapas de luz.
- Sondas de luz: Destinado a pequenos adereços e objetos não adequados para mapeamento de luz – o GameObject receberá GI de Light Probes e contribuirá com GI para os mapas de luz ao redor.
Somente luzes mistas e assadas podem contribuir para o IG assado. Selecione as luzes na sua cena e defina o Modo como Misto ou Cozido no componente Luz. Outras propriedades que vale a pena conferir incluem:
- Cor: Cores escuras terão baixa ou nenhuma contribuição de IG. Escolha cores brilhantes para as luzes e use a propriedade Intensidade para aumentá-las ou diminuí-las.
- Intensidade: Quanto maior a intensidade, mais brilhante é a luz. Certifique-se de que suas luzes sejam brilhantes o suficiente para uma contribuição significativa ao IG.
- Multiplicador indireto: Esta propriedade controla a intensidade do salto indireto. Certifique-se de que não esteja definido como zero. Caso contrário, a luz não terá nenhuma contribuição para o IG. Observe que definir esse valor acima de um fará com que a iluminação da sua cena não esteja em conformidade com o padrão de renderização baseada em física (PBR).
- Visite o fórum No Baked Global Illumination na cena
Na janela Iluminação (acessível em Janela > Renderização > Iluminação), certifique-se de que o campo Ativo de configurações de iluminação não esteja em branco. Se não houver nenhum ativo atribuído, clique no botão Novas configurações de iluminação . Isso criará e atribuirá um ativo, desbloqueando as propriedades na janela para edição.
Uma vez concluído, verifique se:
- Você marcou a caixa de seleção Baked Global Illumination , que habilita os cálculos Baked GI. Esta caixa de seleção também exporá a lista suspensa Modo de Iluminação .
- O valor de Max Bounces não está definido como zero. Quanto maior esse valor, mais a luz refletirá no ambiente.
- O controle deslizante Intensidade indireta não está definido como zero. Definir este controle deslizante como zero diminuirá toda a iluminação indireta na cena.
Shaders personalizados podem ser a razão pela qual a computação de GI falhou. Para fins de depuração, use os shaders integrados que vêm com o Unity Editor. São eles:
- Shader padrão: Disponível no Pipeline de renderização integrado
- Shader iluminado: Disponível no Universal Render Pipeline (URP)
- Shader iluminado: Disponível no High Definition Render Pipeline (HDRP)
Se o Unity gerar iluminação após alternar para um dos shaders descritos acima, o problema pode estar nosshaders personalizados. Nesse caso, certifique-se de que os shaders de superfície contenham a palavra-chave do shader LIGHTMAP_ON .
Confira a página do Meta Pass para obter detalhes sobre como personalizar ainda mais a saída do Baked GI usando shaders.
Outras possíveis correções
Se as etapas acima não resolverem o problema, considere tentar estas possíveis soluções:
- Selecione um backend de mapeamento de luz diferente na janela Iluminação. Se a iluminação não funcionar ao usar a GPU progressiva, mas funcionar ao usar a CPU progressiva, isso pode ser resultado de um problema de hardware ou driver.
- Atualize os drivers da GPU. Consulte a página do fabricante da GPU para obter os drivers corretos para seu sistema. (Para máquinas Linux, verifique a seção de configuração do driver Linux neste tópico do fórum).
- Certifique-se de que sua GPU atenda aos requisitos mínimos. Consulte este tópico do fórum.
- Limpe o cache do GI. Para limpá-lo, navegue até Preferências > Cache GI e clique no botão Limpar Cache . Tenha em mente que isso excluirá todos os dados de iluminação presentes na cena, exigindo que você regenere a iluminação.
Certos objetos que parecem apagados ou fora do lugar podem indicar um problema com a configuração da cena, o que geralmente se reproduz quando objetos dinâmicos não têm Sondas de Luz para coletar amostras de iluminação. Além disso, qualquer material metálico brilhante na cena pode parecer preto se não houver Sondas de Reflexão locais presentes.

Para corrigir isso, recomendo tentar uma das soluções descritas abaixo.
Objetos dinâmicos – ou colaboradores de GI que recebem GI de sondas de luz – precisam de sondas de luz para amostrar dados de iluminação indireta. Se nenhuma estiver presente, os objetos retornarão à amostragem da Sonda de Ambiente (ou seja, a Sonda de Luz e Reflexão que está sempre presente na cena).
Para atenuar isso, configure uma rede Light Probe na cena, adicionando mais sondas em áreas de alta importância. Certifique-se de que haja Sondas de Luz suficientes para abranger todos os objetos afetados e gere iluminação novamente para ver o efeito.
Objetos metálicos refletivos ainda podem ser renderizados em preto, mesmo após a colocação de uma rede densa de Sondas de Luz. Para sombrear esses objetos, você precisa colocar uma Sonda de Reflexão que envolva o objeto afetado. Gere a iluminação novamente ou re-cozinhe a sonda no componente Sonda de Reflexão clicando no botão Cozer .
Se você observar áreas pretas nos reflexos, tente aumentar a contagem de rebotes . Isso aumentará o número de reflexos, criando assim reflexos dentro de reflexos. Você pode acessar esta propriedade em Iluminação > Ambiente > Iluminação do ambiente.
Visite o fórum de iluminação Objetos estão faltando
Se a execução das etapas anteriores ainda não resolver o problema, inspecione o componente Mesh Renderer do objeto afetado. Na seção Sondas, certifique-se de que as Sondas de luz e Propriedades de reflexão estejam definidas como algo diferente de Desligado.

Materiais pretos puros absorvem toda a luz direta e indireta. Esse é um comportamento fisicamente correto. Na vida real, nenhum material natural é completamente preto. Por exemplo, um dos materiais naturais mais escuros, o carvão, mede “50, 50, 50” em uma escala de luminosidade RGB.
Ajuste os valores de cor do material para seguir os padrões de sombreamento baseados em física. No Pipeline de renderização integrado, você pode usar o modo de desenho Validar visualização de cena de Albedo para determinar se os valores de Albedo são compatíveis com PBR. Você pode usar o Rendering Debugger no URP e HDRP para fazer o mesmo.
Se você estiver trabalhando com várias cenas, verifique se a cena que contém a iluminação está definida como Cena Ativa. Por padrão, o Unity define a primeira cena carregada como a Cena Ativa, o que pode ter um efeito prejudicial nas compilações do player autônomo.

Existem dois tipos de problemas relacionados à renderização de materiais emissivos:
- Materiais emissivos não aparecem como “brilhantes”, o que indica um problema de pós-processamento.
- Materiais emissivos não estão contribuindo para a Iluminação Global, o que indica um problema com a configuração do objeto ou material.
Para corrigir qualquer um desses problemas, recomendo tentar uma das soluções apresentadas abaixo.
Se você pretende usar objetos emissivos para mapeamento de luz, certifique-se de que:
- Você marcou o GameObject em questão como um Colaborador GI. Devido à natureza autoiluminada dos objetos emissivos, você pode definir a propriedade Receber Iluminação Global como Sondas de Luz. Isso economizará espaço no atlas do lightmap.
- A propriedade Iluminação Global é definida como Assada no Inspetor de Materiais. Esta propriedade está disponível na entrada Emissão . Consulte a documentação do RP, URPouHDRP integradopara obter mais detalhes.

Na janela Iluminação, certifique-se de que a propriedade Intensidade indireta não esteja definida como zero. Definir como zero desabilitará toda a iluminação indireta, incluindo a contribuição cozida de objetos emissivos cozidos.
Visite o fórum Materiais emissivos não renderizados
Ao processar no modo não direcional, o Unity Editor não criará uma textura separada para armazenar informações de direcionalidade. Isso fará com que os objetos pareçam planos depois de assados.
Vale ressaltar que mapas normais de baixa frequência são difíceis de capturar usando texturas de direcionalidade. Essas texturas parecerão planas ao gerar iluminação usando luzes totalmente cozidas.

Para corrigir isso, recomendo tentar uma das soluções descritas abaixo.

Na janela Iluminação, defina a propriedade Modo Direcional como Direcional. Este modo gerará uma textura secundária que armazenará a direção dominante da luz. Mapas normais terão uma boa representação do relevo, mas não terão resposta especular.
Visite o Fórum de mapas normais planos
Luzes mistas fornecem resposta especular e normal em tempo real. O Progressive Lightmapper incorpora iluminação indireta em um mapa de luz. Essa combinação garante a mais alta qualidade de resposta do material ao usar iluminação cozida.

Se o seu projeto permitir, alterne o Modo de luz para Misto no componente Luz. Observe que as luzes mistas têm o mesmo custo de desempenho que as luzes em tempo real. Dependendo do modo de iluminação usado, as luzes mistas projetarão sombras em tempo real, mas não sombras suaves cozidas.
Os GameObjects iluminados por sonda geralmente têm uma resposta de material melhor do que aqueles iluminados por luzes Baked. Se a sua direção de arte permitir, defina a propriedade Receber Iluminação Global como Sondas de Luz no componente Renderizador de Malha. Observe que você também pode usar o Light Probe Proxy Volume (LPPV) para adicionar um gradiente espacial a objetos iluminados pela sonda.

Uma das limitações inerentes das luzes Baked é que elas não fornecem resposta especular em tempo real aos materiais. Isso significa que materiais brilhantes não terão reflexos especulares após gerar iluminação.
Para corrigir isso, recomendo tentar uma das soluções descritas abaixo.
Ao contrário das luzes Baked, as luzes Mixed fornecem resposta especular direta em tempo real aos materiais. Se os realces especulares forem importantes na sua cena, alterne o Modo de luz para Misto no componente Luz.
Visite o fórum de respostas especulares ausentes
É possível imitar a resposta especular de luzes usando objetos emissivos. Para fazer isso, siga estas etapas:
Coloque uma Sonda de Reflexão na sua cena.
Clique com o botão direito do mouse no painel Hierarquia e selecione Objeto 3D > Esfera.
Selecione o objeto recém-criado e defina seu Static Editor Flag como Reflection Probe Static.
No painel Projeto , crie um novo material clicando com o botão direito e selecionando Criar > Material.
Selecione o material recém-criado e ative a caixa de seleção Emissão . Defina a propriedade Iluminação Global como Nenhum.
Arraste e solte o material na esfera para atribuí-lo.
Coloque a esfera na mesma posição da sua luz.
Gerar iluminação.
Depois de seguir os passos acima, você conseguirá ver os objetos emissivos capturados no cubomap da Reflection Probe. Você pode ocultar esses objetos após o cozimento ou configurar uma Máscara de Seleção no componenteCâmera.

Para mais dicas sobre solução de problemas do Progressive Lightmapper, confira o guia completo nos fóruns. Se você quiser discutir este artigo ou compartilhar outras soluções, sinta-se à vontade para entrar em contato comigo lá ou aqui. Por fim, não deixe de acompanhar os novos blogs técnicos de outros desenvolvedores do Unity como parte da série Tech from the Trenches.