Mapeamento espacial no UnrealSpatial Mapping in Unreal

O mapeamento espacial torna possível posicionar objetos em superfícies no mundo físico, mostrando o mundo em todo o HoloLens, o que torna os hologramas mais reais para o usuário.Spatial mapping makes it possible to place objects on surfaces in the physical world by showing the world around the HoloLens, which makes holograms seem more real to the user. O mapeamento espacial também ancora objetos no mundo do usuário, tirando proveito de indicações de profundidade do mundo real. Isso ajuda a convencer o usuário de que esses hologramas estão na verdade no espaço dele; hologramas que flutuam no espaço ou se movem com o usuário não parecem tão reais.Spatial mapping also anchors objects in the user's world by taking advantage of real world depth cues. This helps convince the user that these holograms are actually in their space; holograms floating in space or moving with the user will not feel as real. Sempre que possível, convém que você posicione os itens a fim de obter um maior conforto.You want to place items for comfort whenever possible.

No documento Mapeamento espacial, você pode encontrar mais informações sobre posicionamento, oclusão, renderização e qualidade do mapeamento espacial, além de outras informações.You can find more information on spatial mapping quality, placement, occlusion, rendering, and more, in the Spatial mapping document.

Como habilitar o mapeamento espacialEnabling Spatial Mapping

Para habilitar o mapeamento espacial no HoloLens:To enable spatial mapping on HoloLens:

  • Abra Editar > Configurações do Projeto e role para baixo até a seção Plataformas.Open Edit > Project Settings and scroll down to the Platforms section.
    • Selecione HoloLens e marque Percepção Espacial.Select HoloLens and check Spatial Perception.

Captura de tela das funcionalidades de configurações de projeto do HoloLens com a percepção espacial realçada

Para aceitar o mapeamento espacial e depurar o MRMesh em um jogo do HoloLens:To opt into spatial mapping and debug the MRMesh in a HoloLens game:

  1. Abra o ARSessionConfig e expanda a seção ARSettings > Mapeamento do Mundo.Open the ARSessionConfig and expand the ARSettings > World Mapping section.

  2. Verifique Gerar Dados de Malha de Geometria Rastreada, que diz ao plug-in do HoloLens para iniciar a obtenção assíncrona de dados de mapeamento espacial e exibi-los no Unreal por meio do MRMesh.Check Generate Mesh Data from Tracked Geometry, which tells the HoloLens plugin to start asynchronously getting spatial mapping data and surface it to Unreal through the MRMesh.

  3. Marque Renderizar Dados de Malha em Grade de Linhas para mostrar um contorno de grade de linhas branco de todos os triângulos no MRMesh.Check Render Mesh Data in Wireframe to show a white wireframe outline of every triangle in the MRMesh.

Armazenamento de âncoras espaciais pronto

Mapeamento espacial em runtimeSpatial Mapping at runtime

Você pode modificar os seguintes parâmetros para atualizar o comportamento do runtime de mapeamento espacial:You can modify the following parameters to update the spatial mapping runtime behavior:

  • Abra Editar > Configurações de Projeto, role para baixo até a seção Plataformas e selecione HoloLens > Mapeamento Espacial:Open Edit > Project Settings, scroll down to the Platforms section and select HoloLens > Spatial Mapping:

Configurações do projeto de âncoras espaciais

  • A opção Máximo de Triângulos por Metro Cúbico atualiza a densidade dos triângulos na malha de mapeamento espacial.Max Triangles Per Cubic Meter updates the density of the triangles in the spatial mapping mesh.
  • A opção Tamanho do Volume de Malha Espacial é o tamanho do cubo em volta do jogador para renderizar e atualizar os dados de mapeamento espacial.Spatial Meshing Volume Size is the size of the cube around the player to render and update spatial mapping data.
    • Se for previsto que o ambiente do runtime do aplicativo será grande, esse valor precisará ser grande para corresponder ao espaço do mundo real.If the expected application runtime environment is expected to be large, this value may need to be large to match the real-world space. Por outro lado, se o aplicativo precisar apenas posicionar hologramas nas superfícies imediatamente próximas do usuário, esse campo poderá ser menor.On the other hand, this value can be smaller if the application only needs to place holograms on surfaces immediately around the user. À medida que o usuário se movimenta pelo mundo, o volume de mapeamento espacial se moverá com ele.As the user walks around the world, the spatial mapping volume will move with them.

Como trabalhar com o MRMeshWorking with MRMesh

Primeiro, você precisa iniciar o mapeamento espacial:First, you need to start Spatial Mapping:

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

Depois que o mapeamento espacial é capturado para o espaço, recomendamos desativá-lo.Once spatial mapping has been captured for the space, we recommend toggling spatial mapping off. O mapeamento espacial poderá ser concluído após determinado período ou quando as conversões de raio em cada direção retornarem colisões na MRMesh.The spatial mapping may be completed either after a certain amount of time, or when raycasts in each direction return collisions against the MRMesh.

Para obter acesso ao MRMesh em runtime:To get access to the MRMesh at runtime:

  1. Adicione um componente ARTrackableNotify a um ator do Blueprint.Add an ARTrackableNotify Component to a Blueprint actor.

AR Trackable Notify de âncoras espaciais

  1. Selecione o componente ARTrackableNotify e expanda a seção Eventos no painel Detalhes.Select the ARTrackableNotify component and expand the Events section in the Details panel.
    • Clique no botão + nos eventos que você deseja monitorar.Click the + button on the events you want to monitor.

Eventos de âncoras espaciais

Nesse caso, o evento adicionar geometria rastreada está sendo monitorado, o qual procura malhas válidas do mundo que correspondem aos dados de mapeamento espacial.In this case, the On Add Tracked Geometry event is being monitored, which looks for valid world meshes matching to spatial mapping data. Você pode encontrar a lista completa de eventos na API do componente UARTrackableNotify.You can find the full list of events in the UARTrackableNotify component API.

Você pode alterar o material da malha no Gráfico de Eventos do Blueprint ou no C++.You can change the mesh’s material in the Blueprint Event Graph or in C++. A captura de tela a seguir mostra a rota de Blueprint:The screenshot below shows the Blueprint route:

Exemplo de âncoras espaciais

Mapeamento espacial em C++Spatial Mapping in C++

No arquivo build.cs do jogo, adicione AugmentedReality e MRMesh à lista PublicDependencyModuleNames:In your game's build.cs file, add AugmentedReality and MRMesh to the PublicDependencyModuleNames list:

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

Para acessar a MRMesh, assine os delegados de OnTrackableAdded:To access the MRMesh, subscribe to the OnTrackableAdded delegates:

#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();
    }
}

Observação

Há delegados semelhantes para eventos atualizados e removidos, AddOnTrackableUpdatedDelegate_Handle e AddOnTrackableRemovedDelegate_Handle, respectivamente.There are similar delegates for updated and removed events, AddOnTrackableUpdatedDelegate_Handle and AddOnTrackableRemovedDelegate_Handle respectively.

Você pode encontrar a lista completa de eventos na API de UARTrackedGeometry.You can find the full list of events in the UARTrackedGeometry API.

Veja tambémSee also