Stabilité des hologrammes
Pour obtenir des hologrammes stables, HoloLens dispose d’un pipeline de stabilisation d’image intégré. Le pipeline de stabilisation fonctionne automatiquement en arrière-plan. Vous n’avez donc pas besoin d’effectuer de mesures supplémentaires pour l’activer. Toutefois, vous devez utiliser des techniques qui améliorent la stabilité des hologrammes et évitent les scénarios qui réduisent la stabilité.
Terminologie de la qualité des hologrammes
La qualité des hologrammes est le résultat d’un bon environnement et d’un bon développement d’applications. Les applications exécutées à 60 images par seconde dans un environnement où HoloLens peut suivre l’environnement garantissent la synchronisation de l’hologramme et du système de coordonnées correspondant. Du point de vue d’un utilisateur, les hologrammes censés être stationnaires ne se déplacent pas par rapport à l’environnement.
La terminologie suivante peut vous aider lorsque vous identifiez des problèmes liés à l’environnement, des taux de rendu incohérents ou faibles, ou toute autre chose.
- Justesse. Une fois que l’hologramme est verrouillé et placé dans le monde réel, il doit rester à l’endroit où il est placé par rapport à l’environnement environnant et indépendamment du mouvement de l’utilisateur ou des changements d’environnement petits et épars. Si un hologramme apparaît ultérieurement dans un emplacement inattendu, il s’agit d’un problème de précision . De tels scénarios peuvent se produire si deux salles distinctes sont identiques.
- Gigue. Les utilisateurs observent la gigue comme une secousse à haute fréquence d’un hologramme, ce qui peut se produire lorsque le suivi de l’environnement se dégrade. Pour les utilisateurs, la solution exécute le réglage du capteur.
- Judder. Les fréquences de rendu faibles entraînent des mouvements irréguliers et des images doubles d’hologrammes. Judder est particulièrement visible dans les hologrammes avec mouvement. Les développeurs doivent maintenir une constante de 60 FPS.
- Dérive. Les utilisateurs voient la dérive comme un hologramme semble s’éloigner de l’endroit où il a été placé à l’origine. La dérive se produit lorsque vous placez des hologrammes loin des ancres spatiales, en particulier dans les parties non mappées de l’environnement. La création d’hologrammes proches des ancres spatiales réduit la probabilité de dérive.
- Rebondir. Lorsqu’un hologramme « s’affiche » ou « saute » à l’occasion de son emplacement. La jumpiness peut se produire lorsque le suivi ajuste les hologrammes pour correspondre à la compréhension mise à jour de votre environnement.
- Nager. Lorsqu’un hologramme apparaît pour se balancer correspondant au mouvement de la tête de l’utilisateur. La nage se produit lorsque l’application n’a pas entièrement implémenté la reprojection et si l’HoloLens n’est pas étalonné pour l’utilisateur actuel. L’utilisateur peut réexécuter l’application d’étalonnage pour résoudre le problème. Les développeurs peuvent mettre à jour le plan de stabilisation pour améliorer davantage la stabilité.
- Séparation des couleurs. Les affichages dans HoloLens sont des affichages séquentiels en couleur, qui flashent les canaux de couleur rouge-vert-bleu-vert à 60 Hz (les champs de couleur individuels sont affichés à 240 Hz). Chaque fois qu’un utilisateur suit un hologramme en mouvement avec ses yeux, les bords de début et de fin de cet hologramme se séparent dans leurs couleurs constituantes, produisant un effet arc-en-ciel. Le degré de séparation dépend de la vitesse de l’hologramme. Dans certains cas plus rares, le déplacement rapide de la tête en regardant un hologramme stationnaire peut également entraîner un effet arc-en-ciel, qui est appelé séparation des couleurs.
Fréquence d’images
La fréquence d’images est le premier pilier de la stabilité des hologrammes. Pour que les hologrammes semblent stables dans le monde, chaque image présentée à l’utilisateur doit avoir les hologrammes dessinés à l’endroit approprié. Les affichages sur HoloLens s’actualisent 240 fois par seconde, affichant quatre champs de couleur distincts pour chaque image nouvellement rendue, ce qui donne une expérience utilisateur de 60 FPS (images par seconde). Pour offrir la meilleure expérience possible, les développeurs d’applications doivent gérer 60 FPS, ce qui se traduit par la fourniture cohérente d’une nouvelle image au système d’exploitation toutes les 16 millisecondes.
60 FPS Pour dessiner des hologrammes de sorte qu’ils soient dans le monde réel, HoloLens doit restituer les images à partir de la position de l’utilisateur. Étant donné que le rendu d’image prend du temps, HoloLens prédit où se trouve la tête d’un utilisateur lorsque les images sont affichées dans les écrans. Toutefois, cet algorithme de prédiction est une approximation. HoloLens dispose d’un matériel qui ajuste l’image rendue pour tenir compte de l’écart entre la position prédite de la tête et la position réelle de la tête. L’ajustement fait apparaître l’image que l’utilisateur voit comme si elle était rendue à partir de l’emplacement approprié, et les hologrammes semblent stables. Les mises à jour d’image fonctionnent mieux avec de petites modifications, et elles ne peuvent pas complètement corriger certaines choses dans l’image rendue, comme la parallaxe de mouvement.
En effectuant un rendu à 60 FPS, vous effectuez trois actions pour vous aider à créer des hologrammes stables :
- Réduction de la latence globale entre le rendu d’une image et l’affichage de cette image par l’utilisateur. Dans un moteur avec un jeu et un thread de rendu s’exécutant dans lockstep, l’exécution à 30FPS peut ajouter 33,3 ms de latence supplémentaire. La réduction de la latence réduit les erreurs de prédiction et augmente la stabilité de l’hologramme.
- Pour que chaque image atteignant les yeux de l’utilisateur ait une latence constante. Si vous effectuez un rendu à 30 images par seconde, l’affichage affiche toujours les images à 60 images par seconde, ce qui signifie que la même image s’affiche deux fois dans la ligne. La deuxième image aura une latence de 16,6 ms de plus que la première image et devra corriger une quantité d’erreur plus prononcée. Cette incohérence dans l’ampleur de l’erreur peut provoquer un judder indésirable de 60 Hz.
- Vous réduisez l’impression de vibration, qui se caractérise par des mouvements irréguliers et des images dédoublées. Les mouvements rapides des hologrammes et les fréquences d’images peu élevées provoquent une impression de vibration plus prononcée. S’efforcer de maintenir 60 FPS en tout temps permet d’éviter de judder pour un hologramme mobile donné.
Cohérence de la fréquence d’images La cohérence de la fréquence d’images est aussi importante qu’une fréquence d’images élevée par seconde. Parfois, les images supprimées sont inévitables pour toute application riche en contenu, et HoloLens implémente des algorithmes sophistiqués pour récupérer après des problèmes occasionnels. Toutefois, une fréquence d’images fluctuant constamment est beaucoup plus perceptible pour un utilisateur que l’exécution cohérente à des fréquences d’images inférieures. Par exemple, une application qui effectue un rendu fluide pour cinq images (60 FPS pendant la durée de ces cinq images), puis supprime toutes les images sur deux pour les 10 images suivantes (30 FPS pendant la durée de ces 10 images) apparaît plus instable qu’une application qui effectue un rendu constant à 30 IMAGES/S.
Sur une note connexe, le système d’exploitation limite les applications à 30 FPS lorsque la capture de réalité mixte est en cours d’exécution.
Analyse des performances Il existe différents types d’outils qui peuvent être utilisés pour évaluer la fréquence d’images de votre application, tels que :
- GPUView
- Le débogueur de graphiques Visual Studio
- Profileurs intégrés à des moteurs 3D tels qu’Unity
Distances de rendu de l’hologramme
Le système visuel humain intègre plusieurs signaux dépendants de la distance lorsqu’il fixe et se concentre sur un objet.
- Hébergement - Le focus d’un œil individuel.
- Convergence : deux yeux se déplaçant vers l’intérieur ou vers l’extérieur pour se centrer sur un objet.
- Vision binoculaire - Disparités entre les images de l’œil gauche et de l’œil droit qui dépendent de la distance d’un objet loin de votre point de fixation.
- Trame de fond, taille angulaire relative et autres signaux monoculaires (œil unique).
La convergence et l’accommodement sont uniques en raison de leurs signaux extra-rétiniens liés à la façon dont les yeux changent pour percevoir des objets à différentes distances. Dans l’affichage naturel, la convergence et l’hébergement sont liés. Lorsque les yeux regardent quelque chose près (par exemple, votre nez), les yeux se croisent et s’accommodent à un point proche. Lorsque les yeux regardent quelque chose à l’infini, les yeux deviennent parallèles et l’œil s’accommode à l’infini.
Les utilisateurs portant HoloLens pourront toujours prendre en charge jusqu’à 2,0 m pour conserver une image claire, car les écrans HoloLens sont fixés à une distance optique d’environ 2,0 m de l’utilisateur. Les développeurs d’applications contrôlent l’endroit où les yeux des utilisateurs convergent en plaçant le contenu et les hologrammes à différentes profondeurs. Lorsque les utilisateurs s’accommodent et convergent vers différentes distances, le lien naturel entre les deux signaux est rompu, ce qui peut entraîner une gêne visuelle ou de la fatigue, en particulier lorsque l’ampleur du conflit est importante.
L’inconfort dû au conflit vergence-hébergement peut être évité ou minimisé en maintenant le contenu convergé aussi proche que possible de 2,0 m (c’est-à-dire, dans une scène avec beaucoup de profondeur placer les zones d’intérêt près de 2,0 m, si possible). Lorsque le contenu ne peut pas être placé près de 2,0 m, l’inconfort dû au conflit de vergence-hébergement est plus grand lorsque le regard de l’utilisateur va et vient entre différentes distances. En d’autres termes, il est bien plus confortable de regarder un hologramme stationnaire situé à 50 cm que de regarder un hologramme situé à 50 cm qui se rapproche et s’éloigne de vous continuellement.
Placer le contenu à 2,0 m est également avantageux car les deux écrans sont conçus pour se chevaucher entièrement à cette distance. Pour les images placées hors de ce plan, à mesure qu’elles se déplacent du côté du cadre holographique, elles apparaissent d’un affichage tout en restant visibles sur l’autre. Cette rivalité binoculaire peut perturber la perception de profondeur de l’hologramme.
Distance optimale pour le placement des hologrammes par rapport à l’utilisateur
Plans de découpage Pour un confort maximal, nous vous recommandons de couper la distance de rendu à 85 cm avec un fondu hors de contenu à partir de 1 m. Dans les applications où les hologrammes et les utilisateurs sont tous deux stationnaires, les hologrammes peuvent être vus confortablement à une hauteur de 50 cm. Dans ce cas, les applications doivent placer un plan de clip au plus près de 30 cm et disparaître en fondu à au moins 10 cm du plan de clip. Chaque fois que le contenu est plus proche de 85 cm, il est important de s’assurer que les utilisateurs ne se rapprochent pas fréquemment ou ne s’éloignent pas des hologrammes, ou que les hologrammes ne se rapprochent pas fréquemment de l’utilisateur ou s’éloignent plus de l’utilisateur, car ces situations sont plus susceptibles de causer de l’inconfort du conflit de vergence-hébergement. Le contenu doit être conçu pour réduire le besoin d’interaction à plus de 85 cm de l’utilisateur, mais lorsque le contenu doit être rendu plus proche de 85 cm, une bonne règle pour les développeurs consiste à concevoir des scénarios dans lesquels les utilisateurs et/ou les hologrammes ne se déplacent pas en profondeur plus de 25 % du temps.
Meilleures pratiques Lorsque les hologrammes ne peuvent pas être placés à 2 m et que les conflits entre la convergence et l’hébergement ne peuvent pas être évités, la zone optimale pour le placement des hologrammes est comprise entre 1,25 m et 5 m. Dans tous les cas, les concepteurs doivent structurer le contenu pour encourager les utilisateurs à interagir à plus de 1 m de distance (par exemple, ajuster la taille du contenu et les paramètres de placement par défaut).
Reprojection
HoloLens dispose d’une technique sophistiquée de stabilisation holographique assistée par le matériel appelée reprojection. La reprojection prend en compte le mouvement et le changement du point de vue (CameraPose) lorsque la scène s’anime et que l’utilisateur déplace sa tête. Les applications doivent prendre des mesures spécifiques pour utiliser au mieux la reprojection.
Il existe quatre types de reprojection main
- Reprojection de profondeur : Produit les meilleurs résultats avec le moins d’efforts de l’application. Toutes les parties de la scène rendue sont stabilisées indépendamment en fonction de leur distance par rapport à l’utilisateur. Certains artefacts de rendu peuvent être visibles lorsqu’il y a des changements de profondeur marqués. Cette option est disponible uniquement sur les casques HoloLens 2 et immersifs.
- Reprojection planaire : Permet à l’application de contrôler précisément la stabilisation. Un plan est défini par l’application et tout ce qui se trouve sur ce plan sera la partie la plus stable de la scène. Plus un hologramme est éloigné du plan, moins il sera stable. Cette option est disponible sur toutes les plateformes Windows MR.
- Reprojection planaire automatique : Le système définit un plan de stabilisation à l’aide des informations contenues dans la mémoire tampon de profondeur. Cette option est disponible sur HoloLens génération 1 et HoloLens 2.
- Aucun: Si l’application ne fait rien, la reprojection planaire est utilisée avec le plan de stabilisation fixé à 2 mètres dans la direction du regard de la tête de l’utilisateur, ce qui produit généralement des résultats inférieurs aux normes.
Les applications doivent effectuer des actions spécifiques pour activer les différents types de reprojection
- Reprojection de profondeur : L’application envoie sa mémoire tampon de profondeur au système pour chaque trame rendue. Sur Unity, la reprojection de profondeur est effectuée avec l’option Mémoire tampon de profondeur partagée dans le volet Paramètres Windows Mixed Reality sous Gestion des plug-ins XR. Les applications DirectX appellent CommitDirect3D11DepthBuffer. L’application ne doit pas appeler SetFocusPoint.
- Reprojection planaire : Sur chaque trame, les applications indiquent au système l’emplacement d’un plan à stabiliser. Les applications Unity appellent SetFocusPointForFrame et doivent avoir la mémoire tampon de profondeur partagée désactivée. Les applications DirectX appellent SetFocusPoint et ne doivent pas appeler CommitDirect3D11DepthBuffer.
- Reprojection planaire automatique : Pour l’activer, l’application doit envoyer sa mémoire tampon de profondeur au système comme elle le ferait pour la reprojection de profondeur. Les applications utilisant Mixed Reality Toolkit (MRTK) peuvent configurer le fournisseur de paramètres de caméra pour utiliser la reprojection automatique. Les applications natives doivent définir dans
DepthReprojectionMode
HolographicCameraRenderingParameters surAutoPlanar
chaque image. Pour HoloLens de génération 1, l’application ne doit pas appeler SetFocusPoint.
Choix de la technique de reprojection
Type de stabilisation | Casques immersifs | HoloLens génération 1 | HoloLens 2 |
---|---|---|---|
Reprojection de profondeur | Recommandé | N/A | Recommandé Les applications Unity doivent utiliser Unity 2018.4.12+, Unity 2019.3+ ou Unity 2020.3+. Sinon, utilisez la reprojection planaire automatique. |
Reprojection planaire automatique | N/A | Valeur par défaut recommandée | Recommandé si la reprojection de profondeur ne donne pas les meilleurs résultats Les applications Unity sont recommandées pour utiliser Unity 2018.4.12+, Unity 2019.3+ ou Unity 2020.3+. Les versions précédentes d’Unity fonctionnent avec des résultats de reprojection légèrement dégradés. |
Reprojection planaire | Non recommandé | Recommandé si Le planaire automatique ne donne pas les meilleurs résultats | À utiliser si aucune des options de profondeur ne donne les résultats souhaités |
Vérification de la définition correcte de la profondeur
Lorsqu’une méthode de reprojection utilise la mémoire tampon de profondeur, il est important de vérifier que le contenu de la mémoire tampon de profondeur représente la scène rendue de l’application. Un certain nombre de facteurs peuvent entraîner des problèmes. Si une deuxième caméra est utilisée pour afficher les superpositions de l’interface utilisateur, par exemple, elle est susceptible de remplacer toutes les informations de profondeur de la vue réelle. Souvent, les objets transparents ne définissent pas la profondeur. Un rendu de texte ne définit pas la profondeur par défaut. Il y aura des problèmes visibles dans le rendu lorsque la profondeur ne correspond pas aux hologrammes rendus.
HoloLens 2 dispose d’un visualiseur pour indiquer où la profondeur est et n’est pas définie, ce qui peut être activé à partir du portail d’appareil. Sous l’onglet Affichages>de la stabilité de l’hologramme , cochez la case Afficher la visualisation de la profondeur dans le casque . Les zones dont la profondeur est correctement définie seront bleues. Les éléments rendus qui n’ont pas de profondeur définie sont marqués en rouge et doivent être corrigés.
Notes
La visualisation de la profondeur n’apparaît pas dans Mixed Reality Capture. Il n’est visible que via l’appareil.
Certains outils d’affichage GPU permettent de visualiser la mémoire tampon de profondeur. Les développeurs d’applications peuvent utiliser ces outils pour s’assurer que la profondeur est correctement définie. Consultez la documentation des outils de l’application.
Utilisation de la reprojection planaire
Notes
Pour les casques immersifs de bureau, la définition d’un plan de stabilisation est généralement contre-productive, car elle offre moins de qualité visuelle que de fournir la mémoire tampon de profondeur de votre application au système pour permettre la reprojection basée sur la profondeur par pixel. À moins d’exécuter sur un HoloLens, vous devez généralement éviter de définir le plan de stabilisation.
L’appareil tente automatiquement de choisir ce plan, mais l’application doit vous aider en sélectionnant le point de focus dans la scène. Les applications Unity s’exécutant sur un HoloLens doivent choisir le meilleur point de focus en fonction de votre scène et le passer à SetFocusPoint(). Un exemple de définition du point de focus dans DirectX est inclus dans le modèle de cube en rotation par défaut.
Unity soumettra votre mémoire tampon de profondeur à Windows pour activer la reprojection par pixel lorsque vous exécutez votre application sur un casque immersif connecté à un PC de bureau, ce qui offre une meilleure qualité d’image sans travail explicite de la part de l’application. Vous ne devez fournir un point de focus que lorsque votre application s’exécute sur un HoloLens, sinon la reprojection par pixel sera remplacée.
// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
currentCoordinateSystem,
spinningCubeRenderer.Position
);
L’emplacement du point de focus dépend en grande partie de ce que l’hologramme regarde. L’application a le vecteur de regard pour référence et le concepteur d’application sait quel contenu l’utilisateur doit observer.
La seule chose la plus importante qu’un développeur peut faire pour stabiliser les hologrammes est de rendre à 60 FPS. Le fait de tomber en dessous de 60 FPS réduit considérablement la stabilité de l’hologramme, quelle que soit l’optimisation du plan de stabilisation.
Meilleures pratiques Il n’existe aucun moyen universel de configurer le plan de stabilisation et il est spécifique à l’application. Notre main recommandation est d’expérimenter et de voir ce qui fonctionne le mieux pour votre scénario. Toutefois, essayez d’aligner le plan de stabilisation avec autant de contenu que possible, car tout le contenu de ce plan est parfaitement stabilisé.
Par exemple :
- Si vous n’avez que du contenu planaire (application de lecture, application de lecture vidéo), alignez le plan de stabilisation sur le plan contenant votre contenu.
- S’il y a trois petites sphères qui sont verrouillées dans le monde, faites en sorte que le plan de stabilisation « coupe » les centres de toutes les sphères actuellement dans la vue de l’utilisateur.
- Si votre scène a du contenu à des profondeurs sensiblement différentes, privilégiez d’autres objets.
- Veillez à ajuster le point de stabilisation de chaque image pour qu’elle coïncide avec l’hologramme que l’utilisateur regarde
Choses à éviter Le plan de stabilisation est un excellent outil pour obtenir des hologrammes stables, mais s’il est mal utilisé, il peut entraîner une grave instabilité de l’image.
- Ne « feu et oubliez pas ». Vous pouvez vous retrouver avec le plan de stabilisation derrière l’utilisateur ou attaché à un objet qui n’est plus dans la vue de l’utilisateur. Vérifiez que la normale du plan de stabilisation est définie en face avant de la caméra (par exemple, -camera.forward)
- Ne changez pas rapidement le plan de stabilisation entre les extrêmes
- Ne laissez pas le plan de stabilisation défini sur une distance/orientation fixe
- Ne laissez pas le plan de stabilisation traverser l’utilisateur
- Ne définissez pas le point de focus lors de l’exécution sur un PC de bureau plutôt que sur un HoloLens, et utilisez plutôt la reprojection basée sur la profondeur par pixel.
Séparation des couleurs
En raison de la nature des affichages HoloLens, un artefact appelé « séparation des couleurs » peut parfois être perçu. Il se manifeste sous la forme d’une image qui se sépare en couleurs de base individuelles ( rouge, vert et bleu). L’artefact peut être particulièrement visible lors de l’affichage d’objets blancs, car ils ont de grandes quantités de rouge, vert et bleu. Il est plus prononcé lorsqu’un utilisateur suit visuellement un hologramme qui se déplace sur le cadre holographique à grande vitesse. L’artefact peut également se manifester par warping/déformation d’objets. Si un objet a un contraste élevé et/ou des couleurs pures telles que le rouge, le vert, le bleu, la séparation des couleurs est perçue comme une déformation de différentes parties de l’objet.
Exemple de ce à quoi peut ressembler la séparation des couleurs d’un curseur rond blanc verrouillé à la tête quand un utilisateur fait pivoter sa tête sur le côté :
Bien qu’il soit difficile d’éviter complètement la séparation des couleurs, il existe plusieurs techniques disponibles pour l’atténuer.
La séparation des couleurs est visible sur :
- Objets qui se déplacent rapidement, y compris les objets verrouillés en tête comme le curseur.
- Objets qui sont sensiblement loin du plan de stabilisation.
Pour atténuer les effets de la séparation des couleurs :
- Faites du décalage de l’objet le regard de l’utilisateur. Il doit apparaître comme s’il a une certaine inertie et est attaché au regard « sur ressorts ». Cette approche ralentit le curseur (réduisant la distance de séparation) et le place derrière le point de regard probable de l’utilisateur. Tant qu’il rattrape rapidement quand l’utilisateur cesse de déplacer son regard, il semble naturel.
- Si vous souhaitez déplacer un hologramme, essayez de maintenir sa vitesse de mouvement en dessous de 5 degrés/seconde si vous attendez de l’utilisateur qu’il le suive avec ses yeux.
- Utilisez la lumière au lieu de la géométrie pour le curseur. Une source d’éclairage virtuel attachée au regard sera perçue comme un pointeur interactif, mais ne provoquera pas de séparation des couleurs.
- Ajustez le plan de stabilisation pour qu’il corresponde aux hologrammes que l’utilisateur regarde.
- Rendre l’objet rouge, vert ou bleu.
- Basculez vers une version floue du contenu. Par exemple, un curseur blanc rond peut être remplacé par une ligne légèrement floue orientée dans le sens du mouvement.
Comme auparavant, le rendu à 60 FPS et la définition du plan de stabilisation sont les techniques les plus importantes pour la stabilité de l’hologramme. Si vous faites face à une séparation des couleurs notable, vérifiez d’abord que la fréquence d’images répond aux attentes.