Actualités des produits

Optimiser les performances pour Android XR avec Unity

Temps de lecture : 6 min
Luke Hopkins
Ingénieur en relations avec les développeurs, Android

Samsung Galaxy XR est disponible, avec Android XR ! Cet article de blog fait partie de notre Semaine spéciale Android XR, au cours de laquelle nous vous proposons des ressources (articles de blog, vidéos, exemples de code, etc.) conçues pour vous aider à découvrir, créer et préparer vos applications pour Android XR.  

Cette semaine, Samsung a lancé le Galaxy XR, conçu en collaboration avec Google et Qualcomm. C'est une période passionnante pour les développeurs. Nous voulions vous aider à obtenir les meilleures performances possibles pour votre application XR.

Si les performances médiocres des jeux et applications sur les appareils non XR peuvent être frustrantes pour l'utilisateur, dans le monde de la XR, les performances ne sont pas seulement facultatives, elles sont fondamentales pour le succès de votre application. Si vous manquez votre fréquence d'images cible dans la XR, cela peut entraîner des problèmes beaucoup plus graves, comme le mal des transports. 

Dans ce guide, nous vous présenterons les optimisations de performances essentielles que vous devez comprendre pour le développement Android XR. Vous découvrirez les fonctionnalités qui offrent les gains de performances les plus importants, quand les utiliser et comment elles fonctionnent ensemble pour vous aider à atteindre vos objectifs de fréquence d'images.

Voici ce que nous visons : 

  • Minimum  : 72 FPS (conformément à nos consignes relatives à la qualité de lecture)
  • Facultatif  : 90 FPS avec un budget de 11 ms par frame

Pour en savoir plus sur l'importance de maintenir une fréquence d'images aussi élevée, consultez nos consignes relatives aux performances.   

Fonctionnalités de performances spécifiques à la XR

Nous allons commencer par aborder deux fonctionnalités de performances spécifiques à la XR : le rendu fovéal et le sous-échantillonnage Vulkan. 

Rendu fovéal

Le rendu fovéal est une optimisation qui comporte deux modes. Le premier est un mode statique qui affiche le centre de l'écran à une résolution plus élevée et diminue progressivement la résolution à mesure que vous regardez plus loin.

Le second est le mode Eye Tracking, qui affiche en détail la zone que vous regardez, tout en réduisant la qualité des éléments périphériques. Elle imite essentiellement le fonctionnement de la vision humaine, où nous ne voyons les détails que dans la zone spécifique sur laquelle nous nous concentrons.

Le rendu fovéal réduit considérablement la charge de travail du GPU sans sacrifier la qualité d'image perçue par l'utilisateur. L'avantage du rendu fovéal est que les utilisateurs ne remarqueront pas la qualité réduite dans leur vision périphérique, mais votre GPU remarquera certainement l'amélioration des performances.

Imaginez que vous créez une expérience muséale avec des objets 3D complexes. Sans le rendu fovéal, vous auriez du mal à maintenir 90 FPS en essayant de tout rendre dans le champ de vision. Avec le rendu fovéal, vous pouvez conserver ces détails haute résolution là où l'utilisateur regarde, mais l'environnement d'arrière-plan est rendu avec une qualité inférieure. Vos utilisateurs ne verront pas la différence, mais vous aurez la possibilité d'ajouter plus de détails à votre scène.

Sous-échantillonnage Vulkan

Le sous-échantillonnage Vulkan est le meilleur ami du rendu fovéal. Alors que le rendu fovéal décide de ce qui doit être rendu à différents niveaux de qualité, le sous-échantillonnage Vulkan gère la manière de rendre efficacement les différents niveaux de qualité à l'aide de cartes de densité de fragments.

Combiné au rendu fovéal, le sous-échantillonnage Vulkan vous offre 0,5 ms de performances supplémentaires. Il permet également d'adoucir les bords irréguliers dans votre vision périphérique, ce qui rend l'image globale plus nette.

Par exemple, dans un jeu de simulation de vol où les utilisateurs se concentrent sur les instruments et les commandes, la combinaison du rendu fovéal et du sous-échantillonnage Vulkan permet d'afficher les commandes détaillées de manière nette, tandis que la structure périphérique du cockpit utilise moins de ressources. Ces 0,5 ms supplémentaires ne semblent pas beaucoup, mais elles font la différence entre pouvoir ajouter un élément interactif ou perdre des frames lors de moments intenses.

Fonctionnalités GPU pour les scènes complexes

En plus du rendu fovéal et du sous-échantillonnage Vulkan, certaines fonctionnalités du GPU réduisent la charge inutile grâce à l'instanciation et à la suppression intelligentes. Elles sont particulièrement efficaces pour les scènes complexes avec une géométrie répétée ou une occlusion importante.

Drawer de résidence du GPU

Le panneau Résident du GPU utilise automatiquement l'instanciation du GPU pour réduire les appels de dessin et libérer du temps de traitement du CPU. Ainsi, au lieu que le CPU informe le GPU de chaque objet individuellement, le GPU regroupe les objets similaires.

Cette fonctionnalité est particulièrement efficace pour les grandes scènes avec des maillages répétés, comme les arbres dans une forêt, les meubles dans un immeuble de bureaux ou les accessoires dispersés dans un environnement.

Imaginez une scène de forêt avec 200 arbres utilisant le même maillage de base. Sans le GPU Resident Drawer, vous avez 200 appels de dessin qui consomment le GPU, libérant ainsi le CPU. Lorsque vous activez cette fonctionnalité, le GPU instancie intelligemment ces arbres, ce qui devrait réduire le nombre d'appels de dessin à seulement 5 à 10. Vous économisez ainsi énormément de ressources GPU, que vous pouvez ensuite investir dans la logique de jeu ou les calculs physiques.

Culling d'occlusion du GPU

L'élimination par occlusion du GPU utilise le GPU au lieu du CPU pour identifier et ignorer le rendu des objets masqués. Il détecte automatiquement ce qui est masqué derrière d'autres objets, ce qui vous évite de gaspiller votre GPU sur des éléments que l'utilisateur ne peut pas voir.

Cette fonctionnalité est particulièrement utile dans les espaces intérieurs comportant plusieurs pièces, dans les environnements denses ou dans les scènes architecturales où les murs, les sols et les objets bloquent naturellement la vue.

Par exemple, imaginons que vous développiez une expérience pour une maison multi-pièces. Lorsque l'utilisateur se trouve dans le salon, pourquoi gaspiller des cycles GPU pour afficher la cuisine dans les moindres détails alors qu'elle est complètement cachée derrière un mur ? L'occlusion culling du GPU évite automatiquement le rendu des objets masqués, ce qui vous donne plus de marge de performance pour ce qui est réellement visible.

Surveiller vos performances

Il ne suffit pas d'utiliser ces fonctionnalités. Vous devez également mesurer vos optimisations pour quantifier leur impact et vérifier que vos modifications fonctionnent réellement.

API Performance Metrics

L'API Performance Metrics permet de surveiller en temps réel l'utilisation de la mémoire, les performances du processeur et les performances du GPU de vos applications. Il vous fournit des données complètes provenant des couches de compositeur et d'exécution, ce qui vous permet de voir exactement ce qui se passe dans votre application.

Établissez une référence avant d'apporter des modifications, appliquez une optimisation, mesurez l'impact et itérez. Cette approche basée sur les données vous permet de savoir que vous améliorez réellement vos performances, au lieu de le deviner.

Avant d'activer le rendu fovéal, le temps de frame de votre GPU peut être de 13 ms, ce qui dépasse votre budget de 11 ms. Activez le rendu fovéal, effectuez une nouvelle mesure et, normalement, vous devriez constater une diminution à 9 ms. Vous avez ainsi gagné 4 ms de marge pour ajouter plus de détails à votre scène, améliorer la qualité visuelle ailleurs ou simplement assurer des performances plus fluides pour un plus large éventail de contenus.

Sans ces métriques, vous optimisez vos campagnes à l'aveugle. L'API Performance Metrics vous indique ce qui fonctionne réellement pour votre cas d'utilisation spécifique.

Frame Debugger

Le Frame Debugger est l'outil intégré de Unity qui vous permet de comprendre exactement comment votre scène est rendue, frame par frame. Il affiche la séquence des appels de dessin et vous permet de les parcourir pour vérifier que vos optimisations fonctionnent correctement.

Vous voulez vérifier que le batcher SRP fonctionne ? Recherchez les entrées "RenderLoopNewBatcher" dans le débogueur de frame. Vous souhaitez vérifier si le tiroir résident GPU regroupe correctement les éléments par lots ? Recherchez les entrées "Groupe de lots hybrides". Ces confirmations visuelles vous aident à comprendre si vos paramètres d'optimisation sont réellement appliqués.

Parcourez les 50 premiers appels de dessin de votre scène. Si vous voyez des objets similaires dessinés individuellement au lieu d'être regroupés, cela signifie que votre instanciation ou votre regroupement ne fonctionnent pas correctement. Le débogueur de frame rend ces problèmes immédiatement visibles afin que vous puissiez les résoudre.

Optimisations supplémentaires

En plus des optimisations que nous avons abordées ci-dessus, notre guide complet sur les performances couvre également quelques autres optimisations supplémentaires. Voici un bref récapitulatif :

  • Paramètres URP : désactivez le HDR et le post-traitement pour le mobile XR. Ces fonctionnalités ont un impact visuel minimal par rapport à leur coût en termes de performances sur le matériel mobile. Vous obtiendrez donc des gains de performances mesurables avec des différences visuelles à peine perceptibles.
  • Batcher SRP : réduit la surcharge du processeur pour les scènes comportant de nombreux matériaux utilisant la même variante de nuanceur. En minimisant les changements d'état de rendu entre les appels de dessin, vous pouvez réduire considérablement le temps CPU consacré au rendu.
  • Fréquence d'actualisation de l'écran : ajustez dynamiquement la fréquence d'actualisation entre 72 et 90 FPS en fonction de la complexité de la scène. Réduisez la fréquence d'images pendant les séquences complexes pour maintenir la stabilité, puis augmentez-la pendant les moments plus simples pour une interaction ultra-fluide.
  • Textures de profondeur/opaques : désactivez-les, sauf si elles sont spécifiquement nécessaires pour les effets de nuanceur. Elles entraînent des opérations de copie GPU inutiles qui gaspillent des performances sans apporter d'avantages à la plupart des applications.
  • Échelle de rendu URP  : ce paramètre vous permet de rendre le contenu à une résolution réduite pour améliorer les performances ou d'augmenter la résolution pour améliorer la qualité visuelle.

Pour obtenir des instructions détaillées sur ces optimisations et d'autres, consultez notre guide complet sur les performances Unity pour Android XR.

Conclusion

Les performances de votre application XR ne sont pas qu'une simple case à cocher technique. C'est ce qui fait la différence entre une expérience confortable et stimulante, et une expérience qui met mal à l'aise ou donne la nausée aux utilisateurs. Les optimisations que nous avons abordées constituent votre boîte à outils pour atteindre les fréquences d'images critiques sur les derniers appareils XR.

Voici votre feuille de route :

  1. Commencez par le rendu fovéal et le sous-échantillonnage Vulkan. Ces fonctionnalités spécifiques à la XR permettent de réaliser des économies de GPU immédiates et notables.
  2. Ajoutez le tiroir de résidence du GPU et le culling d'occlusion si vous avez des scènes complexes avec une géométrie répétée ou des espaces intérieurs.
  3. Surveillez tout avec l'API Performance Metrics pour vous assurer que vos modifications sont réellement utiles.
  4. Découvrez d'autres optimisations URP pour améliorer les performances

Il est essentiel de mesurer en continu et d'itérer. Toutes les optimisations ne sont pas aussi utiles pour tous les projets. Utilisez donc l'API Performance Metrics pour savoir précisément ce qui est utile pour votre cas d'utilisation spécifique.

Étape suivante : développer vos compétences

Vous voulez en savoir plus ? Consultez ces ressources :

  • Guide des performances Unity pour Android XR : instructions d'implémentation détaillées pour toutes les fonctionnalités abordées ici.
  • Premiers pas avec Unity et Android XR : configurez votre environnement de développement et commencez à créer.
  • Documentation pour les développeurs Android XR : guides complets pour toutes les fonctionnalités d'Android XR
Écrit par :

Lire la suite