Mappage spatial dans Unreal
Le mappage spatial vous permet de placer des objets sur des surfaces physiques dans le monde réel. Quand le monde autour du HoloLens est mappé, les hologrammes semblent plus réels pour l’utilisateur. Le mappage spatial ancre également les objets dans le monde de l’utilisateur en tirant parti des indicateurs de profondeur, ce qui permet de les convaincre que ces hologrammes sont en fait dans leur espace. Les hologrammes qui flottent dans l’espace ou qui se déplacent avec l’utilisateur n’ont pas l’air aussi réels, si bien qu’il est conseillé d’ajouter des éléments pour plus de confort dès que cela est possible.
Vous trouverez plus d’informations sur la qualité du mappage spatial, le positionnement, l’occlusion, le rendu et plus encore, dans le document Mappage spatial.
Pour utiliser le mappage spatial, vous devez télécharger le plug-in Microsoft OpenXR, disponible sur la marketplace Unreal ou GitHub.
Activation du mappage spatial
Pour activer le mappage spatial sur HoloLens :
- Ouvrez Edit Project Settings, puis faites défiler jusqu’à la section Platforms.
- Sélectionnez HoloLens, puis cochez Spatial Perception.
Pour choisir le mappage spatial et déboguer MRMesh dans un jeu HoloLens :
Ouvrez ARSessionConfig, puis développez la section ARSettings World Mapping.
Cochez Generate Mesh Data from Tracked Geometry (Générer les données de maillage à partir de la géométrie suivie), ce qui indique au plug-in HoloLens qu’il doit démarrer de manière asynchrone la récupération des données de mappage spatial et les afficher dans Unreal via MRMesh.
Cochez Render Mesh Data in Wireframe (Afficher les données de maillage dans un contour filaire) pour afficher un contour filaire blanc autour de chaque triangle dans MRMesh.
Mappage spatial au moment de l’exécution
Vous pouvez modifier les paramètres suivants pour mettre à jour le comportement du runtime de mappage spatial :
- Ouvrez Edit > Project Settings, faites défiler jusqu’à la section Platforms, puis sélectionnez HoloLens > Spatial Mapping :
- Le paramètre Max Triangles Per Cubic Meter (Nombre maximal de triangles par mètre cube) modifie la densité des triangles dans le maillage de mappage spatial.
- Le paramètre Spatial Meshing Volume Size (Volume du maillage spatial) définit la taille du cube autour du joueur utilisé pour le rendu et la mise à jour des données de mappage spatial.
- Si l’environnement d’exécution de l’application est supposé être grand, cette valeur devra être suffisamment grande pour s’adapter à l’espace réel. Si l’application doit uniquement placer des hologrammes sur des surfaces proches de l’utilisateur, cette valeur pourra être plus petite. Le volume de mappage spatial bougera en même temps que l’utilisateur se déplacera dans le monde.
Utilisation de MRMesh
Vous devez d’abord démarrer le mappage spatial :
Une fois le mappage spatial capturé pour l’espace, nous vous recommandons de le désactiver. Le mappage spatial peut être effectué après un certain laps de temps ou quand les raycasts dans chaque direction renvoient des collisions sur le MRMesh.
Pour accéder à MRMesh au moment de l’exécution :
- Ajoutez un composant ARTrackableNotify à l’acteur Blueprint.
- Sélectionnez le composant ARTrackableNotify, puis développez la section Events (Événements) dans le panneau Details.
- Sélectionnez le bouton + pour les événements à superviser.
Dans ce cas, l’événement On Add Tracked Geometry (Lors de l’ajout d’une géométrie suivie) est supervisé. Celui-ci recherche les maillages valides de l’environnement qui correspondent aux données de mappage spatial. Vous trouverez la liste complète des événements dans l’API du composant UARTrackableNotify.
Vous pouvez changer le matériau du maillage dans le graphe d’événements Blueprint ou dans le code C++. La capture d’écran ci-dessous montre la route du blueprint :
Mappage spatial en C++
Dans le fichier build.cs de votre jeu, ajoutez AugmentedReality et MRMesh à la liste PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EyeTracker",
"AugmentedReality",
"MRMesh"
});
Pour accéder au MRMesh, abonnez-vous aux délégués 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();
}
}
Remarque
Il existe des délégués similaires pour les événements mis à jour et supprimés, respectivement AddOnTrackableUpdatedDelegate_Handle et AddOnTrackableRemovedDelegate_Handle.
Vous trouverez la liste complète des événements dans l’API UARTrackedGeometry.