Spatial mappning i Overklig

Med rumslig mappning kan du placera objekt på fysiska ytor i verkligheten. När världen runt HoloLens mappas verkar hologram mer verkliga för användaren. Rumslig mappning förankrar också objekt i användarens värld genom att dra nytta av djupköer, vilket hjälper dem att övertyga dem om att dessa hologram faktiskt finns i deras utrymme. Hologram som flyter i rymden eller rör sig med användaren kommer inte att kännas lika verkliga, så du vill alltid placera objekt för komfort när det är möjligt.

Du hittar mer information om kvalitet på rumslig mappning, placering, ocklusion, återgivning med mera i dokumentet Spatial mappning .

Microsoft OpenXR-plugin-programmet bör laddas ned för att använda rumslig mappning som är tillgänglig på Unreal Marketplace eller GitHub.

Aktivera rumslig mappning

Så här aktiverar du rumslig mappning på HoloLens:

  • Öppna Redigera > projektinställningar och rulla ned till avsnittet Plattformar .
    • Välj HoloLens och kontrollera Rumslig uppfattning.

Skärmbild av funktionerna för HoloLens-projektinställningar med rumslig uppfattning markerad

Så här väljer du spatial mappning och felsöker MRMesh i ett HoloLens-spel:

  1. Öppna ARSessionConfig och expandera avsnittet ARSettings > World Mapping .

  2. Kontrollera Generera mesh-data från spårad geometri, som instruerar HoloLens-plugin-programmet att asynkront hämta spatiala mappningsdata och ytbehandla dem till Unreal via MRMesh.

  3. Kontrollera Rendera mesh-data i Wireframe för att visa en vit trådramskontur för varje triangel i MRMesh.

Spatial Anchors Store Klar

Rumslig mappning vid körning

Du kan ändra följande parametrar för att uppdatera körningsbeteendet för spatial mappning:

  • Öppna Redigera > projektinställningar, rulla ned till avsnittet Plattformar och välj HoloLens > Spatial Mapping:

Projektinställningar för spatiala fästpunkter

  • Maximalt antal trianglar per kubikmeter uppdaterar trianglarnas densitet i det rumsliga mappningsnätet.
  • Volymstorlek för rumsligt nät är storleken på kuben runt spelaren för att återge och uppdatera rumsliga mappningsdata.
    • Om den förväntade körningsmiljön för programmet förväntas vara stor kan det här värdet behöva vara stort för att matcha det verkliga utrymmet. Värdet kan vara mindre om programmet bara behöver placera hologram på ytor omedelbart runt användaren. När användaren går runt i världen flyttas volymen för rumslig mappning med dem.

Arbeta med MRMesh

Först måste du starta spatial mappning:

Skiss av funktionen ToggleARCapture med avbildningstypen spatial mappning markerad

När rumslig mappning har avbildats för utrymmet rekommenderar vi att du går igenom rumslig mappning. Den rumsliga mappningen kan slutföras antingen efter en viss tid eller när raycasts i varje riktning returnerar kollisioner mot MRMesh.

Så här får du åtkomst till MRMesh vid körning:

  1. Lägg till en ARTrackableNotify-komponent till en Blueprint-aktör.

Spatial Anchors AR Trackable Notify

  1. Välj komponenten ARTrackableNotify och expandera avsnittet Händelser på panelen Information .
    • Välj knappen för + de händelser som du vill övervaka.

Spatial Anchors-händelser

I det här fallet övervakas händelsen Vid lägg till spårad geometri , som söker efter giltiga världnät som matchar spatial mappningsdata. Du hittar den fullständiga listan över händelser i UARTrackableNotify-komponent-API :et.

Du kan ändra mesh-materialet i skisshändelsediagrammet eller i C++. Skärmbilden nedan visar skissvägen:

Exempel på spatiala fästpunkter

Rumslig mappning i C++

I ditt spels build.cs-fil lägger du till AugmentedReality och MRMesh i listan PublicDependencyModuleNames:

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

För att få åtkomst till MRMesh prenumererar du på ombuden 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();
    }
}

Anteckning

Det finns liknande ombud för uppdaterade och borttagna händelser, AddOnTrackableUpdatedDelegate_Handle respektive AddOnTrackableRemovedDelegate_Handle .

Du hittar den fullständiga listan över händelser i UARTrackedGeometry-API:et .

Se även