Mappage spatial

Le mappage spatial fournit une représentation détaillée des surfaces du monde réel dans l’environnement autour de l’HoloLens, ce qui permet aux développeurs de créer une expérience de réalité mixte convaincante. En fusionnant le monde réel avec le monde virtuel, une application peut rendre les hologrammes réels. Les applications peuvent également s’aligner plus naturellement sur les attentes des utilisateurs en fournissant des comportements et des interactions réels familiers.


Prise en charge de l’appareil

Fonctionnalité HoloLens (1ère génération) HoloLens 2 Casques immersifs
Mappage spatial ✔️ ✔️

Pourquoi le mappage spatial est-il important ?

Le mappage spatial permet de placer des objets sur des surfaces réelles. Cela permet d’ancrer des objets dans le monde de l’utilisateur et de tirer parti des indices de profondeur du monde réel. L’ocludation de vos hologrammes en fonction d’autres hologrammes et d’objets réels permet de convaincre l’utilisateur que ces hologrammes se trouvent réellement dans leur espace. Les hologrammes flottant dans l’espace ou se déplaçant avec l’utilisateur ne sont pas aussi réels. Lorsque cela est possible, placez les articles pour plus de confort.

Visualiser des surfaces lors du placement ou du déplacement d’hologrammes (utilisez une grille projetée). Cela permet aux utilisateurs de savoir où ils peuvent placer le mieux leurs hologrammes et indique si l’endroit où ils tentent de placer l’hologramme n’est pas mappé. Vous pouvez « afficher des éléments » vers l’utilisateur s’ils finissent par trop d’angle.

Vue d'ensemble conceptuelle

Surfaces de maillage couvrant une pièce
Exemple de maillage de mappage spatial couvrant une salle

Les deux principaux types d’objets utilisés pour le mappage spatial sont « Spatial Surface Observer » et « Spatial Surface ».

L’application fournit à Spatial Surface Observer un ou plusieurs volumes englobants pour définir les régions d’espace dans lesquelles l’application souhaite recevoir des données de mappage spatial. Pour chacun de ces volumes, le mappage spatial fournit à l’application un ensemble de surfaces spatiales.

Ces volumes peuvent être stationnaires (dans un emplacement fixe basé sur le monde réel) ou être attachés à l’HoloLens (ils se déplacent, mais ne pivotent pas, avec l’HoloLens à mesure qu’il se déplace dans l’environnement). Chaque surface spatiale décrit les surfaces du monde réel dans un petit volume d’espace, représentée sous la forme d’un maillage triangle attaché à un système de coordonnées spatiales verrouillé dans le monde.

À mesure que l’HoloLens collecte de nouvelles données sur l’environnement et que des modifications se produisent dans l’environnement, des surfaces spatiales apparaissent, disparaissent et changent.

Démonstration des concepts de conception de la reconnaissance spatiale

Si vous souhaitez voir les concepts de conception spatial Awareness en action, consultez notre démonstration vidéo Conception d’hologrammes - Reconnaissance spatiale ci-dessous. Une fois que vous avez terminé, poursuivez pour obtenir une présentation plus détaillée relative à des rubriques spécifiques.

Cette vidéo a été extraite de l’application HoloLens 2 « Designing Holograms ». Téléchargez et profitez de l’expérience complète ici.

Mappage spatial et compréhension de la scène worldMesh

Pour HoloLens 2, il est possible d’interroger une version statique des données de mappage spatial à l’aide du Kit de développement logiciel (SDK) Scene Understanding (paramètre EnableWorldMesh). Voici les différences entre deux façons d’accéder aux données de mappage spatial :

  • API de mappage spatial :
    • Plage limitée : données de mappage spatial disponibles pour les applications dans une « bulle » mise en cache de taille limitée autour de l’utilisateur.
    • Fournit des mises à jour à faible latence des régions de maillage modifiées par le biais d’événements SurfacesChanged.
    • Niveau variable de détails contrôlé par le paramètre Triangles par mètre cube.
  • Kit de développement logiciel (SDK) Scene Understanding :
    • Plage illimitée : fournit toutes les données de mappage spatial analysées dans le rayon de requête.
    • Fournit un instantané statique des données de mappage spatial. L’obtention des données de mappage spatial mises à jour nécessite l’exécution d’une nouvelle requête pour l’ensemble du maillage.
    • Niveau cohérent de détails contrôlé par le paramètre RequestedMeshLevelOfDetail.

Qu’est-ce qui influence la qualité de la cartographie spatiale ?

Plusieurs facteurs, détaillés ici, peuvent affecter la fréquence et la gravité de ces erreurs. Toutefois, vous devez concevoir votre application afin que l’utilisateur puisse atteindre ses objectifs même en présence d’erreurs dans les données de mappage spatial.

Scénarios d’utilisation courants

Illustrations des scénarios courants d’utilisation du mappage spatial : Placement, Occlusion, Physique et Navigation

Placement

Le mappage spatial offre aux applications la possibilité de présenter des formes d’interaction naturelles et familières à l’utilisateur. Quoi de plus naturel que de poser votre téléphone sur votre bureau ?

La contrainte du placement d’hologrammes (ou plus généralement, toute sélection d’emplacements spatiaux) à poser sur des surfaces fournit un mappage naturel du 3D (point dans l’espace) au 2D (point sur la surface). Cela réduit la quantité d’informations que l’utilisateur doit fournir à l’application et rend ses interactions plus rapides, plus faciles et plus précises. Cela est vrai, car la « distance loin » n’est pas quelque chose que nous sommes habitués à communiquer physiquement avec d’autres personnes ou avec des ordinateurs. Lorsque nous pointons avec notre doigt, nous spécifions une direction, mais pas une distance.

Une mise en garde importante ici est que lorsqu’une application déduit la distance de direction (par exemple en effectuant un raycast le long de la direction du regard de l’utilisateur pour trouver la surface spatiale la plus proche), cela doit produire des résultats que l’utilisateur peut prédire de manière fiable. Sinon, l’utilisateur perd son sentiment de contrôle et cela peut rapidement devenir frustrant. Une méthode qui vous aide à cela consiste à effectuer plusieurs raycasts au lieu d’une seule. Les résultats agrégés doivent être plus lisses et plus prévisibles, moins susceptibles d’être influencés par des résultats « hors norme » temporaires (comme cela peut être dû à des rayons passant à travers de petits trous ou à de petits morceaux de géométrie que l’utilisateur ne connaît pas). L’agrégation ou le lissage peut également être effectué au fil du temps ; par exemple, vous pouvez limiter la vitesse maximale à laquelle un hologramme peut varier en distance de l’utilisateur. La simple limitation de la valeur de distance minimale et maximale peut également être utile, de sorte que l’hologramme déplacé ne s’envole pas soudainement dans la distance ou ne se bloque pas sur le visage de l’utilisateur.

Les applications peuvent également utiliser la forme et la direction des surfaces pour guider la position des hologrammes. Une chaise holographique ne doit pas pénétrer à travers les murs et doit s’asseoir au ras du sol même si elle est légèrement inégale. Ce type de fonctionnalité reposerait probablement sur l’utilisation de collisions physiques plutôt que de raycasts, mais des préoccupations similaires s’appliqueront. Si l’hologramme placé comporte de nombreux petits polygones qui sortent, comme les jambes d’une chaise, il peut être judicieux d’étendre la représentation physique de ces polygones à quelque chose de plus large et de plus lisse afin qu’ils soient plus capables de glisser sur les surfaces spatiales sans s’accrocher.

À l’extrême, l’entrée utilisateur peut être entièrement simplifiée et les surfaces spatiales peuvent être utilisées pour effectuer un placement entièrement automatique des hologrammes. Par exemple, l’application peut placer un commutateur de lumière holographique quelque part sur le mur pour que l’utilisateur puisse appuyer. La même mise en garde sur la prévisibilité s’applique doublement ici; si l’utilisateur s’attend à contrôler le placement des hologrammes, mais que l’application ne place pas toujours les hologrammes où il s’attend (si le commutateur lumineux apparaît quelque part que l’utilisateur ne peut pas atteindre), cela sera une expérience frustrante. Il peut en fait être pire d’effectuer un placement automatique qui nécessite une correction de l’utilisateur une partie du temps, que de simplement exiger de l’utilisateur qu’il effectue toujours le placement lui-même; parce que le placement automatique réussi est attendu, la correction manuelle semble être un fardeau!

Notez également que la capacité d’une application à utiliser des surfaces spatiales pour le placement dépend fortement de l’expérience d’analyse de l’application. Si une surface n’a pas été analysée, elle ne peut pas être utilisée pour le placement. C’est à l’application de le rendre clair pour l’utilisateur, afin qu’il puisse soit aider à analyser de nouvelles surfaces, soit sélectionner un nouvel emplacement.

Les commentaires visuels à l’utilisateur sont d’une importance primordiale lors du placement. L’utilisateur doit savoir où l’hologramme est basé sur la surface la plus proche avec des effets de mise à la terre. Ils doivent comprendre pourquoi le mouvement de leur hologramme est limité (par exemple, en raison de collisions avec une autre surface proche). S’ils ne peuvent pas placer un hologramme à l’emplacement actuel, les commentaires visuels doivent indiquer clairement pourquoi. Par exemple, si l’utilisateur tente de placer un canapé holographique coincé à mi-chemin dans le mur, les parties du canapé qui se trouvent derrière le mur doivent pulser dans une couleur en colère. À l’inverse, si l’application ne trouve pas de surface spatiale à un emplacement où l’utilisateur peut voir une surface réelle, l’application doit le préciser. L’absence évidente d’effet de base dans ce domaine peut atteindre cet objectif.

Occlusion

L’une des principales utilisations des surfaces de mappage spatial est simplement d’obstruer les hologrammes. Ce comportement simple a un impact énorme sur le réalisme perçu des hologrammes, aidant à créer un sens viscéral qui habite vraiment le même espace physique que l’utilisateur.

L’occlusion fournit également des informations à l’utilisateur ; lorsqu’un hologramme semble être obclus par une surface réelle, cela fournit un retour visuel supplémentaire quant à l’emplacement spatial de cet hologramme dans le monde. À l’inverse, l’occlusion peut également masquer utilement des informations à l’utilisateur ; L’insertion d’hologrammes derrière les murs peut réduire l’encombrement visuel de manière intuitive. Pour masquer ou révéler un hologramme, l’utilisateur doit simplement déplacer sa tête.

L’occlusion peut également être utilisée pour répondre aux attentes d’une interface utilisateur naturelle basée sur des interactions physiques familières; si un hologramme est obstrué par une surface, c’est parce que cette surface est solide. L’utilisateur doit donc s’attendre à ce que l’hologramme entre en collision avec cette surface et ne la traverse pas.

Parfois, l’occlusion des hologrammes n’est pas souhaitable. Si un utilisateur doit interagir avec un hologramme, il doit le voir, même s’il se trouve derrière une surface réelle. Dans ce cas, il est généralement judicieux de restituer un tel hologramme différemment lorsqu’il est obclité (par exemple, en réduisant sa luminosité). De cette façon, l’utilisateur peut localiser visuellement l’hologramme, mais il saura qu’il se trouve derrière quelque chose.

Physique

L’utilisation de la simulation physique est une autre façon d’utiliser le mappage spatial pour renforcer la présence d’hologrammes dans l’espace physique de l’utilisateur. Quand ma boule holographique en caoutchouc roule de façon réaliste hors de mon bureau, rebondit sur le plancher et disparaît sous le canapé, il peut être difficile pour moi de croire qu’elle n’est pas là.

La simulation physique offre également la possibilité à une application d’utiliser des interactions physiques naturelles et familières. Déplacer un meuble holographique sur le sol sera probablement plus facile pour l’utilisateur si le meuble répond comme s’il glissé sur le plancher avec l’inertie et la friction appropriées.

Pour générer des comportements physiques réalistes, vous devrez probablement effectuer un traitement de maillage tel que le remplissage des trous, l’élimination des hallucinations flottantes et le lissage des surfaces rugueuses.

Vous devez également réfléchir à la façon dont l’expérience d’analyse de votre application influence sa simulation physique. Tout d’abord, les surfaces manquantes n’entreront pas en collision avec quoi que ce soit ; que se passe-t-il quand la balle en caoutchouc descend dans le couloir et au bout du monde connu? Deuxièmement, vous devez décider si vous allez continuer à répondre aux changements dans l’environnement au fil du temps. Dans certains cas, vous souhaiterez répondre aussi rapidement que possible . dire si l’utilisateur utilise des portes et des meubles comme barricades mobiles pour se défendre contre une tempête de flèches romaines entrantes. Dans d’autres cas, toutefois, vous pouvez ignorer les nouvelles mises à jour ; Conduire votre voiture de sport holographique autour de l’hippodrome sur votre sol peut soudainement ne pas être si amusant si votre chien décide de s’asseoir au milieu de la piste.

Les applications peuvent utiliser des données de mappage spatial pour accorder aux caractères holographiques (ou agents) la possibilité de naviguer dans le monde réel de la même façon qu’une personne réelle. Cela peut aider à renforcer la présence de caractères holographiques en les limitant au même ensemble de comportements naturels et familiers que ceux de l’utilisateur et de ses amis.

Les fonctionnalités de navigation peuvent également être utiles aux utilisateurs. Une fois qu’une carte de navigation a été créée dans une zone donnée, elle peut être partagée pour fournir des directions holographiques aux nouveaux utilisateurs qui ne connaissent pas cet emplacement. Cette carte pourrait être conçue pour aider à maintenir la circulation des piétons en douceur, ou pour éviter les accidents dans des endroits dangereux comme les chantiers de construction.

Les principaux défis techniques impliqués dans l’implémentation de la fonctionnalité de navigation seront la détection fiable des surfaces accessibles à pied (les humains ne marchent pas sur les tables !) et l’adaptation appropriée aux changements dans l’environnement (les humains ne franchiront pas les portes fermées!). Le maillage peut nécessiter un traitement avant d’être utilisable pour la planification du chemin et la navigation par un caractère virtuel. Le lissage du maillage et la suppression des hallucinations peuvent aider à éviter que les caractères ne deviennent bloqués. Vous pouvez également simplifier considérablement le maillage pour accélérer la planification du chemin et les calculs de navigation de votre personnage. Ces défis ont fait l’objet d’une grande attention dans le développement de la technologie des jeux vidéo, et il existe une multitude de documents de recherche disponibles sur ces sujets.

La fonctionnalité NavMesh intégrée dans Unity ne peut pas être utilisée par défaut pour les surfaces de mappage spatial, car les surfaces ne sont pas connues tant que l’application ne démarre pas. Toutefois, vous pouvez générer un NavMesh pendant l’exécution en installant NavMeshComponents. Notez que le système de mappage spatial ne fournit pas d’informations sur les surfaces loin de l’emplacement actuel de l’utilisateur; pour créer une carte d’une grande zone, l’application doit « mémoriser » les surfaces. Vous pouvez également augmenter le paramètre d’étendues d’observation dans le profil de reconnaissance spatiale, ce qui augmente la zone sur laquelle vous pouvez créer votre NavMesh.

Visualisation

La plupart du temps, il convient que les surfaces spatiales soient invisibles; pour réduire l’encombrement visuel et laisser le monde réel parler pour lui-même. Toutefois, il est parfois utile de visualiser directement les surfaces de mappage spatial, même si leurs équivalents réels sont visibles.

Par exemple, lorsque l’utilisateur tente de placer un hologramme sur une surface (en plaçant une armoire holographique sur le mur, par exemple), il peut être utile de « grounder » l’hologramme en projetant une ombre sur la surface. Cela donne à l’utilisateur une idée beaucoup plus claire de la proximité physique exacte entre l’hologramme et la surface. Il s’agit également d’un exemple de pratique plus générale qui consiste à « prévisualiser » visuellement une modification avant que l’utilisateur ne s’y engage.

En visualisant les surfaces, l’application peut partager avec l’utilisateur sa compréhension de l’environnement. Par exemple, un jeu de plateau holographique peut visualiser les surfaces horizontales qu’il a identifiées en tant que « tables », afin que l’utilisateur sache où il doit interagir.

La visualisation des surfaces peut être un moyen utile de montrer à l’utilisateur les espaces à proximité qui sont masqués. Cela pourrait permettre à l’utilisateur d’accéder à sa cuisine (et à tous ses hologrammes contenus) à partir de son salon.

Les maillages de surface fournis par le mappage spatial peuvent ne pas être particulièrement « propres ». Il est important de les visualiser correctement. Les calculs d’éclairage traditionnels peuvent mettre en évidence les erreurs dans les normales de surface d’une manière visuelle distrayante, tandis que les textures « propres » projetées sur la surface peuvent aider à lui donner une apparence plusidieuse. Il est également possible d’effectuer un traitement de maillage pour améliorer les propriétés de maillage, avant que les surfaces ne soient rendues.

Notes

HoloLens 2 implémente un nouveau runtime Scene Understanding, qui fournit aux développeurs Mixed Reality une représentation d’environnement structurée et de haut niveau conçue pour simplifier l’implémentation du placement, de l’occlusion, de la physique et de la navigation.

Utilisation de Surface Observer

Le point de départ du mappage spatial est l’observateur de surface. Le flux de programme est le suivant :

  • Créer un objet d’observateur de surface
    • Fournissez un ou plusieurs volumes spatiaux pour définir les régions d’intérêt dans lesquelles l’application souhaite recevoir des données de mappage spatial. Un volume spatial est simplement une forme définissant une zone d’espace, telle qu’une sphère ou une zone.
    • Utilisez un volume spatial avec un système de coordonnées spatiales verrouillé par le monde pour identifier une région fixe du monde physique.
    • Utilisez un volume spatial, mis à jour chaque image avec un système de coordonnées spatiales verrouillée par le corps, pour identifier une région d’espace qui se déplace (mais ne pivote pas) avec l’utilisateur.
    • Ces volumes spatiaux peuvent être modifiés ultérieurement à tout moment, à mesure que l’état de l’application ou de l’utilisateur change.
  • Utiliser l’interrogation ou la notification pour récupérer des informations sur les surfaces spatiales
    • Vous pouvez « interroger » l’observateur de surface pour l’état de la surface spatiale à tout moment. Au lieu de cela, vous pouvez vous inscrire à l’événement « surfaces modifiées » de l’observateur de surface, qui informera l’application lorsque les surfaces spatiales ont changé.
    • Pour un volume spatial dynamique, tel que le frustum de vue ou un volume verrouillé par le corps, les applications devront interroger les modifications apportées à chaque image en définissant la région d’intérêt, puis en obtenant l’ensemble actuel de surfaces spatiales.
    • Pour un volume statique, tel qu’un cube à verrouillage universel couvrant une seule pièce, les applications peuvent s’inscrire pour que l’événement « surfaces modifiées » soit averti lorsque des surfaces spatiales à l’intérieur de ce volume ont peut-être changé.
  • Modifications des surfaces de traitement
    • Itérer l’ensemble de surfaces spatiales fourni.
    • Classifier les surfaces spatiales comme ajoutées, modifiées ou supprimées.
    • Pour chaque surface spatiale ajoutée ou modifiée, le cas échéant, envoyez une demande asynchrone pour recevoir un maillage mis à jour représentant l’état actuel de la surface au niveau de détail souhaité.
  • Traitez la demande de maillage asynchrone (plus d’informations dans les sections suivantes).

Mise en cache de maillage

Les surfaces spatiales sont représentées par des maillages de triangles denses. Le stockage, le rendu et le traitement de ces maillages peuvent consommer des ressources de calcul et de stockage importantes. Par conséquent, chaque application doit adopter un schéma de mise en cache de maillage adapté à ses besoins, afin de réduire au minimum les ressources utilisées pour le traitement et le stockage du maillage. Ce schéma doit déterminer les maillages à conserver et ceux à ignorer, et quand mettre à jour le maillage pour chaque surface spatiale.

Un grand nombre des considérations abordées dans cet article indiquent directement comment votre application doit aborder la mise en cache de maillage. Vous devez prendre en compte la façon dont l’utilisateur se déplace dans l’environnement, quelles surfaces sont nécessaires, quand différentes surfaces seront observées et quand les changements dans l’environnement doivent être capturés.

Lors de l’interprétation de l’événement « surfaces modifiées » fourni par l’observateur de surface, la logique de mise en cache de maillage de base est la suivante :

  • Si l’application voit un ID de surface spatiale qu’elle n’a pas vu auparavant, elle doit le traiter comme une nouvelle surface spatiale.
  • Si l’application voit une surface spatiale avec un ID connu mais avec une nouvelle heure de mise à jour, elle doit la traiter comme une surface spatiale mise à jour.
  • Si l’application ne voit plus une surface spatiale avec un ID connu, elle doit la traiter comme une surface spatiale supprimée.

C’est à chaque application de faire les choix suivants :

  • Pour les nouvelles surfaces spatiales, le maillage doit-il être demandé ?
    • En règle générale, le maillage doit être demandé immédiatement pour les nouvelles surfaces spatiales, ce qui peut fournir de nouvelles informations utiles à l’utilisateur.
    • Toutefois, les nouvelles surfaces spatiales près et devant l’utilisateur doivent être prioritaires et leur maillage doit être demandé en premier.
    • Si le nouveau maillage n’est pas nécessaire, par exemple si l’application a « figé » définitivement ou temporairement son modèle de l’environnement, il ne doit pas être demandé.
  • Pour les surfaces spatiales mises à jour, le maillage doit-il être demandé ?
    • Les surfaces spatiales mises à jour près et devant l’utilisateur doivent être prioritaires et leur maillage doit être demandé en premier.
    • Il peut également être approprié d’accorder une priorité plus élevée aux nouvelles surfaces qu’aux surfaces mises à jour, en particulier pendant l’expérience de balayage.
    • Pour limiter les coûts de traitement, les applications peuvent souhaiter limiter la vitesse à laquelle elles traitent les mises à jour des surfaces spatiales.
    • Il peut être possible de déduire que les modifications apportées à une surface spatiale sont mineures, par exemple si les limites de la surface sont petites, auquel cas la mise à jour peut ne pas être suffisamment importante pour être effectuée.
    • Mises à jour aux surfaces spatiales situées en dehors de la zone d’intérêt actuelle de l’utilisateur peut être entièrement ignorée, mais dans ce cas, il peut être plus efficace de modifier les volumes de délimitation spatiale utilisés par l’observateur de surface.
  • Pour les surfaces spatiales supprimées, le maillage doit-il être ignoré ?
    • En règle générale, le maillage doit être ignoré immédiatement pour les surfaces spatiales supprimées, afin que l’occlusion de l’hologramme reste correcte.
    • Toutefois, si l’application a des raisons de croire qu’une surface spatiale réapparaîtra sous peu (en fonction de la conception de l’expérience utilisateur), il peut être plus efficace de la conserver que de supprimer son maillage et de la recréer ultérieurement.
    • Si l’application crée un modèle à grande échelle de l’environnement de l’utilisateur, il se peut qu’elle ne souhaite pas du tout ignorer les maillages. Il devra toutefois limiter l’utilisation des ressources, éventuellement en mettant en file d’attente les maillages sur le disque à mesure que les surfaces spatiales disparaissent.
    • Certains événements relativement rares lors de la génération de surface spatiale peuvent entraîner le remplacement de surfaces spatiales par de nouvelles surfaces spatiales dans un emplacement similaire, mais avec des ID différents. Par conséquent, les applications qui choisissent de ne pas ignorer une surface supprimée doivent veiller à ne pas se retrouver avec plusieurs maillages de surfaces spatiales hautement superposés couvrant le même emplacement.
  • Le maillage doit-il être ignoré pour toutes les autres surfaces spatiales ?
    • Même si une surface spatiale existe, si elle n’est plus utile à l’expérience de l’utilisateur, elle doit être ignorée. Par exemple, si l’application « remplace » la pièce située de l’autre côté d’une porte par un autre espace virtuel, les surfaces spatiales de cette pièce n’ont plus d’importance.

Voici un exemple de stratégie de mise en cache de maillage, utilisant l’hystérèse spatiale et temporelle :

  • Prenons l’exemple d’une application qui souhaite utiliser un volume spatial intéressant en forme de frustum qui suit le regard de l’utilisateur à mesure qu’il regarde autour de lui et qu’il se déplace.
  • Une surface spatiale peut disparaître temporairement de ce volume simplement parce que l’utilisateur s’éloigne de la surface ou s’éloigne de celle-ci... seulement pour revenir en arrière ou se rapprocher à nouveau un instant plus tard. Dans ce cas, l’abandon et la recréation du maillage pour cette surface représentent de nombreux traitements redondants.
  • Pour réduire le nombre de modifications traitées, l’application utilise deux observateurs de surface spatiale, l’un contenu dans l’autre. Le plus grand volume est sphérique et suit l’utilisateur « paresseusement » ; il ne se déplace que si nécessaire pour s’assurer que son centre se trouve à moins de 2,0 mètres de l’utilisateur.
  • Les maillages de surface spatiales nouveaux et mis à jour sont toujours traités à partir de l’observateur de surface interne plus petit, mais les maillages sont mis en cache jusqu’à ce qu’ils disparaissent de l’observateur de surface externe plus grand. Cela permet à l’application d’éviter de traiter de nombreuses modifications redondantes en raison du déplacement de l’utilisateur local.
  • Étant donné qu’une surface spatiale peut également disparaître temporairement en raison d’une perte de suivi, l’application reporte également l’abandon des surfaces spatiales supprimées pendant la perte de suivi.
  • En général, une application doit évaluer le compromis entre un traitement réduit des mises à jour et une utilisation accrue de la mémoire pour déterminer sa stratégie de mise en cache idéale.

Rendu

Il existe trois principales façons d’utiliser les maillages de mappage spatial pour le rendu :

  • Pour la visualisation de surface
    • Il est souvent utile de visualiser directement les surfaces spatiales. Par exemple, la conversion de « ombres » à partir d’objets sur des surfaces spatiales peut fournir un retour visuel utile à l’utilisateur lorsqu’il place des hologrammes sur des surfaces.
    • Une chose à garder à l’esprit est que les maillages spatiaux sont différents du type de maillages qu’un artiste 3D peut créer. La topologie de triangles ne sera pas aussi « propre » que la topologie créée par l’homme, et le maillage souffrira de diverses erreurs.
    • Pour créer une esthétique visuelle agréable, vous pouvez effectuer un traitement de maillage, par exemple pour remplir des trous ou des normales de surface lisses. Vous pouvez également utiliser un nuanceur pour projeter des textures conçues par un artiste sur votre maillage au lieu de visualiser directement la topologie et les normales de maillage.
  • Pour l’occluding d’hologrammes derrière des surfaces réelles
    • Les surfaces spatiales peuvent être rendues dans une passe de profondeur uniquement, ce qui affecte uniquement la mémoire tampon de profondeur et n’affecte pas les cibles de rendu de couleur.
    • Cela permet à la mémoire tampon de profondeur d’obstruer les hologrammes rendus par la suite derrière des surfaces spatiales. L’occlusion précise des hologrammes améliore le sentiment que les hologrammes existent réellement dans l’espace physique de l’utilisateur.
    • Pour activer le rendu en profondeur uniquement, mettez à jour votre état de fusion pour définir RenderTargetWriteMask sur zéro pour toutes les cibles de rendu de couleur.
  • Pour modifier l’apparence des hologrammes obstrués par des surfaces réelles
    • La géométrie normalement rendue est masquée lorsqu’elle est obstruée. Pour ce faire, définissez la fonction de profondeur dans votre état de gabarit de profondeur sur « inférieur ou égal », ce qui rend la géométrie visible uniquement là où elle est plus proche de l’appareil photo que de toute géométrie précédemment rendue.
    • Toutefois, il peut être utile de garder certaines géométries visibles même lorsqu’elles sont obclées, et de modifier son apparence lorsqu’elle est obclée pour fournir un retour visuel à l’utilisateur. Par exemple, cela permet à l’application de montrer à l’utilisateur l’emplacement d’un objet tout en indiquant clairement qu’il se trouve derrière une surface réelle.
    • Pour ce faire, effectuez le rendu de la géométrie une deuxième fois avec un nuanceur différent qui crée l’apparence « occluded » souhaitée. Avant de restituer la géométrie pour la deuxième fois, apportez deux modifications à l’état de votre gabarit de profondeur. Tout d’abord, définissez la fonction de profondeur sur « supérieur ou égal » afin que la géométrie ne soit visible que si elle est plus loin de la caméra que toutes les géométries précédemment rendues. Ensuite, définissez DepthWriteMask sur zéro, afin que la mémoire tampon de profondeur ne soit pas modifiée (la mémoire tampon de profondeur doit continuer à représenter la profondeur de la géométrie la plus proche de la caméra).

Les performances sont une préoccupation importante lors du rendu des maillages de mappage spatial. Voici quelques techniques de performances de rendu spécifiques au rendu des maillages de mappage spatial :

  • Ajuster la densité du triangle
    • Lorsque vous demandez des maillages de surface spatiales à votre observateur de surface, demandez la plus faible densité de maillages de triangles qui suffit à vos besoins.
    • Il peut être judicieux de faire varier la densité du triangle sur une surface en fonction de la surface, en fonction de la distance de la surface par rapport à l’utilisateur et de sa pertinence pour l’expérience utilisateur.
    • La réduction du nombre de triangles réduit l’utilisation de la mémoire et les coûts de traitement des vertex sur le GPU, bien que cela n’affecte pas les coûts de traitement des pixels.
  • Utiliser l’élimination du frustum
    • L’élimination des frustums ignore les objets dessin qui ne peuvent pas être vus, car ils se trouvent en dehors du frustum d’affichage actuel. Cela réduit les coûts de traitement processeur et GPU.
    • Étant donné que l’abattage est effectué par maillage et que les surfaces spatiales peuvent être volumineuses, la rupture de chaque maillage de surface spatiale en segments plus petits peut entraîner un abattage plus efficace (dans la mesure où moins de triangles hors écran sont rendus). Il y a toutefois un compromis; plus vous avez de maillages, plus vous devez effectuer d’appels de dessin, ce qui peut augmenter les coûts du processeur. Dans un cas extrême, les calculs d’élimination du frustum eux-mêmes pourraient même avoir un coût mesurable du processeur.
  • Ajuster l’ordre de rendu
    • Les surfaces spatiales ont tendance à être volumineuses, car elles représentent l’environnement entier de l’utilisateur qui les entoure. Les coûts de traitement des pixels sur le GPU peuvent être élevés, en particulier dans les cas où il existe plusieurs couches de géométrie visible (y compris les surfaces spatiales et d’autres hologrammes). Dans ce cas, la couche la plus proche de l’utilisateur obludera toutes les couches plus éloignées, de sorte que tout temps passé par GPU à restituer ces couches plus distantes est gaspiller.
    • Pour réduire ce travail redondant sur le GPU, il est utile de rendre les surfaces opaques dans l’ordre avant-arrière (plus proches d’abord, plus éloignés en dernier). Par « opaque », nous entendons les surfaces pour lesquelles DepthWriteMask est défini sur un dans votre état de gabarit de profondeur. Lorsque les surfaces les plus proches sont rendues, elles activent la mémoire tampon de profondeur afin que les surfaces plus distantes soient efficacement ignorées par le processeur de pixels sur le GPU.

Traitement du maillage

Une application peut souhaiter effectuer diverses opérations sur des maillages de surface spatiale en fonction de ses besoins. Les données d’index et de vertex fournies avec chaque maillage de surface spatiale utilisent la même disposition familière que les tampons de vertex et d’index utilisés pour le rendu des maillages de triangles dans toutes les API de rendu modernes. Toutefois, un fait clé à prendre en compte est que les triangles de mappage spatial ont un ordre de remontage avant dans le sens des aiguilles d’une montre. Chaque triangle est représenté par trois index de vertex dans la mémoire tampon d’index du maillage et ces index identifient les sommets du triangle dans le sens des aiguilles d’une montre, lorsque le triangle est affiché du côté avant . Le côté avant (ou extérieur) des maillages de surface spatiale correspond au côté avant (visible) des surfaces réelles.

Les applications ne doivent simplifier le maillage que si la densité de triangle la plus grossière fournie par l’observateur de surface est encore insuffisante : ce travail est coûteux en calcul et est déjà effectué par le runtime pour générer les différents niveaux de détail fournis.

Étant donné que chaque observateur de surface peut fournir plusieurs surfaces spatiales non connectées, certaines applications peuvent souhaiter couper ces maillages de surface spatiale les uns contre les autres, puis les compresser ensemble. En général, l’étape de découpage est nécessaire, car les maillages de surface spatiales à proximité se chevauchent souvent légèrement.

Raycasting et collision

Pour qu’une API physique (telle qu’Havok) fournisse une application avec des fonctionnalités de raycasting et de collision pour les surfaces spatiales, l’application doit fournir des maillages de surface spatiale à l’API physique. Les maillages utilisés pour la physique ont souvent les propriétés suivantes :

  • Ils ne contiennent que de petits nombres de triangles. Les opérations physiques sont plus gourmandes en calcul que les opérations de rendu.
  • Ils sont « étanches à l’eau ». Les surfaces destinées à être solides ne doivent pas comporter de petits trous; même des trous trop petits pour être visibles peuvent causer des problèmes.
  • Ils sont convertis en coques convexes. Les coques convexes ont peu de polygones et sont exemptes de trous, et elles sont beaucoup plus efficaces sur le plan informatique à traiter que les maillages de triangle bruts.

Lorsque vous effectuez des raycasts sur des surfaces spatiales, gardez à l’esprit que ces surfaces sont souvent complexes, des formes encombrées pleines de petits détails désordonnés - tout comme votre bureau! Cela signifie qu’un seul raycast est souvent insuffisant pour vous donner suffisamment d’informations sur la forme de la surface et la forme de l’espace vide près de celle-ci. Il est généralement judicieux d’effectuer de nombreux raycasts dans une petite zone et d’utiliser les résultats agrégés pour obtenir une compréhension plus fiable de la surface. Par exemple, l’utilisation de la moyenne de 10 raycasts pour guider la position de l’hologramme sur une surface génère un résultat beaucoup plus lisse et moins « nerveux » que l’utilisation d’un seul raycast.

Toutefois, gardez à l’esprit que chaque raycast peut avoir un coût de calcul élevé. Selon votre scénario d’utilisation, vous devez faire un compromis entre le coût de calcul des raycasts supplémentaires (effectué à chaque trame) et le coût de calcul du traitement du maillage pour lisser et supprimer les trous dans les surfaces spatiales (effectué lorsque les maillages spatiaux sont mis à jour).

Expérience d’analyse de l’environnement

Chaque application qui utilise le mappage spatial doit envisager de fournir une « expérience d’analyse » ; processus par lequel l’application guide l’utilisateur pour analyser les surfaces nécessaires au bon fonctionnement de l’application.

Exemple d’analyse
Exemple d’analyse

La nature de cette expérience d’analyse peut varier considérablement en fonction des besoins de chaque application, mais deux principes principaux doivent guider sa conception.

Tout d’abord, la communication claire avec l’utilisateur est la principale préoccupation. L’utilisateur doit toujours savoir si les exigences de l’application sont remplies. Lorsqu’ils ne sont pas respectés, l’utilisateur doit immédiatement comprendre pourquoi il en est ainsi et il doit être rapidement amené à prendre les mesures appropriées.

Deuxièmement, les applications doivent tenter de trouver un équilibre entre efficacité et fiabilité. Lorsqu’il est possible de le faire de manière fiable, les applications doivent analyser automatiquement les données de mappage spatial pour faire gagner du temps à l’utilisateur. Lorsqu’il n’est pas possible de le faire de manière fiable, les applications doivent à la place permettre à l’utilisateur de fournir rapidement à l’application les informations supplémentaires dont elle a besoin.

Pour faciliter la conception de l’expérience d’analyse appropriée, tenez compte des possibilités suivantes applicables à votre application :

  • Aucune expérience d’analyse

    • Une application peut fonctionner parfaitement sans expérience d’analyse guidée ; il en apprendra davantage sur les surfaces qui sont observées au cours du mouvement naturel de l’utilisateur.
    • Par exemple, une application qui permet à l’utilisateur de dessiner sur des surfaces avec de la peinture holographique par pulvérisation ne nécessite que la connaissance des surfaces actuellement visibles par l’utilisateur.
    • L’environnement peut être déjà analysé s’il s’agit d’un environnement dans lequel l’utilisateur a déjà passé beaucoup de temps à utiliser HoloLens.
    • Gardez toutefois à l’esprit que la caméra utilisée par le mappage spatial ne peut voir que 3,1 m devant l’utilisateur, de sorte que le mappage spatial n’est pas au courant des surfaces plus lointaines, sauf si l’utilisateur les a observées de plus près dans le passé.
    • Pour que l’utilisateur comprenne quelles surfaces ont été analysées, l’application doit fournir un retour visuel à cet effet. Par exemple, le fait de projeter des ombres virtuelles sur des surfaces numérisées peut aider l’utilisateur à placer des hologrammes sur ces surfaces.
    • Dans ce cas, les volumes englobants de l’observateur de surface spatiale doivent être mis à jour chaque image vers un système de coordonnées spatiales verrouillée par le corps, afin qu’ils suivent l’utilisateur.
  • Trouver un emplacement approprié

    • Une application peut être conçue pour être utilisée dans un emplacement avec des exigences spécifiques.
    • Par exemple, l’application peut nécessiter une zone vide autour de l’utilisateur afin qu’il puisse pratiquer en toute sécurité le kung-fu holographique.
    • Les applications doivent communiquer les exigences spécifiques à l’utilisateur à l’avance et les renforcer avec des commentaires visuels clairs.
    • Dans cet exemple, l’application doit visualiser l’étendue de la zone vide requise et mettre en surbrillance visuellement la présence de tous les objets indésirables dans cette zone.
    • Dans ce cas, les volumes englobants de l’observateur de surface spatiale doivent utiliser un système de coordonnées spatiales verrouillé dans le monde à l’emplacement choisi.
  • Trouver une configuration appropriée des surfaces

    • Une application peut nécessiter une configuration spécifique de surfaces, par exemple deux grands murs plats opposés pour créer une salle holographique de miroirs.
    • Dans ce cas, l’application doit analyser les surfaces fournies par le mappage spatial pour détecter les surfaces appropriées et diriger l’utilisateur vers celles-ci.
    • L’utilisateur doit disposer d’une option de secours si l’analyse de la surface de l’application n’est pas fiable. Par exemple, si l’application identifie incorrectement une porte comme un mur plat, l’utilisateur a besoin d’un moyen simple pour corriger cette erreur.
  • Analyser une partie de l’environnement

    • Une application peut souhaiter ne capturer qu’une partie de l’environnement, comme indiqué par l’utilisateur.
    • Par exemple, l’application scanne une partie d’une pièce afin que l’utilisateur puisse publier une annonce classifiée holographique pour les meubles qu’il souhaite vendre.
    • Dans ce cas, l’application doit capturer les données de mappage spatial dans les régions observées par l’utilisateur pendant son analyse.
  • Analyser toute la pièce

    • Une application peut nécessiter une analyse de toutes les surfaces de la pièce actuelle, y compris celles situées derrière l’utilisateur.
    • Par exemple, un jeu peut mettre l’utilisateur dans le rôle de Gulliver, assiégé par des centaines de minuscules Lilliputiens qui approchent de toutes les directions.
    • Dans ce cas, l’application doit déterminer le nombre de surfaces de la pièce actuelle qui ont déjà été analysées et diriger le regard de l’utilisateur pour combler les lacunes importantes.
    • La clé de ce processus consiste à fournir des commentaires visuels qui indiquent clairement à l’utilisateur quelles surfaces n’ont pas encore été analysées. L’application peut, par exemple, utiliser le brouillard basé sur la distance pour mettre en évidence visuellement des régions qui ne sont pas couvertes par des surfaces de mappage spatial.
  • Prendre un instantané initial de l’environnement

    • Une application peut souhaiter ignorer toutes les modifications apportées à l’environnement après avoir pris un « instantané » initial.
    • Cela peut être approprié pour éviter l’interruption des données créées par l’utilisateur qui sont étroitement couplées à l’état initial de l’environnement.
    • Dans ce cas, l’application doit effectuer une copie des données de mappage spatial dans leur état initial une fois l’analyse terminée.
    • Les applications doivent continuer à recevoir des mises à jour des données de mappage spatial si les hologrammes doivent toujours être correctement obclés par l’environnement.
    • Les mises à jour continues des données de mappage spatial permettent également de visualiser toutes les modifications qui se sont produites, en clarifiant à l’utilisateur les différences entre les états antérieurs et actuels de l’environnement.
  • Prendre des instantanés de l’environnement initiés par l’utilisateur

    • Une application ne peut souhaiter répondre aux changements environnementaux que lorsque l’utilisateur l’indique.
    • Par exemple, l’utilisateur peut créer plusieurs « statues » 3D d’un ami en capturant ses poses à différents moments.
  • Autoriser l’utilisateur à modifier l’environnement

    • Une application peut être conçue pour répondre en temps réel à toutes les modifications apportées dans l’environnement de l’utilisateur.
    • Par exemple, l’utilisateur dessinant un rideau peut déclencher un « changement de scène » pour une lecture holographique se déroulant de l’autre côté.
  • Guider l’utilisateur pour éviter les erreurs dans les données de mappage spatial

    • Une application peut souhaiter fournir des conseils à l’utilisateur pendant qu’il analyse son environnement.
    • Cela peut aider l’utilisateur à éviter certains types d’erreurs dans les données de mappage spatial, par exemple en restant loin des fenêtres ensoleillées ou des miroirs.

Un détail supplémentaire à prendre en compte est que la « plage » de données de mappage spatial n’est pas illimitée. Bien que le mappage spatial crée une base de données permanente de grands espaces, il met ces données uniquement à la disposition des applications dans une « bulle » de taille limitée autour de l’utilisateur. Si vous commencez au début d’un long couloir et marchez assez loin du début, les surfaces spatiales de retour au début disparaîtront. Vous pouvez atténuer ce problème en mettant en cache ces surfaces dans votre application une fois qu’elles ont disparu des données de mappage spatiale disponibles.

Traitement du maillage

Cela peut aider à détecter les types d’erreurs courants dans les surfaces et à filtrer, supprimer ou modifier les données de mappage spatial en fonction des besoins.

Gardez à l’esprit que les données de mappage spatial sont destinées à être aussi fidèles que possible aux surfaces réelles, de sorte que tout traitement que vous appliquez risque de déplacer vos surfaces plus loin de la « vérité ».

Voici quelques exemples de différents types de traitement de maillage que vous pouvez trouver utiles :

  • Remplissage des trous

    • Si un petit objet fait d’un matériau sombre ne parvient pas à scanner, il laissera un trou dans la surface environnante.
    • Les trous affectent l’occlusion : les hologrammes peuvent être vus « à travers » un trou dans une surface du monde réel prétendument opaque.
    • Les trous affectent les raycasts : si vous utilisez des raycasts pour aider les utilisateurs à interagir avec les surfaces, il peut être indésirable que ces rayons passent à travers les trous. L’une des mesures d’atténuation consiste à utiliser un ensemble de plusieurs raycasts couvrant une région de taille appropriée. Cela vous permettra de filtrer les résultats « hors norme », de sorte que même si un raycast traverse un petit trou, le résultat agrégé reste valide. Toutefois, cette approche a un coût de calcul.
    • Les trous affectent les collisions physiques : un objet contrôlé par la simulation physique peut tomber à travers un trou dans le plancher et se perdre.
    • Il est possible de remplir de tels trous de manière algorithmique dans le maillage de surface. Toutefois, vous devez paramétrer votre algorithme afin que les « trous réels » tels que les fenêtres et les portes ne soient pas remplis. Il peut être difficile de différencier de manière fiable les « trous réels » des « trous imaginaires », vous devrez donc expérimenter différentes heuristiques telles que « taille » et « forme limite ».
  • Suppression de l’hallucination

    • Les reflets, les lumières vives et les objets en mouvement peuvent laisser de petites « hallucinations » persistantes flottant dans les airs.
    • Les hallucinations affectent l’occlusion : les hallucinations peuvent devenir visibles sous forme de formes sombres se déplaçant devant et obludant d’autres hologrammes.
    • Les hallucinations affectent les diffusions de rayons : si vous utilisez des raycasts pour aider les utilisateurs à interagir avec les surfaces, ces rayons peuvent frapper une hallucination au lieu de la surface derrière elle. Comme avec les trous, l’une des mesures d’atténuation consiste à utiliser de nombreux raycasts au lieu d’une seule diffusion de rayons, mais là encore, cela aura un coût de calcul.
    • Les hallucinations affectent les collisions physiques : un objet contrôlé par la simulation physique peut se bloquer contre une hallucination et être incapable de se déplacer dans une zone d’espace apparemment claire.
    • Il est possible de filtrer ces hallucinations à partir du maillage de surface. Toutefois, comme avec les trous, vous devrez régler votre algorithme afin que les objets de petite taille tels que les lampes et les poignées de porte ne soient pas enlevés.
  • Adoucissage

    • Le mappage spatial peut renvoyer des surfaces qui semblent rugueuses ou « bruyantes » par rapport à leurs équivalents réels.
    • La douceur affecte les collisions physiques : si le sol est rugueux, une balle de golf simulée physiquement ne peut pas rouler en douceur sur elle en ligne droite.
    • La lissage affecte le rendu : si une surface est visualisées directement, les normales de surface rugueuses peuvent affecter son apparence et perturber une apparence « propre ». Il est possible d’atténuer ce problème en utilisant l’éclairage et les textures appropriés dans le nuanceur utilisé pour restituer la surface.
    • Il est possible de lisser la rugosité dans un maillage de surface. Toutefois, cela peut pousser la surface plus loin de la surface réelle correspondante. Il est important de maintenir une correspondance étroite pour produire une occlusion hologramme précise et permettre aux utilisateurs d’obtenir des interactions précises et prévisibles avec les surfaces holographiques.
    • Si seule une modification cosmétique est requise, il peut être suffisant pour lisser les normales de vertex sans modifier la position des vertex.
  • Recherche d’avion

    • Il existe de nombreuses formes d’analyse qu’une application peut souhaiter effectuer sur les surfaces fournies par le mappage spatial.
    • Un exemple simple est la « recherche de plan » ; identification des régions délimitées, principalement planaires des surfaces.
    • Les régions planaires peuvent être utilisées comme surfaces de travail holographiques, régions où le contenu holographique peut être placé automatiquement par l’application.
    • Les régions planaires peuvent limiter l’interface utilisateur pour guider les utilisateurs à interagir avec les surfaces qui répondent le mieux à leurs besoins.
    • Les régions planaires peuvent être utilisées comme dans le monde réel, pour des équivalents holographiques à des objets fonctionnels tels que des écrans LCD, des tableaux ou des tableaux blancs.
    • Les régions planaires peuvent définir des zones de jeu, formant la base des niveaux de jeu vidéo.
    • Les régions planaires peuvent aider les agents virtuels à naviguer dans le monde réel, en identifiant les zones d’étage sur lesquelles des personnes réelles sont susceptibles de marcher.

Prototypage et débogage

Outils utiles

  • L’émulateur HoloLens peut être utilisé pour développer des applications à l’aide du mappage spatial sans accès à un HoloLens physique. Il vous permet de simuler une session en direct sur un HoloLens dans un environnement réaliste, avec toutes les données que votre application consomme normalement, y compris le mouvement HoloLens, les systèmes de coordonnées spatiales et les maillages de mappage spatial. Cela peut être utilisé pour fournir une entrée fiable et reproductible, ce qui peut être utile pour le débogage des problèmes et l’évaluation des modifications apportées à votre code.
  • Pour reproduire un scénario, capturez les données de mappage spatial sur le réseau à partir d’un HoloLens actif, puis enregistrez-les sur le disque et réutilisez-les dans des sessions de débogage ultérieures.
  • La vue 3D du portail d’appareil Windows permet d’afficher toutes les surfaces spatiales actuellement disponibles via le système de mappage spatial. Cela fournit une base de comparaison pour les surfaces spatiales à l’intérieur de votre application ; par exemple, vous pouvez facilement déterminer si des surfaces spatiales sont manquantes ou affichées au mauvais endroit.

Conseils généraux sur le prototypage

  • Étant donné que les erreurs dans les données de mappage spatial peuvent affecter fortement l’expérience de votre utilisateur, nous vous recommandons de tester votre application dans un large éventail d’environnements.
  • Ne vous retrouvez pas dans l’habitude de toujours tester au même endroit, par exemple à votre bureau. Veillez à tester sur différentes surfaces de différentes positions, formes, tailles et matériaux.
  • De même, bien que les données synthétiques ou enregistrées puissent être utiles pour le débogage, ne deviennent pas trop dépendantes des mêmes quelques cas de test. Cela peut retarder la recherche de problèmes importants que des tests plus variés auraient détectés plus tôt.
  • Il est judicieux d’effectuer des tests avec des utilisateurs réels (et idéalement non associés), car ils peuvent ne pas utiliser HoloLens ou votre application exactement de la même façon que vous. En fait, il peut vous surprendre à quel point le comportement, les connaissances et les hypothèses divergents des gens peuvent être!

Résolution des problèmes

  • Pour que les maillages de surface soient correctement orientés, chaque GameObject doit être actif avant d’être envoyé au SurfaceObserver pour que son maillage soit construit. Sinon, les maillages s’affichent dans votre espace, mais pivotent à des angles étranges.
  • Le GameObject qui exécute le script qui communique avec le SurfaceObserver doit être défini sur l’origine. Sinon, tous les GameObjects que vous créez et envoyez au SurfaceObserver pour que leurs maillages aient été construits auront un décalage égal au décalage de l’objet jeu parent. Cela peut faire apparaître vos maillages à plusieurs mètres, ce qui rend difficile le débogage de ce qui se passe.

Voir aussi