Räumliche Abbildung in Unreal
Mit der räumlichen Abbildung können Sie Objekte auf physischen Oberflächen in der realen Welt platzieren. Wenn die Welt, die die HoloLens umgibt, abgebildet ist, erscheinen Hologramme für Benutzer lebensechter. Die räumliche Abbildung verankert darüber hinaus Objekte in der Welt des Benutzers, indem sie Tiefeninformationen nutzt, was dabei hilft, den Benutzer davon zu überzeugen, dass sich diese Hologramme tatsächlich in seinem Bereich befinden. Hologramme, die im Raum schweben oder sich zusammen mit dem Benutzer bewegen, fühlen sich nicht so real an, weshalb Sie nach Möglichkeit Elemente immer unter dem Aspekt des Komforts platzieren sollten.
Weitere Informationen zur Qualität der räumlichen Abbildung, Platzierung, Verdeckung, Rendering und mehr finden Sie im Dokument Räumliche Abbildung.
Das Microsoft OpenXR-Plug-In muss heruntergeladen werden, um räumliche Abbildung zu verwenden (verfügbar im Unreal Marketplace oder auf GitHub).
Aktivieren der räumlichen Abbildung
So aktivieren Sie die räumliche Abbildung in HoloLens:
- Öffnen Sie Edit > Project Settings (Bearbeiten > Projekteinstellungen), und scrollen Sie zum Abschnitt Platforms (Plattformen) herunter.
- Wählen Sie HoloLens aus, und aktivieren Sie Spatial Perception (Räumliche Wahrnehmung).
So abonnieren Sie räumliche Abbildung und debuggen das MRMesh in einem HoloLens-Spiel:
Öffnen Sie die ARSessionConfig, und klappen Sie den Abschnitt ARSettings World Mapping (Weltdarstellung) auf.
Aktivieren Sie Generate Mesh Data from Tracked Geometry (Daten des Gittermodells auf der Grundlage der nachverfolgten Geometrie generieren), wodurch das HoloLens-Plug-In angewiesen wird, mit dem asynchronen Abrufen von räumlichen Abbildungsdaten und ihrer Oberflächenzuordnung in Unreal mithilfe von MRMesh zu beginnen.
Aktivieren Sie Render Mesh Data in Wireframe (Gittermodelldaten im Drahtmodell rendern), um einen weißen Drahtmodellumriss jedes Dreiecks im MRMesh darzustellen.
Räumliche Abbildung zur Laufzeit
Sie können die folgenden Parameter ändern, um das Laufzeitverhalten der räumlichen Abbildung zu ändern:
- Öffnen Sie Edit > Project Settings (Bearbeiten > Projekteinstellungen), scrollen Sie nach unten zum Abschnitt Platforms (Plattformen), und wählen Sie HoloLens > Spatial Mapping (HoloLens > Räumliche Abbildung) aus:
- Max Triangles Per Cubic Meter (Maximale Anzahl von Dreiecken pro Kubikmeter) dient zum Aktualisieren der Dichte der Dreiecke im Gitter der räumlichen Abbildung.
-
Spatial Meshing Volume Size (Volumengröße des räumlichen Gitters) dient zum Angeben der Größe des Würfels, der den Spieler umgibt, um Daten der räumlichen Abbildung zu rendern und zu aktualisieren.
- Im Falle einer großen Anwendungslaufzeitumgebung muss dieser Wert ggf. hoch sein, um dem realen Raum gerecht zu werden. Der Wert kann kleiner sein, wenn die Anwendung lediglich Hologramme auf Oberflächen in der unmittelbareren Umgebung des Benutzers platzieren muss. Wenn sich der Benutzer in der Umgebung bewegt, bewegt sich das Volumen der räumlichen Abbildung mit ihm mit.
Arbeiten mit MRMesh
Zunächst müssen Sie die räumliche Abbildung starten:
Nachdem die räumliche Abbildung für den Raum erfasst wurde, empfehlen wir, die räumliche Abbildung zu deaktivieren. Die räumliche Abbildung kann entweder nach einer bestimmten Zeitspanne abgeschlossen sein, oder wenn Raycasts in jede Richtung Kollisionen mit dem MRMesh zurückgeben.
So erhalten Sie zur Laufzeit Zugriff auf das MRMesh:
- Fügen Sie einem Blaupausenakteur eine ARTrackableNotify-Komponente hinzu.
- Wählen Sie die ARTrackableNotify-Komponente aus, und klappen Sie im Bereich Details den Abschnitt Events (Ereignisse) auf.
- Wählen Sie die Schaltfläche + für die Ereignisse aus, die Sie überwachen möchten.
In diesem Fall wird das Ereignis On Add Tracked Geometry überwacht, das nach gültigen Gittermodellen der Realumgebung sucht, die mit Daten der räumlichen Abbildung übereinstimmen. Die vollständige Liste der Ereignisse finden Sie in der Komponenten-API UARTrackableNotify.
Sie können das Material des Gittermodells im Ereignisdiagramm der Blaupause oder in C++ ändern. Auf dem Screenshot unten ist die Route der Blaupause dargestellt:
Räumliche Abbildung in C++
Fügen Sie in der build.cs-Datei Ihres Spiels AugmentedReality und MRMesh zur Liste „PublicDependencyModuleNames“ hinzu:
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EyeTracker",
"AugmentedReality",
"MRMesh"
});
Abonnieren Sie zum Zugriff auf das MRMesh die OnTrackableAdded-Delegaten:
#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();
}
}
Hinweis
Es gibt ähnliche Delegaten für aktualisierte und entfernte Ereignisse, AddOnTrackableUpdatedDelegate_Handle bzw. AddOnTrackableRemovedDelegate_Handle.
Die vollständige Liste der Ereignisse finden Sie in der Komponenten-API UARTrackedGeometry.