Partager via


Points d’attache

Tout d’abord, World Locking Tools offre un système de coordonnées universellement stable : l’espace universel verrouillé. Cet espace reste aussi fixe que possible par rapport au monde physique. Et les objets dans l’espace universel verrouillé bénéficient de capacités nécessitant un tel cadre de référence stable, comme le maintien du placement relatif par rapport aux autres objets virtuels, la simulation des lois de la physique naturelle, la cinématique et d’autres techniques d’animation.

En fait, selon les besoins de l’application, l’espace universel verrouillé peut suffire pour tout ou partie du contenu de la scène.

Mais si l’espace verrouillé reste aligné de manière optimale avec l’espace physique, il existe des situations, qui seront décrites plus loin, dans lesquelles il n’est pas possible que plusieurs points de l’espace verrouillé restent à la fois fixes dans leur espace de coordonnées commun et fixes par rapport aux points de référence du monde physique.

Pour un exemple trivial mais éclairant, supposons que le capteur associe une ancre à la position (3,0,0) et une autre à la position (-3,0,0). Plus tard, lors du traitement des affinements des capteurs, il est établi que les deux coordonnées auraient dû être (3,0,0) et (-2,0,0). Il n’y a évidemment pas de rotations ou de décalages qui peuvent être appliqués à la caméra, qui transforme une distance de six mètres entre les deux ancres en un décalage de cinq mètres.

À l’aide du système d’ancres spatiales d’Unity, les deux ancres se déplacent simplement vers leurs positions nouvellement recherchées.

Toutefois, World Locking Tools garantit que dans l’espace universel verrouillé, les objets qui ne bougent pas ne se déplacent « presque » jamais. Et en fait, tout déplacement est du ressort de l’application propriétaire.

Une autre condition « anormale » courante est une perte de suivi. Lorsque le suivi est perdu dans un environnement (par exemple, une salle) et récupéré dans un autre environnement, il n’y a pas d’informations liant les deux espaces. Les coordonnées d’un espace ne sont pas significatives par rapport aux coordonnées de l’autre. Le paradigme de point d’attache permet à l’application de gérer correctement la phase initiale lorsque les informations spatiales sur l’ancien espace sont inconnues (par exemple, en masquant les objets dans cet ancien espace), ainsi que la récupération lorsque la relation spatiale entre les deux espaces devient connue.

Vous trouverez plus d’informations sur ces conditions spéciales et les opérations de réajustement que WLT effectue pour les gérer. La discussion ici est axée sur le contrat entre WLT et l’application sur la résolution fluide de ces conditions.

Les points d’attache sont la codification de ce contrat entre World Locking Tools et l’application. Une application crée et positionne des points de connexion à l’aide des API World Locking Tools. Lorsqu’une correction de la position d’un point de fixation est déterminée par une opération de réajustement, l’application est notifiée par un rappel de la nouvelle position dans l’espace mondial verrouillé qui maintiendra le point de fixation à son ancienne position dans l’espace physique.

Voici quelques scénarios dans lesquels les points d’attache World Locking Tools peuvent être la solution :

  • Il est plus important de rester fixe par rapport aux caractéristiques du monde physique par rapport aux autres objets virtuels.
  • Les objets sont placés dans le monde au moment de l’exécution plutôt que dans Unity au moment de la conception, et il peut être important de rapprocher les positions relatives séparées par des interruptions de suivi (voir la discussion sur les fragments).
  • Il est important de gérer la visibilité d’un objet en fonction de la validité de son positionnement dans l’espace physique.

Utilisation des points d’attache

L’utilisation de points d’attache est relativement simple.

Responsabilités du client

Pour chaque point d’attachement requis, le client doit :

  1. Demander des points d’attache au système. Voir CreateAttachmentPoint
  2. Supprimer les points d’attache qui ne sont plus nécessaires. Voir ReleaseAttachmentPoint
  3. Informer le système de la position initiale et du mouvement du point d’attache. Consultez CreateAttachmentPoint, MoveAttachmentPoint et TeleportAttachmentPoint
  4. Gérer les événements d’opération de réajustement. Voir ci-dessous.

Responsabilités de World Locking Tools

World Locking Tools notifiera l’application, pour chaque point d’attache affecté, lorsque l’une des conditions suivantes se présente :

  1. La validité des modifications de suivi du monde physique du point d’attache.
  2. Ses coordonnées dans l’espace verrouillé du monde changent en raison d’une opération de réajustement, qui peut être une fusion de fragment ou une refixation.

Ces notifications sont diffusées via des délégués que l’application transmet au WorldLockingManager à la création du point d’attache.

La meilleure façon de gérer ces notifications appartient à l’application, car chacune aura ses propres considérations. Des exemples de gestionnaires, qui sont utilisés en interne et peuvent être utilisés tels quels ou servir de point de départ à des implémentations personnalisées, sont fournis.

Exemples d’implémentations

Pour un point d’attache qui doit rester fixe dans le monde physique et masquer son contenu quand son suivi n’est pas valide, AdjusterFixed implémente AdjustStateDelegate avec son membre HandleAdjustState, et AdjustLocationDelegate avec son membre HandleAdjustLocation. Un composant similaire pour déplacer des objets se trouve dans AdjusterMoving.

Il est à noter que la fourniture de ces délégués est facultative, et en fait, des réactions aux modifications d’état et d’emplacement peuvent être implémentées en fonction de l’interrogation plutôt que des événements. Toutefois, à moins que leur utilisation ne soit impossible en raison des spécificités de l’application, le système basé sur les événements qui utilise des délégués constitue une implémentation bien plus efficace.

Nous vous recommandons de commencer par le composant AdjusterFixed (ou le très similaire AdjusterMoving) et de modifier les gestionnaires HandleAdjustLocation et HandleAdjustState en fonction des besoins de vos applications.

Voir aussi