Ruimtelijke toewijzing in Unreal

Met ruimtelijke toewijzing kunt u objecten op fysieke oppervlakken in de echte wereld plaatsen. Wanneer de wereld rond de HoloLens in kaart is gebracht, lijken hologrammen voor de gebruiker realistischer. Ruimtelijke toewijzing verankert objecten ook in de wereld van de gebruiker door gebruik te maken van dieptesignalen, zodat ze kunnen overtuigen dat deze hologrammen zich daadwerkelijk in hun ruimte bevinden. Hologrammen die in de ruimte zweven of met de gebruiker meebewegen, voelen niet zo echt aan, dus u wilt altijd items plaatsen voor comfort waar mogelijk.

Meer informatie over de kwaliteit van ruimtelijke kaarten, plaatsing, occlusie, rendering en meer vindt u in het document Ruimtelijke toewijzing .

De Microsoft OpenXR-invoegtoepassing moet worden gedownload om ruimtelijke toewijzing te gebruiken, beschikbaar op Unreal Marketplace of GitHub.

Ruimtelijke toewijzing inschakelen

Ruimtelijke toewijzing inschakelen op HoloLens:

  • Open Projectinstellingen bewerken > en schuif omlaag naar de sectie Platforms.
    • Selecteer HoloLens en schakel Spatial Perception in.

Schermopname van de mogelijkheden van de HoloLens-projectinstellingen met ruimtelijke waarneming gemarkeerd

U kunt als volgende kiezen voor ruimtelijke toewijzing en fouten opsporen in de MRMesh in een HoloLens-game:

  1. Open ARSessionConfig en vouw de sectie ARSettings > World Mapping uit.

  2. Schakel Mesh-gegevens genereren uit tracked geometry in, waarmee de HoloLens-invoegtoepassing asynchroon moet beginnen met het ophalen van ruimtelijke toewijzingsgegevens en deze via de MRMesh naar Unreal moet verplaatsen.

  3. Controleer Mesh-gegevens weergeven in draadmodel om een wit draadmodel weer te geven van elke driehoek in de MRMesh.

Spatial Anchors Store Ready

Ruimtelijke toewijzing tijdens runtime

U kunt de volgende parameters wijzigen om het runtimegedrag voor ruimtelijke toewijzing bij te werken:

  • Open Projectinstellingen bewerken>, schuif omlaag naar de sectie Platforms en selecteer HoloLens > Spatial Mapping:

Spatial Anchors-projectinstellingen

  • Max. driehoeken per kubieke meter werkt de dichtheid van de driehoeken in het ruimtelijk kaartnet bij.
  • Spatial Meshing Volume Size is de grootte van de kubus rond de speler om ruimtelijke toewijzingsgegevens weer te geven en bij te werken.
    • Als de verwachte runtime-omgeving van de toepassing naar verwachting groot is, moet deze waarde mogelijk groot zijn om overeen te komen met de werkelijke ruimte. De waarde kan kleiner zijn als de toepassing alleen hologrammen op oppervlakken direct rond de gebruiker hoeft te plaatsen. Wanneer de gebruiker de wereld rondloopt, wordt het volume van de ruimtelijke toewijzing mee verplaatst.

Werken met MRMesh

Eerst moet u ruimtelijke toewijzing starten:

Blauwdruk van de functie ToggleARCapture met het type opname van ruimtelijke toewijzing gemarkeerd

Zodra ruimtelijke toewijzing is vastgelegd voor de ruimte, raden we u aan om ruimtelijke toewijzing uit te schakelen. De ruimtelijke toewijzing kan na een bepaalde tijd worden voltooid, of wanneer raycasts in elke richting botsen tegen de MRMesh.

Toegang krijgen tot de MRMesh tijdens runtime:

  1. Voeg een ARTrackableNotify-onderdeel toe aan een Blueprint-actor.

Spatial Anchors AR Trackable Notify

  1. Selecteer het onderdeel ARTrackableNotify en vouw de sectie Gebeurtenissen in het deelvenster Details uit.
    • Selecteer de + knop op de gebeurtenissen die u wilt bewaken.

Spatial Anchors-gebeurtenissen

In dit geval wordt de gebeurtenis On Add Tracked Geometry bewaakt, waarmee wordt gezocht naar geldige wereld-meshes die overeenkomen met ruimtelijke toewijzingsgegevens. U vindt de volledige lijst met gebeurtenissen in de onderdeel-API UARTrackableNotify .

U kunt het materiaal van het mesh wijzigen in de Blueprint Event Graph of in C++. In de onderstaande schermopname ziet u de blauwdrukroute:

Voorbeeld van spatial anchors

Ruimtelijke toewijzing in C++

Voeg in het bestand build.cs van uw game AugmentedReality en MRMesh toe aan de lijst PublicDependencyModuleNames:

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

Als u toegang wilt krijgen tot de MRMesh, abonneert u zich op de OnTrackableAdded-gemachtigden :

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

Notitie

Er zijn vergelijkbare gemachtigden voor bijgewerkte en verwijderde gebeurtenissen, respectievelijk AddOnTrackableUpdatedDelegate_Handle en AddOnTrackableRemovedDelegate_Handle .

U vindt de volledige lijst met gebeurtenissen in de UARTrackedGeometry-API .

Zie ook