Opérations de réajustement
Les opérations de réajustement dans World Locking Tools sont effectuées lorsque le système détermine qu’un repositionnement de certains objets dans la scène permettrait de mieux inscrire ces objets avec leurs ancres dans le monde physique.
Cette section tentera d’apporter un éclairage supplémentaire sur les situations qui mènent aux opérations de réajustement et sur les mécanismes des opérations elles-mêmes.
Il est important de souligner ici que les opérations de réajustement se produisent rarement. Les tolérances d’erreur par défaut déclenchant une opération de refixation sont personnalisables par l’application, mais normalement, les environnements de réalité mixte ne déclenchent des opérations de refixation que dans des circonstances extraordinaires. Les conditions qui peuvent contribuer à la nécessité d’une refixation sont les suivantes :
- Perte de suivi en raison d’un environnement médiocre.
- Mouvement rapide de la tête influençant le balayage de l’environnement.
- Environnements dynamiques.
- Fermeture de boucle (c’est-à-dire, accumulation d’erreurs de suivi sur un chemin giratoire vers un emplacement visité précédemment).
La cause première de ces problèmes est un mauvais suivi ; en d’autres termes, des erreurs de suivi. Avec des environnements raisonnables produisant un suivi raisonnablement bon, et surtout après un balayage initial de l’espace, les opérations de réajustement seront particulièrement rares.
Fusion de fragments
De nombreuses conditions peuvent entraîner l’existence de plusieurs fragments, la cause la plus courante étant une perte temporaire de suivi. Les fragments sont définis comme des collections d’objets partageant un espace de coordonnées commun, mais où l’espace de coordonnées d’un fragment est situé de manière indéterminée par rapport à un autre fragment.
Lorsqu’il y a suffisamment de nouvelles données de capteur reçues et traitées, et que le contenu de deux fragments précédemment non liés peut être positionné correctement l’un par rapport à l’autre dans le même espace, une fusion de fragment peut être effectuée.
Le nouvel espace de coordonnées dans lequel le contenu des deux fragments (ou plus) est fusionné est arbitraire. Nous mentionnons ici que l’espace de coordonnées final sera celui de l’un des espaces, ce qui n’est pertinent que parce que cela signifie que les coordonnées de tous les fragments fusionnés, sauf un, le fragment de destination, devront être ajustées. Le contenu du fragment choisi comme cible finale de la fusion n’est pas affecté.
Une transformation d’ajustement est calculée par le système pour chaque fragment source fusionné. L’AdjustLocationDelegate pour chaque point d’attache dans ces fragments sera appelé avec la transformation d’ajustement. Là encore, les points d’attache du fragment de destination ne sont pas affectés, et leurs AdjustLocationDelegate ne seront pas appelés.
Le scénario de deux pièces reliées par un couloir sombre dans la description des fragments est un exemple d’une telle situation. Pendant la phase initiale, les deux fragments (salles) ont été analysés, mais aucune information n’est disponible concernant les positions relatives des deux fragments. Par conséquent, le système de coordonnées dans lequel le contenu de chaque fragment est placé est arbitraire, à condition qu’il soit constant sur tous les objets de cette salle. Par exemple, le contenu de chaque pièce peut être dans un système de coordonnées avec son origine dans le coin sud-ouest de cette salle. Les coordonnées de deux objets dans un même fragment indiquent la position des deux objets l’un par rapport à l’autre, mais les coordonnées de deux objets dans deux fragments différents ne disent rien sur leur position relative.
Lorsque davantage d’informations sont acquises, il est alors possible d’ajuster les coordonnées du contenu du second fragment afin que les coordonnées de son contenu soient significatives par rapport aux objets du premier fragment. Par exemple, la lumière du couloir peut être allumée et le couloir traversé, comblant ainsi l’écart entre les deux fragments. Si les coordonnées de tous les objets des deux pièces sont ajustées pour se trouver dans le même espace de coordonnées cohérent, il n’y a plus de distinction réelle entre les deux fragments, et on peut donc considérer que leurs contenus appartiennent tous à un même fragment commun.
Cette opération de réduction de plusieurs fragments en un fragment unique est une opération de fusion.
Il est important de noter ici que pour les objets Unity normaux placés dans la scène dans l’espace avec verrouillage universel, l’opération de fusion n’aura aucun effet. Le déplacement d’objets à partir d’opérations de réajustement ne se produit que par le biais de points d’attache.
Refiger les opérations
Une autre situation se produit lorsque les positions des ancres sont affinées au fil du temps. Il devient évident qu’une transformation de rotation/décalage n’est plus adéquate pour compenser la différence entre les positions d’ancre brutes initiales et les positions améliorées plus récentes dans le monde physique. Gardez à l’esprit que les ancres se déplacent constamment les unes par rapport aux autres dans l’espace Spongy. Toutefois, les points d’attache dérivés de ces ancres sont fixes dans l’espace universel verrouillé.
Lorsque le système reconnaît que les points d’attache qu’il gère pourraient être mieux enregistrés avec le monde physique en raison des mises à jour des positions d’ancre, il a alors une autre opportunité pour un événement de correction. Cet ajustement des positions des points d’attache pour refléter les nouvelles données du capteur est connu sous le nom d’opération de refixation. Alors que dans une opération de fusion, les contenus d’un fragment sont tous ajustés par une seule transformation pour fusionner les espaces de coordonnées de deux fragments en un seul espace unifié, une refixation ajuste chaque point d’attache individuellement sur la base des positions actualisées des ancres qui l’influencent.
Comme pour l’opération de fusion, chaque point d’attache est informé de sa transformation d’ajustement calculée via son AdjustLocationDelegate.
Si les conditions sont correctes, la refixation peut également effectuer une opération de fusion. Cette fusion sera considérée comme une partie implicite de la refixation : Aucun événement distinct ne sera généré pour la fusion, et la transformation d’ajustement fournie dans le cadre de la refixation comprendra à la fois l’ajustement individuel dû au mouvement de l’ancre et l’ajustement du fragment dû à la fusion.
Réaction aux événements de refixation
Lors de la fusion ou refixation, la réaction aux événements refixation dépend de l’application. Plus précisément, cela dépend de chacun des gestionnaires de points d’attache, car différents types d’objets peuvent réagir différemment. En général, les objets influencés par le point d’attache sont déplacés par la transformation d’ajustement via leur GameObject.transform. Le mouvement peut être implémenté par un autre mécanisme, tel que le déplacement manuel des sommets. Il peut même être avantageux pour certaines applications d’abandonner les objets affectés par une fusion et de commencer un nouveau cycle de création.
Le but est que World Locking Tools n’ait aucune dépendance quant à la façon dont l’application réagit ou non aux opérations de réajustement. Cela dépend entièrement des besoins du développeur de l’application.
Le mécanisme privilégié de notification et de réaction aux opérations de refixation est le point d’attache. Plus de détails et d’options sont abordés dans cet article.