Sdílet prostřednictvím


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í.

Snímek obrazovky s možnostmi nastavení projektu HoloLens se zvýrazněným prostorovým vnímáním

Vyjádření souhlasu s prostorovým mapováním a ladění MRMesh ve hře HoloLens:

  1. Otevřete ARSessionConfig a rozbalte část ARSettings > World Mapping .

  2. 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.

  3. 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.

Spatial Anchors Store Ready

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:

Nastavení projektu Spatial Anchors

  • 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í:

Podrobný plán funkce ToggleARCapture se zvýrazněným typem zachycení prostorového 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:

  1. Přidejte komponentu ARTrackableNotify do objektu actor podrobného plánu.

Spatial Anchors AR Trackable Notify

  1. Vyberte komponentu ARTrackableNotify a rozbalte část Události na panelu Podrobnosti .
    • + Vyberte tlačítko u událostí, které chcete monitorovat.

Události Spatial Anchors

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:

Příklad prostorových ukotvení

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 .

Viz také