Mappage spatial dans UnrealSpatial Mapping in Unreal

Le mappage spatial vous permet de placer des objets sur des surfaces physiques dans le monde réel.Spatial mapping lets you place objects on physical surfaces in the real-world. Quand le monde autour du HoloLens est mappé, les hologrammes semblent plus réels pour l’utilisateur.When the world around the HoloLens is mapped, holograms seem more real to the user. 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.Spatial mapping also anchors objects in the user's world by taking advantage of depth cues, helping convince them that these holograms are actually in their space. 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.Holograms floating in space or moving with the user won't feel as real, so you always want to place items for comfort whenever 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.You can find more information on spatial mapping quality, placement, occlusion, rendering, and more, in the Spatial mapping document.

Activation du mappage spatialEnabling Spatial Mapping

Pour activer le mappage spatial sur HoloLens :To enable spatial mapping on HoloLens:

  • Ouvrez Edit > Project Settings , puis faites défiler jusqu’à la section Platforms.Open Edit > Project Settings and scroll down to the Platforms section.
    • Sélectionnez HoloLens, puis cochez Spatial Perception.Select HoloLens and check 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 :To opt into spatial mapping and debug the MRMesh in a HoloLens game:

  1. Ouvrez ARSessionConfig, puis développez la section ARSettings > World Mapping.Open the ARSessionConfig and expand the ARSettings > World Mapping section.

  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.Check Generate Mesh Data from Tracked Geometry, which tells the HoloLens plugin to start asynchronously getting spatial mapping data and surface it to Unreal through the 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.Check Render Mesh Data in Wireframe to show a white wireframe outline of every triangle in the MRMesh.

Magasin d’ancres spatiales prêt

Mappage spatial au moment de l’exécutionSpatial Mapping at runtime

Vous pouvez modifier les paramètres suivants pour mettre à jour le comportement du runtime de mappage spatial :You can modify the following parameters to update the spatial mapping runtime behavior:

  • Ouvrez Edit > Project Settings, faites défiler jusqu’à la section Platforms, puis sélectionnez HoloLens > Spatial Mapping :Open Edit > Project Settings, scroll down to the Platforms section, and select 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.Max Triangles Per Cubic Meter updates the density of the triangles in the spatial mapping mesh.
  • 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.Spatial Meshing Volume Size is the size of the cube around the player to render and update spatial mapping data.
    • 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.If the expected application runtime environment is expected to be large, this value may need to be large to match the real-world space. Si l’application doit uniquement placer des hologrammes sur des surfaces proches de l’utilisateur, cette valeur pourra être plus petite.The value can be smaller if the application only needs to place holograms on surfaces immediately around the user. Le volume de mappage spatial bougera en même temps que l’utilisateur se déplacera dans le monde.As the user walks around the world, the spatial mapping volume will move with them.

Utilisation de MRMeshWorking with MRMesh

Vous devez d’abord démarrer le mappage spatial :First, you need to start Spatial Mapping:

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.Once spatial mapping has been captured for the space, we recommend toggling off spatial mapping. 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.The spatial mapping may be completed either after a certain amount of time, or when raycasts in each direction return collisions against the MRMesh.

Pour accéder à MRMesh au moment de l’exécution :To get access to the MRMesh at runtime:

  1. Ajoutez un composant ARTrackableNotify à l’acteur Blueprint.Add an ARTrackableNotify Component to a Blueprint actor.

Composant ARTrackableNotify pour les ancres spatiales

  1. Sélectionnez le composant ARTrackableNotify, puis développez la section Events (Événements) dans le panneau Details.Select the ARTrackableNotify component and expand the Events section in the Details panel.
    • Sélectionnez le bouton + pour les événements à superviser.Select the + button on the events you want to monitor.

É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.In this case, the On Add Tracked Geometry event is being monitored, which looks for valid world meshes matching to spatial mapping data. Vous trouverez la liste complète des événements dans l’API du composant UARTrackableNotify.You can find the full list of events in the UARTrackableNotify component API.

Vous pouvez changer le matériau du maillage dans le graphe d’événements Blueprint ou dans le code C++.You can change the mesh’s material in the Blueprint Event Graph or in C++. La capture d’écran ci-dessous montre la route du blueprint :The screenshot below shows the Blueprint route:

Exemple d’ancres spatiales

Mappage spatial en C++Spatial Mapping in C++

Dans le fichier build.cs de votre jeu, ajoutez AugmentedReality et MRMesh à la liste PublicDependencyModuleNames :In your game's build.cs file, add AugmentedReality and MRMesh to the PublicDependencyModuleNames list:

PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",    
        "EyeTracker",
        "AugmentedReality",
        "MRMesh"
});

Pour accéder au MRMesh, abonnez-vous aux délégués OnTrackableAdded :To access the MRMesh, subscribe to the OnTrackableAdded delegates:

#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();
    }
}

Notes

Il existe des délégués similaires pour les événements mis à jour et supprimés, respectivement AddOnTrackableUpdatedDelegate_Handle et AddOnTrackableRemovedDelegate_Handle.There are similar delegates for updated and removed events, AddOnTrackableUpdatedDelegate_Handle and AddOnTrackableRemovedDelegate_Handle respectively.

Vous trouverez la liste complète des événements dans l’API UARTrackedGeometry.You can find the full list of events in the UARTrackedGeometry API.

Voir aussiSee also