Stabilisation hologramme — MRTK2

Performances

Pour que la plateforme de réalité mixte sous-jacente et l’appareil produisent les meilleurs résultats, il est important d’obtenir des fréquences d’images performantes. La fréquence d’images cible (par exemple, 60 FPS ou 90 FPS) varie d’une plateforme et d’un appareil à l’autre. Toutefois, les applications de réalité mixte auront des hologrammes stables ainsi qu’un suivi efficace de la tête, un suivi des mains et bien plus encore.

Suivi de l’environnement

Le rendu holographique stable repose fortement sur le suivi de la pose de la tête par la plateforme & appareil. Unity rendra la scène chaque image de la pose de la caméra estimée et fournie par la plateforme sous-jacente. Si ce suivi ne suit pas correctement le mouvement réel de la tête, les hologrammes apparaîtront visuellement incorrects. Cela est particulièrement évident et important pour les appareils de réalité augmentée comme HoloLens, où les utilisateurs peuvent associer des hologrammes virtuels au monde réel. Les performances sont importantes pour un suivi de la tête fiable, mais il peut également y avoir d’autres fonctionnalités importantes. Les types d’éléments d’environnement ayant un impact sur l’expérience utilisateur dépendent des spécificités de la plateforme ciblée.

Windows Mixed Reality

La plateforme Windows Mixed Reality fournit du matériel de référence pour stabiliser les hologrammes sur la plateforme. Il existe cependant quelques outils clés que les développeurs peuvent utiliser pour améliorer l’expérience visuelle de l’hologramme pour les utilisateurs.

Partage de mémoire tampon de profondeur

Les développeurs Unity ont la possibilité de partager la mémoire tampon de profondeur de l’application avec la plateforme. Cela fournit des informations, lorsqu’il existe des hologrammes pour une image actuelle, que la plateforme peut utiliser pour stabiliser les hologrammes via un processus assisté par le matériel appelé Late-Stage Reprojection.

Reprojection en phase tardive

À la fin du rendu d’un cadre, la plateforme Windows Mixed Reality prend la couleur & cibles de rendu de profondeur produites par l’application et transforme la sortie finale de l’écran pour tenir compte de tout léger mouvement de la tête depuis la dernière prédiction de pose de la tête. L’exécution de la boucle de jeu d’une application prend du temps. Par exemple, à 60 FPS, cela signifie que l’application prend environ 16,667 ms pour afficher un frame. Même si cela peut sembler être un temps minuscule, la position et l’orientation de la tête de l’utilisateur changeront, ce qui entraînera de nouvelles matrices de projection pour l’appareil photo dans le rendu. La reprojection en phase tardive transforme les pixels de l’image finale pour tenir compte de cette nouvelle perspective.

LSR par pixel et plan de stabilisation

Selon le point de terminaison de l’appareil et la version du système d’exploitation s’exécutant sur un appareil Windows Mixed Reality, l’algorithme de reprojection Late-Stage est effectué par pixel ou via un plan de stabilisation.

Par pixel basé sur la profondeur

La reprojection basée sur la profondeur par pixel implique l’utilisation de la mémoire tampon de profondeur pour modifier la sortie de l’image par pixel et ainsi stabiliser les hologrammes à différentes distances. Par exemple, une sphère située à 1 m peut se trouver devant un pilier qui se trouve à 10 m de distance. Les pixels représentant la sphère auront une transformation différente des pixels éloignés représentant le pilier si l’utilisateur a légèrement incliné sa tête. La reprojection par pixel prend en compte cette différence de distance à chaque pixel pour une reprojection plus précise.

Plan de stabilisation

S’il n’est pas possible de créer une mémoire tampon de profondeur précise à partager avec la plateforme, une autre forme de LSR utilise un plan de stabilisation. Tous les hologrammes d’une scène recevront une certaine stabilisation, mais les hologrammes qui se trouve dans le plan souhaité recevront la stabilisation matérielle maximale. Le point et la normale du plan peuvent être fournis à la plateforme via l’API HolographicSettings.SetFocusPointForFramefournie par Unity.

Format de mémoire tampon de profondeur

Si vous ciblez HoloLens pour le développement, il est vivement recommandé d’utiliser le format de mémoire tampon de profondeur 16 bits par rapport à 24 bits. Cela permet d’économiser considérablement sur les performances, même si les valeurs de profondeur auront moins de précision. Pour compenser la plus faible précision et éviter la lutte z, il est recommandé de réduire le plan d’agrafe de distance à partir de la valeur par défaut de 1 000 m définie par Unity.

Notes

Si vous utilisez le format de profondeur 16 bits, les effets requis de la mémoire tampon de gabarit ne fonctionnent pas, car Unity ne crée pas de mémoire tampon de gabarit dans ce paramètre. La sélection du format de profondeur 24 bits à l’inverse crée généralement une mémoire tampon de gabarit 8 bits, le cas échéant sur la plateforme graphique du point de terminaison.

Partage de mémoire tampon de profondeur dans Unity

Pour utiliser la LSR basée sur la profondeur, les développeurs doivent effectuer deux étapes importantes.

  1. Sous Modifier>les paramètres> du projetLecteur>XR Paramètres>de réalité virtuelle SDK Activer le partage de mémoire tampon> de profondeur
    1. Si vous ciblez HoloLens, il est également recommandé de sélectionner le format de profondeur 16 bits .
  2. Lors du rendu de la couleur à l’écran, la profondeur de rendu est également

Les GameObjects opaques dans Unity écrivent généralement automatiquement en profondeur. Toutefois, les objets texte transparents & n’écrivent généralement pas en profondeur par défaut. Si vous utilisez mrTK Standard Shader ou Text Mesh Pro, cela peut être facilement corrigé.

Notes

Pour déterminer rapidement quels objets d’une scène n’écrivent pas visuellement dans la mémoire tampon de profondeur, vous pouvez utiliser l’utilitaire Render Depth Buffer sous les paramètres de l’éditeur dans le profil de configuration MRTK.

Nuanceur MRTK Standard transparent

Pour les matériaux transparents à l’aide du nuanceur MRTK Standard, sélectionnez le matériau pour l’afficher dans la fenêtre Inspecteur . Cliquez ensuite sur le bouton Corriger maintenant pour convertir le matériau à écrire en profondeur (par exemple, Z-Write On).

Avant

Mémoire tampon de profondeur avant de corriger le nuanceur STANDARD MRTK

Après

Nuanceur standard MRTK fixe de mémoire tampon de profondeur

Text Mesh Pro

Pour Objets Text Mesh Pro, sélectionnez l’objet GameObject TMP pour l’afficher dans l’inspecteur. Sous le composant matériau, basculez le nuanceur pour le matériau affecté afin d’utiliser le nuanceur MRTK TextMeshPro.

Correctif de la mémoire tampon de profondeur pro de Maillage de texte

Nuanceur personnalisé

Si vous écrivez un nuanceur personnalisé, ajoutez l’indicateur ZWrite en haut de la définition de bloc pass pour configurer le nuanceur pour écrire dans la mémoire tampon de profondeur.

Shader "Custom/MyShader"
{
    SubShader
    {
        Pass
        {
            ...
            ZWrite On
            ...
        }
    }
}
Stockages opaques

Si les méthodes ci-dessus ne fonctionnent pas pour un scénario donné (c’est-à-dire à l’aide de l’interface utilisateur Unity), il est possible d’écrire un autre objet dans la mémoire tampon de profondeur. Un exemple courant est l’utilisation d’Unity UI Text sur un panneau flottant dans une scène. En rendant le panneau opaque ou au moins en écrivant en profondeur, le texte & le panneau sera stabilisé par la plateforme, car leurs valeurs z sont si proches les unes des autres.

WorldAnchors (HoloLens)

En plus de s’assurer que les configurations correctes sont respectées pour garantir la stabilité visuelle, il est important de s’assurer que les hologrammes restent stables à leurs emplacements physiques corrects. Pour informer la plateforme sur les emplacements importants dans un espace physique, les développeurs peuvent tirer parti de WorldAnchors sur GameObjects qui doivent rester au même endroit. Un WorldAnchor est un composant ajouté à un GameObject qui prend un contrôle absolu sur la transformation de cet objet.

Les appareils tels que HoloLens analysent et apprennent constamment l’environnement. Ainsi, à mesure que l’HoloLens suit le mouvement & position dans l’espace, ses estimations seront mises à jour et le système de coordonnées Unity ajusté. Par exemple, si un GameObject est placé à 1m de la caméra au début, comme HoloLens suit l’environnement, il peut se rendre compte que le point physique où se trouve le GameObject est en fait à 1,1m de distance. Cela entraînerait une dérive de l’hologramme. L’application d’un WorldAnchor à un GameObject permet à l’ancre de contrôler la transformation de l’objet afin que l’objet reste à l’emplacement physique correct (par exemple, mettre à jour à 1,1 m de distance au lieu d'1 m au moment de l’exécution). Pour conserver WorldAnchors entre les sessions d’application, les développeurs peuvent utiliser worldAnchorStore pour enregistrer et charger WorldAnchors.

Notes

Une fois qu’un composant WorldAnchor a été ajouté à un GameObject, il n’est pas possible de modifier la transformation de ce GameObject (c’est-à-dire transform.position = x). Un développeur doit supprimer worldAnchor pour modifier la transformation.

WorldAnchor m_anchor;

public void AddAnchor()
{
    this.m_anchor = this.gameObject.AddComponent<WorldAnchor>();
}

public void RemoveAnchor()
{
    DestroyImmediate(m_anchor);
}

Si vous souhaitez une alternative à l’utilisation manuelle des ancres, case activée les outils de verrouillage microsoft world.

Voir aussi