Stabilisation de l’hologramme — MRTK2

Performances

Pour que la plateforme de réalité mixte et l’appareil sous-jacents produisent les meilleurs résultats, il est important d’atteindre les taux d’images. La fréquence d’images cible (par exemple, 60 FPS ou 90 FPS) varie selon les plateformes et les appareils. Toutefois, les applications de réalité mixte qui rencontrent la fréquence d’images auront des hologrammes stables, ainsi qu’un suivi de tête efficace, le suivi des mains et bien plus encore.

Suivi de l’environnement

Le rendu holographique stable s’appuie fortement sur le suivi de la pose de tête par l’appareil de plateforme & . Unity affiche 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 apparaissent visuellement inexacts. Cela est particulièrement évident et important pour les appareils AR comme HoloLens où les utilisateurs peuvent associer des hologrammes virtuels au monde réel. Les performances sont significatives pour le suivi des têtes fiables, 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 des documents de référence pour stabiliser les hologrammes sur la plateforme. Il existe quelques outils clés, mais 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, où les hologrammes existent pour une trame 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 les cibles de rendu de profondeur de couleur & produites par l’application et transforme la sortie finale de l’écran pour tenir compte de tout léger mouvement de tête depuis la dernière prédiction de la pose de la tête. La boucle de jeu d’une application prend du temps à s’exécuter. Par exemple, à 60 FPS, cela signifie que l’application prend environ 16,667 ms pour afficher un frame. Même si cela peut sembler comme une quantité de temps miniscule, la position et l’orientation de l’utilisateur de la tête changent, ce qui entraîne de nouvelles matrices de projection pour la caméra 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 Late-Stage reprojection est effectué par pixel ou via un plan de stabilisation.

Basé sur la profondeur par pixel

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 à 1m de distance peut être devant un pilier qui est de 10m. 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é la 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 stabilisation, mais les hologrammes qui se mentent 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 peut économiser énormément sur les performances, bien que les valeurs de profondeur aient moins de précision. Pour compenser la précision inférieure et éviter les z-fighting, il est recommandé de réduire le plan de découpage éloigné de la valeur par défaut de 1 000m 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 à l’inverse d’un format de profondeur 24 bits crée généralement une mémoire tampon de gabarit 8 bits, le cas échéant sur la plateforme graphique de point de terminaison.

Partage de mémoire tampon de profondeur dans Unity

Pour utiliser le LSR basé sur la profondeur, il existe deux étapes importantes que les développeurs doivent suivre.

  1. Sous Edit>Project Paramètres>Player>XR Paramètres>Virtual Reality SDK> enable Depth Buffer Sharing
    1. Si vous ciblez HoloLens, il est recommandé de sélectionner également le format de profondeur 16 bits.
  2. Lors du rendu de la couleur sur l’écran, la profondeur de rendu également

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

Notes

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

Nuanceur MRTK Standard transparent

Pour les matériaux transparents utilisant le nuanceur MRTK Standard, sélectionnez le matériau à afficher dans la fenêtre Inspector . Cliquez ensuite sur le bouton Corriger maintenant pour convertir le matériau en profondeur (c’est-à-dire Z-Write On).

Avant

Depth Buffer Before Fix MRTK Standard Shader

Après

Depth Buffer Fixed MRTK Standard Shader

Mesh Pro de texte

Pour les objets Text Mesh Pro, sélectionnez le GameObject TMP pour l’afficher dans l’inspecteur. Sous le composant matériau, changez le nuanceur du matériau affecté pour utiliser le nuanceur MRTK TextMeshPro.

Text Mesh Pro Depth Buffer Fix

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
            ...
        }
    }
}
Sauvegardes 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 du texte de l’interface utilisateur Unity sur un panneau flottant dans une scène. En rendant le panneau opaque ou au moins écrit en profondeur, le texte & du panneau sera stabilisé par la plateforme, car leurs z-values sont si proches les uns 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 des emplacements importants dans un espace physique, les développeurs peuvent tirer parti de WorldAnchors sur GameObjects qui doivent rester dans un seul 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, comme l’HoloLens effectue le suivi de la position de mouvement & 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 le HoloLens suit l’environnement, il peut se rendre compte du point physique où se trouve le GameObject est en fait de 1,1 m. Cela entraînerait la 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 (mise à jour vers 1,1 m au lieu de 1 m au moment de l’exécution). Pour conserver WorldAnchors dans 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 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 d’Anchors, consultez les outils microsoft World Locking Tools.

Voir aussi