Stabilisation d’hologramme

Performances

Pour que la plateforme et le périphérique de réalité mixte sous-jacents produisent les meilleurs résultats, il est important d’effectuer des fréquences 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 respectent la fréquence d’images comporteront des hologrammes stables, ainsi qu’un suivi efficace des têtes, le suivi des mains et bien plus encore.

Suivi de l’environnement

Le rendu holographique stable s’appuie fortement sur le suivi des poses par la plateforme & appareil. Unity restitue la scène chaque image de la caméra est estimée et fournie par la plateforme sous-jacente. Si ce suivi ne suit pas correctement le mouvement de la tête réelle, les hologrammes apparaîtront mal. Ceci 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 de la tête fiable, mais il peut également y avoir d' autres fonctionnalités importantes. Les types d’éléments d’environnement qui ont 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 la stabilisation des hologrammes sur la plateforme. Toutefois, il existe un certain nombre d’outils clés que les développeurs peuvent utiliser pour améliorer l’expérience visuelle des hologrammes pour les utilisateurs.

Partage de mémoire tampon de profondeur

Les développeurs Unity ont la possibilité de partager le tampon de profondeur de l’application avec la plateforme. Cela fournit des informations, où des hologrammes existent pour un frame actuel, que la plateforme peut utiliser pour stabiliser des hologrammes via un processus d’assistance matérielle appelé reprojection Late-Stage.

Reprojection à l’étape tardive

À la fin du rendu d’un frame, la plateforme Windows Mixed Reality prend les cibles de rendu de la profondeur de couleur & générées par l’application et transforme la sortie finale de l’écran en compte pour tout déplacement de tête depuis la dernière prédiction de pose. L’exécution de la boucle de jeu d’une application prend du temps. Par exemple, à 60 FPS, cela signifie que l’application prend ~ 16.667 ms pour afficher un frame. Même si cela peut sembler un rien de temps, la position et l’orientation de l’utilisateur changent en fonction de nouvelles matrices de projection pour l’appareil photo en cours de rendu. La reprojection en phase tardive transforme les pixels de l’image finale pour tenir compte de cette nouvelle perspective.

Plan de stabilisation par pixel et LSR

En fonction du point de terminaison de l’appareil et de la version du système d’exploitation exécuté sur un appareil Windows Mixed Reality, l’algorithme de reprojection Late-Stage sera effectué par pixel ou par le biais d’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 peut être devant un pilier qui est en millions de mètres. 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é son tête. La reprojection par pixel prendra 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 exacte à 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 se trouvant 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 fortement recommandé d’utiliser le format de mémoire tampon de profondeur de 16 bits par rapport à 24 bits. Cela permet d’économiser énormément de performances, bien que les valeurs de profondeur présentent moins de précision. Pour compenser la précision inférieure et éviter la lutte z, il est recommandé de réduire le plan de découpage éloigné de la valeur par défaut de 1000MD définie par Unity.

Notes

Si vous utilisez le format de profondeur 16 bits, les effets requis pour la mémoire tampon des stencils ne fonctionneront pas, car Unity ne crée pas de tampon de stencil dans ce paramètre. Si vous sélectionnez le format de profondeur 24 bits , vous créez généralement une mémoire tampon de stencil de 8 bits, le cas échéant sur la plateforme graphique de point de terminaison.

Partage de mémoire tampon de profondeur dans Unity

Pour pouvoir utiliser des LSR à base de profondeur, les développeurs doivent effectuer deux étapes importantes.

  1. Sous modifier les > paramètres du projet, XR paramètres de l’application > > > Virtual Real SDK > activer 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 couleur à l’écran, afficher la profondeur également

Les GameObjects opaques dans Unity sont généralement écrits automatiquement en profondeur. Toutefois, les objets de texte transparent & n’écrivent généralement pas en profondeur par défaut. Si vous utilisiez le nuanceur standard MRTK ou le maillage de texte Pro, cela peut être facilement résolu.

Notes

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

Nuanceur transparent MRTK standard

Pour les matériaux transparents à l’aide du nuanceur standard MRTK, sélectionnez le matériau pour l’afficher dans la fenêtre de l' inspecteur . Cliquez ensuite sur le bouton corriger maintenant pour convertir la matière en écriture en profondeur (c.-à-d. Z-écrire sur).

Avant

Mémoire tampon de profondeur avant correction du nuanceur standard MRTK

Après

Nuanceur standard MRTK fixe du tampon de profondeur

Maille de texte Pro

Pour objets de maillage Pro de texte, sélectionnez le GameObject TMP pour l’afficher dans l’inspecteur. Sous le composant matériau, faites basculer le nuanceur pour la documentation affectée afin d’utiliser le nuanceur MRTK TextMeshPro.

Correction du tampon de la profondeur du maillage Pro du texte

Nuanceur personnalisé

Si vous écrivez un nuanceur personnalisé, ajoutez l' indicateur ZWrite au début de la définition du bloc de passe pour configurer le nuanceur à écrire dans la mémoire tampon de profondeur.

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

Si les méthodes ci-dessus ne fonctionnent pas pour un scénario donné (par exemple, à l’aide de l’interface utilisateur Unity), il est possible d’écrire un autre objet dans le tampon de profondeur. Un exemple courant consiste à utiliser le 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 & le panneau sera stabilisé par la plateforme, car leurs valeurs z sont tellement proches les unes des autres.

WorldAnchors (HoloLens)

En plus de vous 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 des emplacements importants dans un espace physique, les développeurs peuvent tirer parti de WorldAnchors sur GameObjects qui doivent rester dans un même emplacement. 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 le HoloLens suit le mouvement & position dans l’espace, ses estimations sont mises à jour et le système de coordonnées Unity est ajusté. Par exemple, si un GameObject est placé 1m à partir de l’appareil photo au démarrage, à mesure que le HoloLens effectue le suivi de l’environnement, il peut se rendre compte du point physique où se trouve le GameObject. 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 (c.-à-d. Mettez à jour vers la version 1.1 m à la place de 1m au moment de l’exécution). Pour conserver les WorldAnchors entre les sessions d’application, les développeurs peuvent utiliser le 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.-à-d. transformation. position = x). Un développeur doit supprimer le 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, consultez les outils de verrouillage Microsoft World.

Voir aussi