Prostorové mapování v Unreal
Prostorové mapování umožňuje umístit objekty na fyzické povrchy v reálném světě. Když se namapuje svět kolem HoloLensu, připadají uživateli hologramy reálnější. Prostorové mapování také ukotvuje objekty v uživatelském světě tím, že využívá hloubkové pokyny a pomáhá je přesvědčit, že tyto hologramy jsou ve skutečnosti ve svém prostoru. Hologramy plovoucí v prostoru nebo pohybující se s uživatelem se nebudou cítit jako skutečné, takže vždy chcete umístit předměty pro pohodlí, kdykoli je to možné.
Další informace o kvalitě prostorového mapování, umístění, okluzi, vykreslování a další informace najdete v dokumentu Prostorové mapování .
Modul plug-in Microsoft OpenXR by se měl stáhnout pro použití prostorového mapování, který je k dispozici na Unreal Marketplace nebo GitHubu.
Povolení prostorového mapování
Povolení prostorového mapování na HoloLensu:
- Otevřete Upravit > nastavení projektu a posuňte se dolů do části Platformy .
- Vyberte HoloLens a zaškrtněte políčko Prostorové vnímání.
Vyjádření souhlasu s prostorovým mapováním a ladění MRMesh ve hře HoloLens:
Otevřete ARSessionConfig a rozbalte část ARSettings > World Mapping .
Zaškrtněte políčko Generovat data sítě ze sledované geometrie, která modulu plug-in HoloLens říká, že má začít asynchronně získávat data prostorového mapování a zobrazit je pro Unreal prostřednictvím MRMesh.
Zaškrtněte políčko Vykreslit data sítě v drátovém modelu a zobrazte bílý obrys drátového modelu každého trojúhelníku v MRMesh.
Prostorové mapování za běhu
Úpravou následujících parametrů můžete aktualizovat chování modulu runtime prostorového mapování:
- Otevřete Upravit > nastavení projektu, posuňte se dolů do části Platformy a vyberte HoloLens > Spatial Mapping:
- Maximální počet trojúhelníků na metr krychlový aktualizuje hustotu trojúhelníků v síti prostorového mapování.
-
Spatial Meshing Volume Size je velikost datové krychle kolem přehrávače pro vykreslení a aktualizaci dat prostorového mapování.
- Pokud se očekává, že očekávané prostředí runtime aplikace bude velké, může být potřeba, aby tato hodnota odpovídala skutečnému prostoru. Hodnota může být menší, pokud aplikace potřebuje pouze umístit hologramy na povrchy bezprostředně kolem uživatele. Jak uživatel prochází světem, bude se svazek prostorového mapování přesouvat s nimi.
Práce s MRMesh
Nejprve je potřeba spustit prostorové mapování:
Po zachycení prostorového mapování prostoru doporučujeme prostorové mapování vypnout. Prostorové mapování může být dokončeno buď po určité době, nebo když se raycasty v každém směru vrátí ke kolizím s MRMesh.
Získání přístupu k MRMesh za běhu:
- Přidejte komponentu ARTrackableNotify do objektu actor podrobného plánu.
- Vyberte komponentu ARTrackableNotify a rozbalte část Události na panelu Podrobnosti .
- + Vyberte tlačítko u událostí, které chcete monitorovat.
V tomto případě se monitoruje událost On Add Tracked Geometry (Při přidání sledované geometrie ), která hledá platné světové sítě odpovídající datům prostorového mapování. Úplný seznam událostí najdete v rozhraní API komponenty UARTrackableNotify .
Materiál sítě můžete změnit v grafu událostí podrobného plánu nebo v jazyce C++. Následující snímek obrazovky ukazuje trasu podrobného plánu:
Prostorové mapování v C++
V souboru build.cs hry přidejte do seznamu PublicDependencyModuleNames rozšířenou realitu a MRMesh :
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EyeTracker",
"AugmentedReality",
"MRMesh"
});
Pokud chcete získat přístup k MRMesh, přihlaste se k odběru delegátů 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();
}
}
Poznámka
Existují podobné delegáty pro aktualizované a odebrané události , AddOnTrackableUpdatedDelegate_Handle a AddOnTrackableRemovedDelegate_Handle v uvedeném pořadí.
Úplný seznam událostí najdete v rozhraní API UARTrackedGeometry .