O que você está procurando?
Engine & platform

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

KRISTIJONAS JALNIONIS Technical Artist
Sep 27, 2022|18 Min
5 problemas comuns de mapeamento de luz e dicas para ajudá-lo a corrigi-los
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

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.

1. Nenhuma iluminação global assada na cena
Cena da caixa Cornell renderizada sem iluminação global (esquerda) e com iluminação global cozida (direita)

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 GameObjects como contribuidores do GI
Contribua com as configurações de GI no componente Mesh Renderer.

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.
Inspecionar luzes de cena

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

Inspecionar o ativo de configurações de iluminação

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.
Inspecionar shaders e materiais

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:

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.
2. Os objetos estão sem 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.

Cena da caixa de Cornell com uma esfera metálica sem mapeamento de luz e uma estátua: Ambos os objetos ficam pretos quando não há Sondas de Luz ou Sondas de Reflexão presentes (esquerda). A estátua difusa é visível quando iluminada por Sondas de Luz (centro). Tanto a esfera reflexiva quanto a estátua ficam visíveis após a colocação das Sondas de Luz e das Sondas de Reflexão (direita).

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

Coloque sondas de luz

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.

Coloque Sondas de Reflexão

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

Inspecionar configurações do Mesh Renderer

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.

As propriedades Light Probes e Reflection Probes precisam ser definidas como Blend Probes (ou qualquer coisa diferente de Off).
Ajustar valores de cor do material

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.

Verifique a configuração da cena

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.

3. Materiais emissivos não estão renderizando
O plano no teto e a esfera têm materiais emissivos aplicados a eles (esquerda). Bloom é habilitado como um efeito de pós-processamento para dar a impressão de um material brilhante (centro). O plano emissivo e a esfera são marcados como Contribuidores de GI que influenciam a iluminação na cena (direita).

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.

Habilitar Bloom na pilha de pós-processamento

Para criar a impressão de um material brilhante, ative o Bloom na pilha de pós-processamento de sua escolha. Consulte a documentação do RP, URPou HDRP integradopara obter dicas sobre como fazer isso.

Verifique as propriedades do material

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.
Inspetor de materiais no pipeline de renderização integrado: Destacamos as propriedades de emissão em azul.
Inspecionar configurações de iluminação

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

4. Mapas normais planos

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.

Mapas de luz não direcionais com luz assada (esquerda) vs. Mapas de luz direcionais com luz assada (direita): Mapas de luz não direcionais não têm a direcionalidade da luz incidente, o que fornece uma boa representação do relevo ao usar mapas normais.

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

Mudar para o modo direcional
Menu suspenso do modo de direcionalidade na janela de configurações de iluminação.

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

Use luzes mistas

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.

Mapas de luz direcionais iluminados por um holofote Baked (esquerda) vs. Mapas de luz direcionais iluminados por um holofote Mixed (direita): Observe o contraste melhorado nos mapas normais na cena iluminada pela luz mista.

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.

Use sondas de luz

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.

5. Resposta especular ausente
Uma cena simples contendo várias luzes de ponto cozidas antes de um mapa de luz ser assado (esquerda) versus a mesma cena após o cozimento dos mapas de luz (direita): Observe que os destaques especulares desaparecem após o cozimento.

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.

Use luzes mistas

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

Use proxies emissivos

É 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.

Mesma cena, mas com proxies emissivos capturados pela Sonda de Reflexão (esquerda) vs uma perspectiva alternativa mostrando a colocação dos referidos proxies (direita)

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.