Actualités sur les produits
Optimiser les performances pour Android XR avec Unity
Temps de lecture : 6 min
Le Samsung Galaxy XR est disponible et fonctionne 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, et nous voulions vous aider à obtenir les meilleures performances possibles de votre application XR.
Si les performances médiocres des jeux et des 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 objectif de fréquence d'images 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 plus grands gains de 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 images par seconde (conformément à nos consignes relatives à la qualité de lecture)
- Facultatif : 90 images par seconde avec un budget de 11 ms par image
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 à une résolution plus élevée et réduit progressivement la résolution à mesure que vous regardez plus loin.
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 dans leur vision périphérique, mais votre GPU constatera certainement l'amélioration des performances.
Imaginez que vous créez une expérience de musée avec des artefacts 3D complexes. Sans le rendu fovéal, vous auriez du mal à maintenir 90 images par seconde en essayant de tout afficher 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 affiché 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 qui doit être affiché à différents niveaux de qualité, le sous-échantillonnage Vulkan gère la manière d'afficher 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 de lisser les bords irréguliers de 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 signifie que les commandes détaillées sont affichées de manière nette, mais 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 lors de moments intenses.
Fonctionnalités GPU pour les scènes complexes
Outre le rendu fovéal et le sous-échantillonnage Vulkan, certaines fonctionnalités 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.
GPU Resident Drawer
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 processeur informe le GPU de chaque objet individuellement, le GPU regroupe les objets similaires.
Cette fonctionnalité est plus efficace pour les scènes volumineuses 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 processeur. 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. Il s'agit d'une économie massive de GPU que vous pouvez ensuite investir dans la logique de jeu ou les calculs physiques.
GPU Occlusion Culling
GPU Occlusion Culling utilise le GPU au lieu du processeur pour identifier et ignorer le rendu des objets masqués. Il détecte automatiquement ce qui est occlus (masqué) derrière d'autres objets, de sorte que vous ne gaspillez pas votre GPU sur des éléments que l'utilisateur ne peut pas voir.
Cette fonctionnalité est particulièrement puissante dans les espaces intérieurs avec 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 à plusieurs pièces. Lorsque l'utilisateur se trouve dans le salon, pourquoi gaspiller des cycles GPU pour afficher la cuisine entièrement détaillée qui est complètement masquée derrière un mur ? GPU Occlusion Culling ignore automatiquement le rendu de ces objets masqués, ce qui vous donne plus de budget de performances 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 fournit une surveillance en temps réel de l'utilisation de la mémoire, des performances du processeur et des performances du GPU de vos applications. Elle vous fournit des données complètes à partir des couches de compositeur et d'exécution, ce qui vous permet de voir exactement ce qui se passe dans votre application.
Établissez une base de référence avant d'apporter vos modifications, appliquez une optimisation, mesurez l'impact et itérez. Cette approche basée sur les données signifie que vous savez que vous améliorez réellement les performances au lieu de deviner.
Avant d'activer le rendu fovéal, le temps de rendu de votre GPU peut être de 13 ms, ce qui dépasse votre budget de 11 ms. Activez le rendu fovéal, mesurez à nouveau et, espérons-le, vous verrez qu'il passe à 9 ms. Vous avez ainsi gagné 4 ms 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 large éventail de contenus.
Sans ces métriques, vous optimisez à l'aveugle. L'API Performance Metrics vous indique la vérité sur ce qui aide réellement votre cas d'utilisation spécifique.
Débogueur d'images
Le débogueur d'images est l'outil intégré d'Unity qui permet de comprendre exactement comment votre scène est affichée, image par image. Il vous montre 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 SRP Batcher fonctionne ? Recherchez les entrées "RenderLoopNewBatcher" dans le débogueur d'images. Vous voulez vérifier si le GPU Resident Drawer regroupe correctement les éléments ? Recherchez les entrées "Hybrid Batch Group". Ces confirmations visuelles vous aident à comprendre si vos paramètres d'optimisation prennent réellement effet.
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 d'images rend ces problèmes immédiatement visibles afin que vous puissiez les résoudre.
Optimisations supplémentaires
Outre les optimisations que nous avons abordées ci-dessus, notre guide complet sur les performances couvre également quelques optimisations supplémentaires. Voici un résumé rapide :
- 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 de performances sur le matériel mobile. Vous obtiendrez donc 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 processeur consacré au rendu.
- Fréquence d'actualisation de l'écran : ajustez dynamiquement entre 72 et 90 images par seconde 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 shader. 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 d'effectuer le 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'une case à cocher technique. Elles font la différence entre une expérience confortable et engageante et une expérience qui met mal à l'aise les utilisateurs. Les optimisations que nous avons abordées sont votre boîte à outils pour atteindre ces objectifs de fréquence d'images critiques 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 offrent des économies GPU immédiates et notables.
- Ajoutez le GPU Resident Drawer et l'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 URP pour une marge de performances supplémentaire.
Il est essentiel de mesurer en continu et d'itérer. Toutes les optimisations ne profiteront pas à tous les projets de la même manière. Utilisez donc l'API Performance Metrics pour avoir une idée claire de ce qui aide réellement votre cas d'utilisation spécifique.
Prochaines étapes : développer vos compétences
Vous voulez en savoir plus ? Consultez ces ressources :
- Guide sur les 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 Android XR
Lire la suite
-
Actualités sur les produits
Nous sommes heureux de lancer la Preview développeur 4 du SDK Android XR, en continuant de nous concentrer sur l'unification du développement inter-appareils pour les casques, les lunettes XR filaires et les lunettes intelligentes.
Amy Zeppenfeld, Stevan Silva • Temps de lecture : 5 min
-
Actualités sur les produits
Nous sommes ravis de voir les développeurs continuer à proposer leurs applications et expériences sur Android for Cars. Au cours de l'année écoulée, nous avons continué à constater une forte croissance et une forte dynamique dans l'écosystème d'applications sur Android Auto et les voitures avec Google intégré.
Jan Kleinert, Noam Gefen, Thomas Weathers • Temps de lecture : 3 min
-
Actualités sur les produits
Nous sommes heureux de vous présenter Wear OS 7, une mise à jour majeure qui apporte une nouvelle ère d'efficacité énergétique et d'intelligence aux utilisateurs et aux développeurs.
John Zoeller • Temps de lecture : 9 min
Restez informé
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.