Optimiser les performances pour Android XR avec Unity
Temps de lecture : 6 min
Le Samsung Galaxy XR est arrivé, avec la technologie Android XR ! Cet article de blog fait partie de notre Semaine Spotlight Android XR, au cours de laquelle nous fournissons des ressources (articles de blog, vidéos, exemples de code, etc.) conçues pour vous aider à apprendre, à 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, et nous voulions vous aider à obtenir les meilleures performances possibles pour votre application XR.
Si de mauvaises performances dans les jeux et les applications sur les appareils non XR peuvent être frustrantes pour l'utilisateur, dans le monde de la XR, les performances ne sont pas facultatives : elles sont fondamentales pour le succès de votre application. Si vous n'atteignez pas votre objectif de fréquence d'images en XR, cela peut entraîner des problèmes bien plus graves, comme le mal des transports.
Dans ce guide, nous allons vous présenter les optimisations de performances essentielles que vous devez comprendre pour le développement Android XR. Vous découvrirez quelles fonctionnalités offrent les meilleures performances, 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 de 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 avec une résolution plus élevée et réduit progressivement la résolution à mesure que vous vous éloignez du centre.
Le second est le mode de suivi oculaire, qui affiche spécifiquement la zone que vous regardez en détail, tout en réduisant la qualité affichée dans vos périphériques. Il 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 de leur vision périphérique, mais votre GPU remarquera certainement l'amélioration des performances.
Imaginez que vous créez une expérience de musée avec des artefacts 3D complexes. Sans rendu fovéal, vous auriez du mal à maintenir 90 fps en essayant d'afficher tout ce qui se trouve dans le champ de vision. Avec le rendu fovéal, vous pouvez conserver les détails high-poly là où l'utilisateur regarde, mais l'environnement en arrière-plan s'affiche avec une qualité inférieure. Vos utilisateurs ne remarqueront 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 qu'il faut afficher à différents niveaux de qualité, le sous-échantillonnage Vulkan gère l'affichage efficace des 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 de lisser 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 avoir de la place pour un élément interactif supplémentaire ou perdre des images pendant les moments intenses.
Fonctionnalités GPU pour les scènes complexes
Outre le rendu fovéal et le sous-échantillonnage Vulkan, certaines fonctionnalités du GPU réduisent les contraintes inutiles grâce à l'instanciation et à l'élimination intelligentes. Elles sont particulièrement efficaces pour les scènes complexes avec une géométrie répétée ou une occlusion importante.
Tiroir résident GPU
Le GPU Resident Drawer utilise automatiquement l'instanciation GPU pour réduire les appels de dessin et libérer du temps de traitement du processeur. Ainsi, au lieu que le CPU indique chaque objet individuellement au GPU, le GPU regroupe les objets similaires.
Cette fonctionnalité est particulièrement efficace pour les scènes de grande taille comportant des maillages répétés, comme des arbres dans une forêt, des meubles dans un immeuble de bureaux ou des 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 les ressources du GPU, ce qui libère 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. Cela permet d'économiser énormément de ressources GPU, que vous pouvez ensuite investir dans la logique de gameplay ou les calculs physiques.
GPU Occlusion Culling
L'occlusion culling par 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 les ressources de votre GPU pour 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, les environnements denses ou les scènes architecturales où les murs, les sols et les objets bloquent naturellement la vue.
Par exemple, imaginons que vous créez une expérience de maison multiroom. Lorsque l'utilisateur se trouve dans la salle de séjour, pourquoi gaspiller des cycles GPU pour afficher la cuisine entièrement détaillée, qui est complètement cachée derrière un mur ? L'occlusion culling GPU ignore automatiquement le rendu de ces objets masqués, ce qui vous donne plus de budget 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 afin de quantifier leur impact et de 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 composition 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 répétez l'opération. Cette approche basée sur les données vous permet de savoir que vous améliorez réellement les performances, plutôt que de vous contenter de suppositions.
Avant d'activer le rendu fovéal, le temps de rendu GPU peut être de 13 ms, ce qui dépasse votre budget de 11 ms. Activez le rendu fovéal, mesurez à nouveau et, avec un peu de chance, vous verrez le temps de rendu passer à 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 garantir des performances plus fluides sur un plus grand nombre de contenus.
Sans ces métriques, vous optimisez à l'aveugle. L'API Performance Metrics vous indique ce qui est réellement utile pour votre cas d'utilisation spécifique.
Frame Debugger
Le Frame Debugger est l'outil intégré d'Unity qui permet de comprendre exactement comment votre scène est affichée, image par image. Il affiche la séquence d'appels de dessin et vous permet de les parcourir pour vérifier que vos optimisations fonctionnent correctement.
Vous voulez vérifier que le SRP Batcher fonctionne ? Recherchez les entrées "RenderLoopNewBatcher" dans le Frame Debugger. Vérifier si le GPU Resident Drawer effectue correctement le traitement par lot ? Recherchez les entrées "Hybrid Batch Group". Ces confirmations visuelles vous aident à comprendre si vos paramètres d'optimisation sont bien 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 l'instanciation ou le traitement par lot ne fonctionnent pas correctement. Le Frame Debugger rend ces problèmes immédiatement visibles pour 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 résumé :
- Paramètres URP : désactivez le HDR et le post-traitement pour la XR mobile. Ces fonctionnalités ont un impact visuel minimal par rapport à leur coût en termes de performances sur le matériel mobile. Vous obtiendrez ainsi des gains de performances mesurables avec des différences visuelles à peine perceptibles.
- SRP Batcher : 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 modifications de l'é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 entre 72 FPS et 90 FPS en fonction de la complexité de la scène. Réduisez la fréquence d'images lors des séquences complexes pour maintenir la stabilité, puis augmentez-la lors des 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 de GPU inutiles qui nuisent aux performances sans apporter d'avantages pour la plupart des applications.
- Échelle de rendu URP : ce paramètre vous permet d'effectuer un rendu à une résolution réduite pour améliorer les performances ou d'augmenter la résolution du rendu 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'un simple critère technique. C'est ce qui fait la différence entre une expérience confortable et engageante, et une expérience qui donne la nausée ou met mal à l'aise. Les optimisations que nous avons abordées constituent votre boîte à outils pour atteindre ces objectifs de fréquence d'images essentiels sur les derniers appareils XR.
Voici votre feuille de route :
- Commencez par le rendu fovéal et le sous-échantillonnage Vulkan. Ces fonctionnalités spécifiques à la XR permettent de réaliser des économies immédiates et notables sur les GPU.
- Ajoutez GPU Resident Drawer et Occlusion Culling si vous avez des scènes complexes avec une géométrie répétée ou des espaces intérieurs.
- Surveillez tout avec l'API Performance Metrics pour vous assurer que vos modifications sont réellement utiles.
- Découvrez d'autres optimisations de l'URP pour améliorer les performances
Il est essentiel de mesurer et d'itérer en continu. Toutes les optimisations ne sont pas aussi bénéfiques pour tous les projets. Utilisez l'API Performance Metrics pour avoir une idée claire de ce qui est réellement utile pour votre cas d'utilisation spécifique.
Étapes suivantes : 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 sur toutes les fonctionnalités d'Android XR
-
Actualités sur les produitsNous sommes heureux d'annoncer que la compatibilité officielle avec Unreal Engine et Godot est désormais disponible pour Android XR. Nous lançons également de nouveaux outils conçus pour booster votre productivité et activer de nouvelles fonctionnalités XR : Android XR Engine Hub et Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Temps de lecture : 4 min -
Actualités sur les produitsÀ mesure que le développement agentique s'accélère, l'ingénierie Android atteint une nouvelle frontière passionnante : passer de la complétion de code assistée à des agents qui s'exécutent de bout en bout sous votre direction. Vous disposez d'un choix et d'une flexibilité totaux concernant les modèles et les agents que vous utilisez.
Jason Buchel • Temps de lecture : 3 min -
Actualités sur les produitsAujourd'hui, nous avons expliqué comment nous faisions évoluer notre vision "plus qu'un magasin". De l'onglet "Vous", qui sert désormais d'espace personnel à plus de 250 millions d'utilisateurs actifs par mois, à notre plate-forme de jeux unifiée qui connecte plus de 700 millions de profils de joueurs, Google Play répond aux besoins des utilisateurs où qu'ils se trouvent.
Paul Feng • Temps de lecture : 3 min
Recevez chaque semaine les dernières informations sur le développement Android dans votre boîte de réception.