Mapeo espacial en Unreal

La asignación espacial permite colocar objetos en superficies físicas del mundo real. Cuando se asigna el mundo de HoloLens, los hologramas parecen más reales al usuario. La asignación espacial también delimita objetos en el mundo del usuario mediante el uso de indicadores de profundidad, lo que ayuda a convencerles de que estos hologramas están realmente en su espacio. Los hologramas que flotan en el espacio o se mueven con el usuario no se sienten como si fuesen reales, por lo que siempre que sea posible puede colocar elementos para su comodidad.

Puede encontrar más información sobre la calidad del mapeo espacial, la ubicación, la oclusión, la representación, etc., en el documento Asignación espacial.

Para usar la asignación espacial, hay que descargar el complemento de Microsoft OpenXR (disponible en Unreal Marketplace o GitHub).

Habilitación del mapeo espacial

Para habilitar el mapeo espacial en HoloLens:

  • Abra Editar Configuración del proyecto y desplácese hacia abajo hasta la sección Plataformas.
    • Seleccione HoloLens y marque Percepción espacial.

Captura de pantalla de las funcionalidades de configuración del proyecto de HoloLens con la percepción espacial resaltada

Para participar en el mapeo espacial y depurar MRMesh en un juego HoloLens:

  1. Abra ARSessionConfig y expanda la sección ARSettings World Mapping (Mapeo del mundo).

  2. Active Generate Mesh Data from Tracked Geometry (Generar datos de malla a partir de la geometría de seguimiento), que indica al complemento de HoloLens que empiece a obtener los datos de mapeo espacial de forma asincrónica y los exponga en Unreal a través de MRMesh.

  3. Marque Render Mesh Data in Wireframe (Representar datos de malla en contorno reticular) para mostrar un contorno reticular blanco de cada triángulo de MRMesh.

Almacén de anclajes espaciales listo

Mapeo espacial en tiempo de ejecución

Puede modificar los parámetros siguientes para actualizar el comportamiento en tiempo de ejecución del mapeo espacial:

  • Abra Editar > Configuración del proyecto, desplácese hacia abajo hasta la sección Plataformas y seleccione HoloLens > Mapeo espacial:

Configuración del proyecto de anclajes espaciales

  • Max Triangles Per Cubic Meter (Máximo de triángulos por metro cúbico) actualice la densidad de los triángulos en la malla de mapeo espacial.
  • Spatial Meshing Volume Size (Tamaño del volumen de la malla espacial) es el tamaño del cubo alrededor del jugador para representar y actualizar los datos de mapeo espacial.
    • Si se espera que el entorno en tiempo de ejecución de la aplicación sea elevado, es posible que este valor tenga que ser grande para que coincida con el espacio del mundo real. El valor puede ser menor si la aplicación solo necesita colocar hologramas en superficies inmediatamente alrededor del usuario. A medida que el usuario se desplaza por el mundo, el volumen de mapeo espacial se moverá con él.

Utilización de MRMesh

En primer lugar, debe iniciar la asignación espacial:

Plano técnico de la función ToggleARCapture con el tipo de captura de asignación espacial resaltado

Una vez que se haya capturado la asignación espacial para el espacio, se recomienda desactivar la asignación espacial. La asignación espacial se puede completar una vez transcurrido un período de tiempo determinado, o cuando los rayos enviados en cada dirección devuelvan colisiones con MRMesh.

Para obtener acceso a MRMesh en tiempo de ejecución:

  1. Agregue un componente ARTrackableNotify a un actor de Blueprint.

Notificaciones supervisadas de AR de anclajes espaciales

  1. Seleccione el componente ARTrackableNotify y expanda la sección Eventos en el panel Detalles.
    • Seleccione el botón + en los eventos que quiera supervisar.

Eventos de Spatial Anchors

En este caso, se supervisa el evento On Add Tracked Geometry (Al agregar geometría de seguimiento), que busca mallas del mundo válidas que coincidan con los datos de mapeo espacial. Puede encontrar la lista completa de eventos en la API de componente UARTrackableNotify.

Puede cambiar el material de la malla en el gráfico de eventos de Blueprint o en C++. En la captura de pantalla siguiente se muestra la ruta de Blueprint:

Ejemplo de anclajes espaciales

Asignación espacial en C++

En el archivo build.cs del juego, agregue AugmentedReality y MRMesh en la lista PublicDependencyModuleNames:

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

Para acceder a MRMesh, suscríbase a los 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

Hay delegados similares para eventos actualizados y eliminados (AddOnTrackableUpdatedDelegate_Handle y AddOnTrackableRemovedDelegate_Handle, respectivamente).

Puede encontrar la lista completa de eventos en la API UARTrackedGeometry.

Consulta también