Asignación espacial en Unreal
La asignación espacial permite colocar objetos en superficies físicas en el mundo real. Cuando se asigna el mundo alrededor de HoloLens, los hologramas parecen más reales para el usuario. La asignación espacial también ancla objetos en el mundo del usuario aprovechando las indicaciones de profundidad, lo que ayuda a convencerlos 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 sentirán tan reales, por lo que siempre quieres colocar elementos para mayor comodidad siempre que sea posible.
Puede encontrar más información sobre la calidad de la asignación espacial, la ubicación, la oclusión, la representación, etc., en el documento Asignación espacial .
El complemento Microsoft OpenXR debe descargarse para usar la asignación espacial, disponible en Unreal Marketplace o GitHub.
Habilitación de la asignación espacial
Para habilitar la asignación espacial en HoloLens:
- Abra Editar > configuración del proyecto y desplácese hacia abajo hasta la sección Plataformas .
- Seleccione HoloLens y compruebe Percepción espacial.
Para participar en la asignación espacial y depurar MRMesh en un juego de HoloLens:
Abra ARSessionConfig y expanda la sección ArSettings > World Mapping .
Active Generate Mesh Data from Tracked Geometry (Generar datos de malla a partir de geometría rastreada), que indica al complemento HoloLens que empiece a obtener datos de asignación espacial de forma asincrónica y los muestre a Unreal a través de MRMesh.
Active Render Mesh Data in Wireframe (Representar datos de malla en wireframe ) para mostrar un esquema de estructura alámbrica blanca de cada triángulo de MRMesh.
Asignación espacial en tiempo de ejecución
Puede modificar los parámetros siguientes para actualizar el comportamiento del entorno de ejecución de asignación espacial:
- Abra Editar > configuración del proyecto, desplácese hacia abajo hasta la sección Plataformas y seleccione Asignación espacial de HoloLens>:
- Triángulos máximos por metro cúbico actualiza la densidad de los triángulos en la malla de asignación espacial.
-
Tamaño del volumen de malla espacial es el tamaño del cubo alrededor del reproductor para representar y actualizar los datos de asignación espacial.
- Si se espera que el entorno de tiempo de ejecución de la aplicación esperado sea grande, es posible que este valor tenga que ser grande para que coincida con el espacio real. El valor puede ser más pequeño si la aplicación solo necesita colocar hologramas en superficies inmediatamente alrededor del usuario. A medida que el usuario recorre todo el mundo, el volumen de asignación espacial se moverá con ellos.
Trabajar con MRMesh
En primer lugar, debe iniciar la asignación espacial:
Una vez capturada la asignación espacial para el espacio, se recomienda desactivar la asignación espacial. La asignación espacial puede completarse después de una cierta cantidad de tiempo o cuando los raycasts en cada dirección devuelven colisiones contra MRMesh.
Para obtener acceso a MRMesh en tiempo de ejecución:
- Agregue un componente ARTrackableNotify a un actor de Plano técnico.
- Seleccione el componente ARTrackableNotify y expanda la sección Eventos en el panel Detalles .
- Seleccione el + botón de los eventos que desea supervisar.
En este caso, se está supervisando el evento Al agregar geometría con seguimiento , que busca mallas de mundo válidas que coincidan con los datos de asignación espacial. Puede encontrar la lista completa de eventos en la API del componente UARTrackableNotify .
Puede cambiar el material de la malla en Blueprint Event Graph o en C++. En la captura de pantalla siguiente se muestra la ruta de Plano técnico:
Asignación espacial en C++
En el archivo build.cs del juego, agrega AugmentedReality y MRMesh a 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 quitados, AddOnTrackableUpdatedDelegate_Handle y AddOnTrackableRemovedDelegate_Handle respectivamente.
Puede encontrar la lista completa de eventos en la API UARTrackedGeometry .