Partager via


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 répondant à la fréquence d’images auront des hologrammes stables ainsi que le suivi de tête efficace, le suivi des mains et bien plus encore.

Suivi de l’environnement

Le rendu holographique stable repose fortement sur le suivi de la pose de tête par la plateforme et l’appareil. Unity affiche la scène chaque image de la pose de 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 inexactes. Cela est particulièrement évident et important pour les appareils AR tels que HoloLens, où les utilisateurs peuvent associer des hologrammes virtuels au monde réel. Les performances sont importantes 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 impactant 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ù des hologrammes existent pour une trame actuelle, que la plateforme peut utiliser pour stabiliser les hologrammes via un processus assisté par le matériel appelé Reprojection à l’étape tardive.

Reprojection en phase tardive

À la fin du rendu d’un cadre, la plateforme Windows Mixed Reality prend les cibles de rendu de couleur et de profondeur 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 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 ~16,667 ms pour afficher une trame. Même si cela peut sembler une durée miniscule, la position et l’orientation de la tête de l’utilisateur 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 reprojection en phase tardive est effectué par pixel ou via un plan de stabilisation.

En fonction de 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 de 1m à l’extérieur peut être devant un pilier 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 trouvent 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.SetFocusPointForFrame fournie 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 même si les valeurs de profondeur auront moins de précision. Pour compenser la précision inférieure et éviter les combats z, il est recommandé de réduire le plan de clip éloigné de la valeur par défaut de 1000m définie par Unity.

Remarque

Si vous utilisez un 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 effectuer.

  1. Sous Modifier les>paramètres du lecteur>de projet>XR Settings>Virtual Reality SDK>, activez le partage de mémoire tampon de profondeur
    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 transparents et de texte n’écrivent généralement pas en profondeur par défaut. Si vous utilisez le nuanceur standard MRTK ou Text Mesh Pro, cela peut être facilement corrigé.

Remarque

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 utilisant le nuanceur MRTK Standard, sélectionnez le matériau à afficher dans la fenêtre Inspecteur . Cliquez ensuite sur le bouton Corriger maintenant pour convertir le matériau en profondeur (c’est-à-dire 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 les objets Text Mesh Pro, sélectionnez le GameObject TMP pour l’afficher dans l’inspecteur. Sous le composant matériel, changez le nuanceur du matériau affecté pour utiliser le nuanceur MRTK TextMeshPro.

Correctif de mémoire tampon de profondeur du 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 du texte de l’interface utilisateur Unity sur un panneau flottant dans une scène. En rendant le panneau opaque ou au moins l’écriture en profondeur, alors le texte et le panneau seront stabilisés 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 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, à mesure que HoloLens effectue le suivi du mouvement et de la position dans l’espace, ses estimations seront mises à jour et le système de coordonnées Unity est ajusté. Par exemple, si un GameObject est placé 1m à partir de la caméra au début, car HoloLens effectue le suivi de l’environnement, il peut se rendre compte du point physique où se trouve le GameObject est en fait de 1,1m à distance. 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 (par exemple, mettre à jour jusqu’à 1,1 m au lieu de 1m 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.

Remarque

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 utiliser manuellement Anchors, consultez microsoft World Locking Tools.

Voir aussi