Térbeli leképezés az Unrealben
A térbeli leképezés lehetővé teszi objektumok fizikai felületeken való elhelyezését a valós világban. Amikor a HoloLens körül a világ le van képezve, a hologramok valóságosabbnak tűnnek a felhasználó számára. A térbeli leképezés a mélységi jelek kihasználásával rögzíti az objektumokat a felhasználó világában, és segít meggyőzni őket arról, hogy ezek a hologramok valójában a saját térükben vannak. A térben lebegő vagy a felhasználóval együtt mozgó hologramok nem lesznek valósak, ezért mindig a kényelem érdekében szeretné elhelyezni az elemeket, amikor csak lehetséges.
A térbeli leképezés minőségéről, elhelyezéséről, elzáródásáról, rendereléséről és egyebekről a Térbeli leképezési dokumentumban talál további információt.
A Microsoft OpenXR beépülő modult le kell tölteni a térbeli leképezés használatához, amely elérhető az Unreal Marketplace-en vagy a GitHubon.
Térbeli leképezés engedélyezése
Térbeli leképezés engedélyezése a HoloLensen:
- Nyissa meg a Projektbeállítások szerkesztése > elemet , és görgessen le a Platformok szakaszhoz.
- Válassza a HoloLens lehetőséget, és ellenőrizze a térbeli észlelést.
A térbeli leképezés és az MRMesh hibakeresése egy HoloLens-játékban:
Nyissa meg az ARSessionConfig fájlt, és bontsa ki az ARSettings > World Mapping szakaszt.
Jelölje be a Mesh-adatok létrehozása a követett geometriából jelölőnégyzetet, amely arra utasítja a HoloLens beépülő modult, hogy aszinkron módon kezdje el lekötni a térbeli leképezési adatokat, és felszínre hozza azOkat az Unrealbe az MRMesh használatával.
Jelölje be a Hálóadatok renderelése drótvázban jelölőnégyzetet az MRMesh összes háromszögének fehér drótvázszerkezetének megjelenítéséhez.
Térbeli leképezés futásidőben
A térbeli leképezési futtatókörnyezet viselkedésének frissítéséhez az alábbi paramétereket módosíthatja:
- Nyissa meg a Projektbeállítások szerkesztése > elemet, görgessen le a Platformok szakaszhoz, és válassza a HoloLens > Térbeli leképezés lehetőséget:
- A maximális háromszögek köbméterenként frissítik a térbeli leképezési hálóban lévő háromszögek sűrűségét.
- A Spatial Meshing Volume Size a lejátszó körüli kocka mérete a térbeli leképezési adatok rendereléséhez és frissítéséhez.
- Ha a várt alkalmazás-futtatókörnyezet várhatóan nagy lesz, ennek az értéknek nagynak kell lennie ahhoz, hogy megfeleljen a valós helynek. Az érték kisebb lehet, ha az alkalmazásnak csak a felhasználó körüli felületeken kell hologramokat elhelyeznie. Ahogy a felhasználó körbejárja a világot, a térbeli leképezési kötet velük együtt mozog.
Az MRMesh használata
Először el kell indítania a térbeli leképezést:
Miután rögzítette a térbeli leképezést, javasoljuk, hogy kapcsolja ki a térbeli leképezést. A térbeli leképezés elvégezhető egy bizonyos idő elteltével, vagy ha az egyes irányokban végzett raycastok ütközéseket ad vissza az MRMesh-sel szemben.
Az MRMesh-hez való hozzáférés biztosítása futásidőben:
- ARTrackableNotify összetevő hozzáadása terv aktorhoz.
- Válassza az ARTrackableNotify összetevőt , és bontsa ki az Események szakaszt a Részletek panelen.
- Válassza ki a + figyelni kívánt események gombját.
Ebben az esetben az On Add Tracked Geometry eseményt figyeljük, amely a térbeli leképezési adatoknak megfelelő érvényes világhálókat keresi. Az események teljes listáját az UARTrackableNotify összetevő API-ban találja.
A háló anyagát módosíthatja a Tervesemény-grafikonon vagy a C++-ban. Az alábbi képernyőképen a Terv útvonal látható:
Térbeli leképezés c++ nyelven
A játék build.cs fájljában adja hozzá az AugmentedReality és az MRMesh értéket a PublicDependencyModuleNames listához:
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EyeTracker",
"AugmentedReality",
"MRMesh"
});
Az MRMesh eléréséhez iratkozzon fel az OnTrackableAdded meghatalmazottakra:
#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();
}
}
Megjegyzés
A frissített és eltávolított eseményekhez hasonló meghatalmazottak tartoznak, AddOnTrackableUpdatedDelegate_Handle és AddOnTrackableRemovedDelegate_Handle .
Az események teljes listáját az UARTrackedGeometry API-ban találja.