Mapeamento Espacial em Unreal

O mapeamento espacial permite-lhe colocar objetos em superfícies físicas no mundo real. Quando o mundo à volta do HoloLens é mapeado, os hologramas parecem mais reais para o utilizador. O mapeamento espacial também ancora objetos no mundo do utilizador ao tirar partido das ajudas de profundidade, ajudando a convencê-los de que estes hologramas estão realmente no seu espaço. Os hologramas a flutuar no espaço ou a mover-se com o utilizador não se sentirão tão reais, pelo que pretende colocar sempre itens para conforto sempre que possível.

Pode encontrar mais informações sobre a qualidade, posicionamento, oclusão, composição e muito mais do mapeamento espacial no documento mapeamento espacial .

O plug-in Microsoft OpenXR deve ser transferido para utilizar o mapeamento espacial, disponível no Unreal Marketplace ou no GitHub.

Ativar o Mapeamento Espacial

Para ativar o mapeamento espacial no HoloLens:

  • Abra Editar > Definições do Projeto e desloque-se para baixo até à secção Plataformas .
    • Selecione HoloLens e verifique a Perceção Espacial.

Captura de ecrã das capacidades de definições do projeto HoloLens com a perceção espacial realçada

Para optar pelo mapeamento espacial e depurar o MRMesh num jogo do HoloLens:

  1. Abra a ARSessionConfig e expanda a secção ARSettings World Mapping (Mapeamento Mundial de ARSettings>).

  2. Selecione Gerar Dados de Malha a partir da Geometria Controlada, que indica ao plug-in do HoloLens para começar a obter dados de mapeamento espacial de forma assíncrona e a utilizá-lo para Unreal através do MRMesh.

  3. Selecione Render Mesh Data in Wireframe (Compor Dados de Malha no Wireframe ) para mostrar um contorno de wireframe branco de cada triângulo no MRMesh.

Arquivo de Âncoras Espaciais Pronto

Mapeamento Espacial no runtime

Pode modificar os seguintes parâmetros para atualizar o comportamento do runtime de mapeamento espacial:

  • Abra Editar > Definições do Projeto, desloque-se para baixo até à secção Plataformas e selecione Mapeamento Espacial do HoloLens>:

Definições de Projeto de Âncoras Espaciais

  • Os Triângulos Máximos Por Metro Cúbico atualizam a densidade dos triângulos na malha de mapeamento espacial.
  • O Tamanho do Volume do Spatial Meshing é o tamanho do cubo à volta do leitor para compor e atualizar dados de mapeamento espacial.
    • Se se espera que o ambiente de runtime da aplicação esperado seja grande, este valor poderá ter de ser grande para corresponder ao espaço do mundo real. O valor pode ser mais pequeno se a aplicação só precisar de colocar hologramas em superfícies imediatamente à volta do utilizador. À medida que o utilizador anda por todo o mundo, o volume de mapeamento espacial move-se com eles.

Trabalhar com MRMesh

Primeiro, tem de iniciar o Mapeamento Espacial:

Esquema da função ToggleARCapture com o tipo de captura de mapeamento espacial realçado

Assim que o mapeamento espacial tiver sido capturado para o espaço, recomendamos que desative o mapeamento espacial. O mapeamento espacial pode ser concluído após um determinado período de tempo ou quando os raycasts em cada direção devolvem colisões contra o MRMesh.

Para obter acesso ao MRMesh no runtime:

  1. Adicione um Componente ARTrackableNotify a um ator de Esquema.

Notificações Controláveis do AR das Âncoras Espaciais

  1. Selecione o componente ARTrackableNotify e expanda a secção Eventos no painel Detalhes .
    • Selecione o + botão nos eventos que pretende monitorizar.

Eventos de Âncoras Espaciais

Neste caso, o evento Ao Adicionar Geometria Monitorizada está a ser monitorizado, que procura malhas mundiais válidas que correspondam aos dados de mapeamento espacial. Pode encontrar a lista completa de eventos na API de componente UARTrackableNotify .

Pode alterar o material da malha no Gráfico de Eventos do Esquema ou em C++. A captura de ecrã abaixo mostra a rota do Esquema:

Exemplo de Âncoras Espaciais

Mapeamento Espacial em C++

No ficheiro build.cs do seu jogo, adicione AugmentedReality e MRMesh à lista PublicDependencyModuleNames:

PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",    
        "EyeTracker",
        "AugmentedReality",
        "MRMesh"
});

Para aceder ao MRMesh, subscreva os delegados OnTrackableAdded :

#include "ARBlueprintLibrary.h"
#include "MRMeshComponent.h"

void AARTrackableMonitor::BeginPlay()
{
    Super::BeginPlay();

    // Subscribe to Tracked Geometry delegates
    UARBlueprintLibrary::AddOnTrackableAddedDelegate_Handle(
        FOnTrackableAddedDelegate::CreateUObject(this, &AARTrackableMonitor::OnTrackableAdded)
    );
}

void AARTrackableMonitor::OnTrackableAdded(UARTrackedGeometry* Added)
{
    // When tracked geometry is received, check that it's from spatial mapping
    if(Added->GetObjectClassification() == EARObjectClassification::World)
    {
        UMRMeshComponent* MRMesh = Added->GetUnderlyingMesh();
    }
}

Nota

Existem delegados semelhantes para eventos atualizados e removidos, AddOnTrackableUpdatedDelegate_Handle e AddOnTrackableRemovedDelegate_Handle respetivamente.

Pode encontrar a lista completa de eventos na API UARTrackedGeometry .

Ver também