Table of Contents

Usar EasyAR Mega no Unity para implementar oclusão

Oclusão (Occlusion) é uma tecnologia-chave para melhorar a imersão da integração entre virtual e real em AR. Este artigo descreve como implementar efeitos de oclusão no Unity por meio do EasyAR Mega.

Antes de começar

Como a oclusão é implementada

  • Modelagem offline: no sistema de coordenadas Block, crie geometry com correspondência 1:1 para entidades do mundo real, como paredes, colunas e grandes equipamentos; ou obtenha um modelo otimizado recortando e reduzindo faces do modelo denso do Block.

  • Alinhamento em runtime: em runtime, alinhe o sistema de coordenadas Block ao espaço real por cloud localization e carregue a geometry correspondente.

  • Substituição de material: atribua materiais especiais de oclusão a essas geometry.

  • Efeito visual: quando a GPU renderiza outros objetos virtuais, os pixels das partes ocluídas são automaticamente descartados porque não passam no depth test, fazendo com que objetos virtuais sigam a lógica de oclusão do espaço físico real.

Usar arquivos de máscara dos resultados de mapeamento

Siga as etapas abaixo para baixar o arquivo de máscara do resultado de mapeamento pela entrada Mask file download no banco de dados de localização em nuvem, usá-lo como modelo branco de oclusão e importá-lo para a cena. O arquivo pode ser usado diretamente ou recortado conforme necessário.

Nota

Este método de download se aplica apenas a resultados de mapping da versão 9.6 ou posterior.

Baixar o arquivo de máscara

Depois de adicionar o Block ao banco de dados de localização em nuvem, clique em Mask file download na coluna Action da linha correspondente.

Entrada de download do arquivo de máscara

Na janela pop-up, selecione standard precision ou low precision conforme necessário e clique no botão Download correspondente para baixar o arquivo de máscara em formato glb.

Baixar arquivo de máscara

[Opcional] Recortar o modelo

O arquivo de máscara cobre todo o Block. Se a cobertura já atender à necessidade de oclusão, use-o diretamente. Se apenas parte da área for necessária, recorte o modelo.

Abra o modelo baixado em um software de criação de conteúdo digital, como Blender.

Antes do recorte

Recorte o modelo, mantenha apenas a parte necessária para oclusão e salve em formato glb. Mantenha posição, rotação e escala inalteradas para que ele se alinhe ao Block após ser importado para Unity.

Depois do recorte

Importar o modelo para Unity

Importe o modelo para Unity e monte-o sob o nó Block correspondente na cena como nó filho.

Nota

Para importar um modelo glb para Unity é necessário o pacote com.unity.cloud.gltfast, versão 6.8 ou posterior. Instale ou atualize pelo Package Manager.

No painel Inspector, modifique o Transform do modelo de oclusão relativo ao nó Block:

  • Defina Position como (0, 0, 0).
  • Defina Rotation como (0, 180, 0).
  • Defina Scale como (1, 1, 1).

Depois disso, o modelo de oclusão deve coincidir com a parte correspondente do modelo denso do Block.

Importar modelo de oclusão

Nota

O arquivo de máscara baixado usa uma definição de sistema de coordenadas diferente da Unity, portanto o componente Y de Rotation precisa ser definido como 180.

Atribuir material de oclusão ao modelo

Altere o material do modelo para um material de oclusão. Você pode usar o SpatialMappingOcclusion integrado da Unity.

Trocar material do modelo de oclusão

Simular com dados EIF ou executar em um dispositivo real

Use a simulação com dados EIF ou um dispositivo real para verificar se os objetos virtuais são ocluídos pelas áreas reais correspondentes.

Usar geometry como oclusão

Siga as etapas abaixo para adicionar na cena uma geometry usada como oclusão e verificar o efeito.

Posicionar occlusion geometry

De acordo com o modelo denso do Mega Block, use built-in geometry ou custom geometry como oclusão e posicione-a no local correto no sistema de coordenadas Block. Place occlusion geometry

[Optional] Ajustar a posição da geometry de acordo com o panorama

Fine-tune occlusion according to the panorama

Atribuir material de oclusão à geometry

Altere o material da geometry para um material de oclusão. Você pode usar o SpatialMappingOcclusion integrado do Unity. Fine-tune occlusion according to the panorama

Simular execução com EIF data ou executar em dispositivo real

Ajuste a colocação do modelo de oclusão de acordo com o efeito de execução.

Usar modelo denso recortado e reduzido como oclusão

Siga as etapas abaixo para recortar e reduzir o modelo denso exportado do Mega Block, obter um modelo branco para oclusão e importá-lo na cena como oclusão.

Exportar em Mega Blocks

Clique no botão Export à direita de Mesh para exportar o modelo denso.

Modificar opções de exportação

Ao exportar, preste atenção em modificar as opções de exportação.

Na figura, 1 é o LOD level. Quanto menor o nível, mais simples o modelo e menor o número de faces. Se precisar da maior precisão, selecione o nível mais alto.

Na figura, 2 é a opção de exportação de textura. Aqui só é necessário o modelo branco como oclusão, sem necessidade de textura.

Recortar e reduzir o modelo

Recorte e reduza o modelo exportado em software de criação de conteúdo digital, como Blender, e salve como glb.

Dica

O exemplo usa o Decimate Modifier do Blender.

Before cropping

Após recorte e redução:

After cropping

Importar o modelo de oclusão para Unity e montá-lo abaixo do nó Block na cena

Import occlusion model

Modificar o Transform do modelo

Modifique o Transform do modelo para que Position e Rotation sejam todos 0.

Neste momento, o modelo branco usado para oclusão deve se encaixar no modelo denso, porque as operações de recorte e redução no software de criação de conteúdo digital não alteraram a definição do sistema de coordenadas Block.

Occlusion model fit

Atribuir material de oclusão ao modelo

Altere o material do modelo para um material de oclusão. Você pode usar o SpatialMappingOcclusion integrado do Unity.

Replace occlusion model material

Simular execução com EIF data ou executar em dispositivo real

Use EIF data para simular a execução ou execute em dispositivo real para ver o efeito.

Expectativa do efeito de oclusão

O efeito de oclusão é influenciado principalmente por:

  • Precisão do localization tracking em si
  • Precisão do posicionamento do modelo
  • Precisão do próprio modelo, se não for uma geometry simples

Durante localization drift, desalinhamento de alguns centímetros é normal.

Modelo de oclusão com faces demais pode afetar facilmente a performance. Recomenda-se usar apenas em áreas necessárias e usar geometry simples como oclusão sempre que possível.

Tópicos relacionados