Como usar a estimativa de iluminação com modelos de cenário

A API Lighting Estimation analisa indicações de indicações visuais distintas e fornece informações detalhadas sobre a iluminação em uma determinada cena. É possível usar essas informações ao renderizar objetos virtuais para iluminá-los nas mesmas condições da cena em que estão, o que torna esses objetos mais realistas e melhora a experiência imersiva para os usuários.

Pistas e conceitos de iluminação

Humanos, inconscientemente, percebem sutis dicas sobre como os objetos ou seres vivos são iluminados no ambiente deles. Quando um objeto virtual não tem uma sombra ou tem um material brilhante que não reflete o espaço ao redor, os usuários podem sentir que o objeto não se encaixa em uma cena específica, mesmo que não possam explicar o motivo. É por isso que a renderização de objetos de RA para corresponder à iluminação em uma cena é essencial para experiências imersivas e mais realistas.

A estimativa de iluminação faz a maior parte do trabalho para você fornecendo dados detalhados que permitem imitar vários sinais de iluminação ao renderizar objetos virtuais. Essas indicações são shadows, ambiente ambiente, sombreamento, destaques específicos e reflexões.

Podemos descrever esses sinais visuais como:

  • Luz ambiente. A luz ambiente é a luz difusa geral que vem do ambiente, iluminando tudo.

  • Sombras. As sombras geralmente são direcionais e informam aos espectadores de onde as fontes de luz são provenientes.

  • Brilho. O sombreamento é a intensidade da luz em diferentes áreas de uma determinada imagem. Por exemplo, partes diferentes do mesmo objeto podem ter diferentes níveis de sombreamento na mesma cena, dependendo do ângulo em relação ao visualizador e da proximidade de uma fonte de luz.

  • Destaques especulares. Estas são as partes brilhantes das superfícies que refletem diretamente uma fonte de luz. Os destaques de um objeto mudam de acordo com a posição de um espectador em uma cena.

  • Reflexão. A luz sai das superfícies de forma diferente dependendo do tipo de superfície: propriedades especulares (ou seja, altamente refletivas) ou difusas (não refletivas). Por exemplo, uma bola metálica será altamente especular e refletirá o ambiente dela, enquanto outra bola pintada em cinza fosco será difusa. A maioria dos objetos reais tem uma combinação dessas propriedades. Pense em uma bola de boliche recheada ou um cartão de crédito bem usado.

    As superfícies refletivas também coletam cores do ambiente. A cor de um objeto pode ser diretamente afetada pela cor do ambiente. Por exemplo, uma bola branca em um cômodo azul terá um tom azulado.

Como usar os modos de estimativa de iluminação para aumentar o realismo

A API Config.LightEstimationMode tem modos que estimam a iluminação no ambiente com diferentes graus de granularidade e realismo.

  • Modo HDR de ambiente (ENVIRONMENTAL_HDR). Esse modo é uma API que permite estimativas de iluminação realistas para iluminação direcional, sombras, destaques especulares e reflexões.

  • Modo de intensidade do ambiente (AMBIENT_INTENSITY). Esse modo determina a intensidade média de pixels e a cor da iluminação de determinada imagem. Ele é uma configuração aproximada projetada para casos de uso em que a iluminação exata não é essencial, como objetos com iluminação integrada.

  • DISABLED. Desative Config.LightEstimationMode se a iluminação corresponder a um determinado ambiente não for relevante para uma cena ou um objeto.

No modo ENVIRONMENTAL_HDR

O modo ENVIRONMENTAL_HDR usa machine learning para analisar a imagem da câmera de entrada e sintetizar a iluminação ambiental para renderizar um objeto virtual.

Esse modo combina iluminação direcional, harmônicas esféricas esféricas e um cubo em DRDR para fazer com que os objetos virtuais pareçam fazer parte de uma determinada cena:

  • A iluminação direcional analisa a fonte de luz aparente de uma determinada imagem. Esse tipo de iluminação adiciona realces especulares posicionados de maneira razoável e inclina as sombras em uma direção consistente com outros objetos reais visíveis.

  • As harmônicas esféricas esféricas recebem uma representação realista da luz ambiente geral que vem de todas as direções em uma cena. Durante a renderização, essas informações são usadas para adicionar sinais sutis que trazem a definição de objetos virtuais.

  • Um cubo de mapas HDR captura a iluminação ambiental ao redor do objeto virtual. Durante a renderização, este cubo de mapas cria a reflexão do material médio para alto brilho.

A imagem a seguir mostra um exemplo de um objeto virtual em uma cena com ENVIRONMENTAL_HDR ativado.

Configurar o modo ENVIRONMENTAL_HDR para uma cena de formato de cena

Para usar ENVIRONMENTAL_HDR com uma cena Sceneform, estenda a classe ARFragment e modifique a configuração da seguinte maneira:

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
  return config;
}

Para ver um exemplo de como isso funciona, consulte o exemplo do sistema solar. Este exemplo implementa ENVIRONMENTAL_HDR sem usar ARFragment.

No modo AMBIENT_INTENSITY

O modo AMBIENT_INTENSITY determina a intensidade média de pixels e os escalares de correção de cor de uma determinada imagem. Ele é uma configuração aproximada projetada para casos de uso em que a iluminação exata não é essencial, como objetos com iluminação integrada.

  • A intensidade de pixel captura a intensidade média de pixels da iluminação em uma cena, para aplicar a um objeto virtual inteiro.

  • Os escalares de correção de cor detectam o equilíbrio de branco de cada frame específico. Além disso, permitem que você corrija a cor de um objeto virtual para que ele se integre com mais facilidade à cor geral de uma cena.

Configurar o modo AMBIENT_INTENSITY para uma cena de formato de cena

Para usar AMBIENT_INTENSITY com uma cena Sceneform, estenda a classe ARfragment e modifique a configuração da seguinte maneira:

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
  return config;
}