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
- Conclua começar rapidamente com o exemplo EasyAR Mega Unity.
- Ser capaz de criar conteúdo alinhado ao mundo real.
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.

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.

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

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.

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
Positioncomo(0, 0, 0). - Defina
Rotationcomo(0, 180, 0). - Defina
Scalecomo(1, 1, 1).
Depois disso, o modelo de oclusão deve coincidir com a parte correspondente do modelo denso do Block.

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.

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.

[Optional] Ajustar a posição da geometry de acordo com o 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.

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.

Após recorte e redução:

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

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.

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.

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.


