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.

Capture d’écran des fonctionnalités des paramètres du projet HoloLens avec la perception spatiale mise en surbrillance

Pour choisir le mappage spatial et déboguer MRMesh dans un jeu HoloLens :

  1. Ouvrez ARSessionConfig, puis développez la section ARSettings  World Mapping.

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

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

Magasin d’ancres spatiales prêt

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 :

Paramètres projet des ancres spatiales

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

Blueprint de la fonction ToggleARCapture avec le type de capture de mappage spatial mis en surbrillance

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 :

  1. Ajoutez un composant ARTrackableNotify à l’acteur Blueprint.

Composant ARTrackableNotify pour les ancres spatiales

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

Événements d’ancres spatiales

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 :

Exemple d’ancres spatiales

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.

Voir aussi