Présentation des performances de la réalité mixte

Cet article est une introduction à la compréhension de l’importance des performances pour votre application Mixed Reality. L’expérience utilisateur peut être considérablement dégradée si votre application ne s’exécute pas à une fréquence d’images optimale. Les hologrammes apparaîtront instables et le suivi de la tête de l’environnement sera incorrect, ce qui entraîne une expérience médiocre pour l’utilisateur. Les performances doivent être considérées comme une fonctionnalité de première classe pour le développement de réalité mixte et non comme une tâche de perfectionnement.

Les valeurs de fréquence d’images performantes pour chaque plateforme cible sont répertoriées ci-dessous.

Plateforme Fréquence d’images cible
HoloLens 60 i/s
PC Windows Mixed Reality Ultra 90 FPS
PC Windows Mixed Reality 60 i/s

L’infrastructure ci-dessous décrit les meilleures pratiques pour atteindre les fréquences d’images cibles. Pour obtenir des conseils sur la mesure et l’amélioration de la fréquence d’images dans l’environnement Unity, nous vous recommandons de lire les recommandations de performances pour l’article Unity

Présentation des goulots d’étranglement des performances

Si votre application a un framerate sous-performant, la première étape consiste à analyser et à comprendre où votre application nécessite beaucoup de calculs. Il existe deux processeurs principaux responsables du travail de rendu de votre scène : le processeur et le GPU, chacun gérant différents aspects de votre application Mixed Reality. Les trois endroits clés où des goulots d’étranglement peuvent se produire sont les suivants :

  1. Thread d’application - PROCESSEUR - Responsable de la logique de votre application, y compris les entrées de traitement, les animations, la physique et d’autres logiques d’application.
  2. Render Thread - PROCESSEUR en GPU - Responsable de l’envoi de vos appels de tirage au GPU. Lorsque votre application souhaite restituer un objet tel qu’un cube ou un modèle, ce thread envoie une demande au GPU pour effectuer les opérations.
  3. GPU : gère le plus souvent le pipeline graphique de votre application pour transformer des données 3D (modèles, textures, etc.) en pixels. Il produit finalement une image 2D à envoyer à l’écran de votre appareil.

Durée de vie d’un frame

En règle générale, les applications HoloLens sont liées au GPU, mais pas toujours. Utilisez les outils et techniques ci-dessous pour comprendre où votre application particulière est goulot d’étranglement.

Comment analyser votre application

Il existe de nombreux outils qui vous permettent de comprendre le profil de performances et les goulots d’étranglement potentiels dans votre application de réalité mixte.

Voici quelques outils courants pour vous aider à collecter des informations de profilage approfondies pour votre application :

Comment profiler dans n’importe quel environnement

Une façon de déterminer si votre application est liée au GPU ou au processeur consiste à réduire la résolution de la sortie cible de rendu. En réduisant le nombre de pixels à calculer, vous réduisez la charge de votre GPU. L’appareil s’affiche sur une texture plus petite, puis up-sample pour afficher votre image finale.

Après avoir réduit la résolution de rendu, si :

  1. La fréquence d’image de l’application augmente, alors vous êtes probablement lié au GPU
  2. Fréquence d’image de l’application inchangée, alors vous êtes probablement lié au processeur

Notes

Unity offre la possibilité de modifier facilement la résolution de la cible de rendu de votre application au moment de l’exécution grâce à la propriété XRSettings.renderViewportScale. L’image finale présentée sur l’appareil a une résolution fixe. La plateforme échantillonne la sortie de résolution inférieure pour générer une image de résolution supérieure pour le rendu sur les écrans.

UnityEngine.XR.XRSettings.renderScale = 0.7f;

Comment améliorer votre application

Recommandations sur les performances de processeur

En règle générale, la plupart du travail dans une application de réalité mixte sur le processeur implique d’effectuer la « simulation » de la scène et de traiter votre logique d’application. Les domaines suivants sont ciblés pour l’optimisation :

  • Animations
  • Physique
  • Allocations de mémoire
  • Algorithmes complexes (c’est-à-dire la cinématique inverse, la recherche de chemin)

Recommandations sur les performances de GPU

Présentation de la bande passante par rapport au taux de remplissage

Pour restituer une trame sur le processeur graphique, une application dépend de la bande passante de mémoire ou du taux de remplissage.

  • La bande passante de mémoire est le débit des lectures et des écritures que peut avoir le processeur graphique à partir de la mémoire
    • Pour identifier les limitations de bande passante, réduisez la qualité de la texture et case activée si la fréquence d’images s’est améliorée.
    • Pour identifier les limitations de taux de remplissage, réduisez la résolution d’affichage et vérifiez si la fréquence d’images s’améliore.

Notes

Si vous travaillez avec Unity, case activée nos recommandations de performances GPU spécifiques à Unity. - Dans Unity, utilisez la propriété XRSettings.renderViewportScale

La bande passante de mémoire implique généralement des optimisations pour :

  1. Résolutions de texture inférieures
  2. Utiliser moins de textures (normales, spéculaires, et ainsi de suite)

Le taux de remplissage est axé sur la réduction du nombre d’opérations qui doivent être calculées pour un pixel rendu final, notamment :

  1. Nombre d’objets à restituer/traiter
  2. Nombre d’opérations par nuanceur
  3. Nombre d’étapes GPU jusqu’au résultat final (nuanceurs de géométrie, effets de post-traitement, et ainsi de suite)
  4. Nombre de pixels à afficher (résolution d’affichage)

Réduire le nombre de polygones

Des nombres de polygones plus élevés entraînent davantage d’opérations pour le GPU. Ainsi, la réduction du nombre de polygones dans votre scène réduit le temps de rendu. D’autres facteurs rendent l’ombrage de la géométrie coûteuse, mais le nombre de polygones est la métrique la plus simple pour déterminer la quantité de travail nécessaire au rendu d’une scène.

Limiter le surdessin

Un dépassement élevé se produit lorsque plusieurs objets sont rendus, mais ne sont pas affichés à l’écran, car ils sont masqués par un objet occluding. Imaginez regarder un mur qui a des objets derrière lui. Toute la géométrie serait traitée pour le rendu, mais seul le mur opaque doit être rendu, ce qui entraîne des opérations inutiles.

Nuanceurs

Les nuanceurs sont de petits programmes qui s’exécutent sur le GPU et effectuent deux étapes importantes dans le rendu :

  1. Déterminer quels sommets doivent être dessinés et où ils se trouvent dans l’espace d’écran (nuanceur de vertex)
    • Le nuanceur vertex est exécuté par vertex pour chaque maillage.
  2. Détermination de la couleur de chaque pixel (nuanceur de pixels)
    • Le nuanceur pixel est exécuté par pixel et rendu par la géométrie sur la texture de rendu cible.

En règle générale, les nuanceurs effectuent de nombreuses transformations et calculs d’éclairage. Bien que les modèles d’éclairage complexes, les ombres et d’autres opérations puissent générer des résultats fantastiques, ils sont également fournis avec un prix. La réduction du nombre d’opérations calculées dans les nuanceurs peut considérablement réduire le travail nécessaire pour le GPU par image.

Recommandations en matière de codage du nuanceur
  • Utiliser le filtrage bilinéaire, dans la mesure du possible
  • Réorganiser les expressions pour utiliser des intrinsèques MAD pour effectuer une multiplication et un ajout en même temps
  • Précalculer autant que possible sur le processeur et passer en tant que constantes au matériau
  • Favoriser le déplacement des opérations du nuanceur de pixels vers le nuanceur de vertex
    • En règle générale, le nombre de sommets est beaucoup plus petit que le nombre de pixels (720p est de 921 600 pixels, 1080p est de 2 073 600 pixels, et ainsi de suite)

Supprimer les étapes GPU

Les effets de post-traitement peuvent être coûteux et augmenter le taux de remplissage de votre application, y compris les techniques anticrénelage comme MSAA. Sur HoloLens, nous vous recommandons d’éviter ces techniques et d’autres étapes de nuanceur telles que la géométrie, la coque et les nuanceurs de calcul.

Recommandations sur la mémoire

Des opérations excessives d’allocation et de désallocation de mémoire peuvent entraîner des performances incohérentes, des images figées et d’autres comportements nuisibles. Il est particulièrement important de comprendre les considérations relatives à la mémoire lors du développement dans Unity, car la gestion de la mémoire est contrôlée par le récupérateur de mémoire.

Mise en pool d’objets

Le regroupement d’objets est une technique populaire pour réduire le coût des allocations continues et des désallocations d’objets. Pour la réaliser, vous devez allouer un grand pool d’objets identiques et réutiliser des instances inactives disponibles de ce pool au lieu de générer et détruire constamment des objets au fil du temps. Les pools d’objets conviennent parfaitement aux composants réutilisables qui ont une durée de vie variable pendant une application.

Voir aussi