Partager via


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

Cet article présente l’importance des performances pour votre application Mixed Reality. Si votre application ne s’exécute pas à une fréquence d’images optimale, l’expérience utilisateur peut en souffrir. Les hologrammes semblent instables et le suivi de la tête de l’environnement devient inexact, ce qui entraîne une mauvaise expérience pour l’utilisateur. Considérez les performances comme une fonctionnalité de première classe pour le développement de réalité mixte, et non une tâche soignée.

Les valeurs de fréquence d’images performantes pour chaque plateforme cible sont répertoriées dans le tableau suivant.

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

Le framework 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, consultez l’article Recommandations en matière de performances pour Unity.

Présentation des goulots d’étranglement des performances

Si votre application a une fréquence d’images sous-performante, la première étape consiste à analyser et comprendre où votre application est gourmande en calculs. Deux processeurs principaux gèrent le travail de rendu de votre scène : le processeur et le GPU. Chaque processeur gère différents aspects de votre application Mixed Reality. Les trois principaux endroits 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 le traitement des entrées, des animations, de la physique et d’autres logiques d’application.
  2. Thread de rendu - PROCESSEUR en GPU - Responsable de l’envoi de vos appels de dessin au GPU. Lorsque votre application souhaite afficher 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 généralement 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 des sections suivantes pour comprendre où votre application particulière est engorgement.

Comment analyser votre application

De nombreux outils 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 qui vous aideront à 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 de la 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’images des applications augmente, alors vous êtes probablement lié au GPU
  2. Fréquence d’images d’application inchangée, alors vous êtes probablement lié à l’UC

Remarque

Unity permet de modifier facilement la résolution de la cible de rendu de votre application au moment de l’exécution via la propriété XRSettings.renderViewportScale . L’image finale présentée sur l’appareil a une résolution fixe. La plateforme échantillonnera 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 du processeur

En règle générale, la plupart des travaux dans une application de réalité mixte sur le processeur impliquent 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 cinématique inverse, recherche de chemin)

Recommandations en matière de performances GPU

Comprendre la bande passante et le taux de remplissage

Lors du rendu d’une trame sur le GPU, une application est liée par la bande passante mémoire ou la vitesse de remplissage.

  • La bande passante mémoire est le taux de lectures et d’écritures que le GPU peut effectuer à 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.

Remarque

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

La bande passante 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, de sorte que la réduction du nombre de polygones dans votre scène réduit le temps de rendu. Il existe d’autres facteurs qui 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 dépassement

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

Shaders

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

  1. Détermination des sommets à dessiner et de leur emplacement dans l’espace d’écran (nuanceur de vertex)
    • Le nuanceur de 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 ont également un prix. La réduction du nombre d’opérations calculées dans les nuanceurs peut réduire considérablement 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 une addition en même temps
  • Précalculez autant que possible sur le processeur et passez en tant que constantes au matériau
  • Favoriser les opérations de déplacement 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 du GPU

Les effets de post-traitement peuvent être coûteux et augmenter le taux de remplissage de votre application, y compris les techniques d’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 relatives à la mémoire

Les opérations d’allocation et de désallocation de mémoire excessives peuvent entraîner des performances incohérentes, des images figées et d’autres comportements préjudiciables. 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.

Regroupement 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 ce faire, allouez un grand pool d’objets identiques et réutilisez les instances inactives disponibles à partir de ce pool au lieu de générer et de détruire constamment des objets au fil du temps. Les pools d’objets sont parfaits pour les composants réutilisables dont la durée de vie est variable au cours d’une application.

Voir aussi