Câmera unity em cenários ar
Os efeitos de AR no Unity dependem da câmera. Através do conteúdo abaixo, você entenderá o papel da câmera em cenários AR e como a session controla as propriedades da câmera para garantir uma experiência AR correta.
Antes de começar
- Compreenda os conceitos básicos, componentes e fluxo de trabalho da session através da Introdução à ARSession.
Papel da câmera em cenários ar
A câmera no Unity é usada para mostrar o mundo do jogo aos jogadores, e em cenários AR, seu papel é ainda mais importante. Ela não apenas é responsável pela renderização de conteúdo virtual, mas também precisa se alinhar com o mundo real para garantir que objetos virtuais sejam sobrepostos corretamente na cena real.
Este vídeo mostra um cenário AR simples. O lado esquerdo é a visualização
Scene, o direito é a visualizaçãoGame. O vídeo foi gravado no modoPlaydo editor Unity usando dados de simulação. O conteúdo da visualizaçãoGameé idêntico ao que o usuário vê no mundo real através do celular.Pode-se observar que a câmera representando o usuário (ícone de câmera) se move de acordo com os movimentos do usuário no mundo real. O cone branco captura a trajetória de posição e orientação da câmera ao longo do tempo. Na visualização
Game, a câmera não apenas exibe o conteúdo virtual da visualizaçãoScene, mas também sobrepõe a imagem do mundo real sob o conteúdo virtual. Esta é a forma típica de funcionamento da câmera em cenários AR.
Para garantir que objetos virtuais sejam sobrepostos corretamente na cena real, algumas propriedades da câmera precisam ser ajustadas de acordo com o estado de execução do AR. Essas propriedades incluem:
- O transform da câmera (posição e orientação)
- O campo de visão (FOV), proporção de aspecto (aspect ratio) e matriz de projeção da câmera
- As configurações de descarte (culling) (GL.invertCulling)
Aviso
Durante o desenvolvimento de aplicativos, modificar essas propriedades da câmera da session não é suportado, pois pode causar desalinhamento entre o conteúdo virtual e o mundo real, prejudicando a experiência do usuário. Mesmo que essas propriedades sejam modificadas por algum meio, o sistema AR pode sobrescrever as alterações durante a execução ou causar comportamentos imprevisíveis devido à inconsistência entre dados de renderização e cálculos.
Dependendo do objeto que controla essas propriedades, as câmeras usadas pela session podem ser divididas em dois tipos: câmeras controladas pela session e câmeras não controladas pela session.
Câmeras controladas pela session
Se a câmera da session não pertence a nenhum sistema externo, como headsets ou AR Foundation, a session controla automaticamente as propriedades acima mencionadas para garantir que a câmera esteja corretamente alinhada com o mundo real.
Transform
O transform da câmera (posição e orientação) é ajustado pela session de acordo com o estado de funcionamento do recurso AR. Geralmente, a session atualiza a posição e orientação da câmera com base em dados de rastreamento de movimento e/ou dados de rastreamento de target, garantindo consistência entre o conteúdo visto pelo usuário e o mundo real.
No Unity, o ponto de referência central para todo o rastreamento AR é chamado de centro da session, e as regras que determinam esse centro durante a execução da session são chamadas de modo central. Em diferentes modos centrais, o comportamento do transform da câmera varia:
No modo central Camera, a câmera pode se mover livremente.
O modo Camera raramente é usado por aplicativos.
Em outros modos centrais (como FirstTarget), a câmera não pode se mover livremente.
FirstTarget é o modo adotado pela maioria dos aplicativos AR.
Aviso
O valor de scale do transform da câmera deve sempre permanecer (1, 1, 1). Modificar o scale da câmera pode causar comportamentos imprevisíveis.
Matriz de projeção
A matriz de projeção da câmera é atualizada a cada quadro pela session com base nos parâmetros intrínsecos da câmera física, garantindo que o conteúdo virtual seja sobreposto corretamente na cena real.
Configurações de descarte
As configurações de descarte (culling) da câmera (GL.invertCulling) são ajustadas de acordo com as configurações de espelhamento da session, garantindo a renderização correta do conteúdo virtual na cena real.
Quando a configuração correspondente à câmera usada em HorizontalFlip for World, GL.invertCulling será definido como true. Esta é a configuração padrão para câmeras frontais.
Fluxo de vídeo de fundo AR
Em cenários AR, a câmera geralmente renderiza o fluxo de vídeo da câmera física como fundo para aumentar a imersão do usuário. A session processa automaticamente a captura e renderização do fluxo de vídeo, garantindo seu alinhamento correto com o conteúdo virtual.
Câmeras não controladas pela session
Ao usar headsets e AR Foundation, ou ao implementar IsCameraUnderControl definido como false em FrameSource, a session não controla as propriedades acima mencionadas da câmera, sendo esta responsabilidade de sistemas externos.
Aviso
Embora a session não controle as propriedades da câmera nesses casos, elas serão controladas por sistemas de terceiros (como SDKs de headsets ou AR Foundation). Modificar essas propriedades durante o desenvolvimento de aplicativos ainda não é suportado.
Considerações ao copiar câmeras
Às vezes pode ser necessário copiar parâmetros da câmera da session para outra câmera. Nesses casos, preste atenção especial a dois pontos:
- Momento de obtenção das propriedades: Ao usar câmeras controladas, consulte Obter resultados da execução da session para obtê-las no momento certo; ao usar câmeras não controladas pela session, consulte a documentação do sistema de terceiros para o momento correto.
- Campo de visão (FOV), proporção de aspecto (aspect ratio) e matriz de projeção da câmera: Use Camera.projectionMatrix para obter a matriz de projeção e copiá-la para outra câmera. Camera.fieldOfView e Camera.aspect são matematicamente parte da matriz de projeção, portanto, usá-los isoladamente é insuficiente.
Próximos passos
- Leia Configurações de câmera para entender como configurar a câmera para a melhor experiência AR