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.
U kunt als volgende kiezen voor ruimtelijke toewijzing en fouten opsporen in de MRMesh in een HoloLens-game:
Open ARSessionConfig en vouw de sectie ARSettings > World Mapping uit.
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.
Controleer Mesh-gegevens weergeven in draadmodel om een wit draadmodel weer te geven van elke driehoek in de MRMesh.
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:
- 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:
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:
- Voeg een ARTrackableNotify-onderdeel toe aan een Blueprint-actor.
- Selecteer het onderdeel ARTrackableNotify en vouw de sectie Gebeurtenissen in het deelvenster Details uit.
- Selecteer de + knop op de gebeurtenissen die u wilt bewaken.
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:
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 .