• Jeux
  • Industrie
  • Ressources
  • Communauté
  • Apprentissage
  • Assistance
Développement
Moteur Unity
Créez des jeux 2D et 3D pour n'importe quelle plateforme
TéléchargerOffres et tarifs
Monétisation
Achat intégré (IAP)
Découvrez et gérez les IAP à travers les magasins
Mediation
Maximisez les revenus et optimisez la monétisation
Qualité des annonces
Protégez l'expérience utilisateur de votre application
Tapjoy
Construisez une fidélité utilisateur à long terme
Tous les produits de monétisation
Acquisition de nouveaux joueurs
Acquisition de nouveaux joueurs
Faites-vous découvrir et acquérez des utilisateurs mobiles
Unity Vector AI
Connectez les joueurs avec les bons jeux
Aura publicité sur appareil
Atteignez les utilisateurs sur l'appareil au moment de l'engagement maximal
Tous les produits de croissance
Cas d’utilisation
Collaboration 3D
Construisez et révisez des projets 3D en temps réel
Formation immersive
Entraînez-vous dans des environnements immersifs
Expériences client
Créez des expériences interactives 3D
Toutes les solutions sectorielles
Secteurs
Fabrication
Atteindre l'excellence opérationnelle
Distribution
Transformer les expériences en magasin en expériences en ligne
Automobile
Élever l'innovation et les expériences en voiture
Tous les secteurs
Bibliothèque technique
Documentation
Manuels d'utilisation officiels et références API
Outils de développement
Versions de publication et suivi des problèmes
Feuille de route
Examiner les fonctionnalités à venir
Glossaire
Bibliothèque de termes techniques
Informations
Études de cas
Histoires de succès dans le monde réel
Guides des meilleures pratiques
Conseils et astuces d'experts
Toutes les ressources
Nouveautés
Blog
Mises à jour, informations et conseils techniques
Actualités
Actualités, histoires et centre de presse
Centre communautaire
Discussions
Discuter, résoudre des problèmes et se connecter
Événements
Événements mondiaux et locaux
Histoires de la communauté
Made with Unity
Mise en avant des créateurs Unity
Diffusions en direct
Rejoignez les développeurs, créateurs et initiés
Unity Awards
Célébration des créateurs Unity dans le monde entier
Pour tous les niveaux
Unity Learn
Maîtrisez les compétences Unity gratuitement
Formation professionnelle
Améliorez votre équipe avec des formateurs Unity
Vous découvrez Unity ?
Démarrer
Démarrez votre apprentissage
Parcours essentiels Unity
Vous découvrez Unity ? Commencez votre parcours
Guides pratiques
Conseils pratiques et meilleures pratiques
Formation
Pour les étudiants
Démarrez votre carrière
Pour les enseignants
Boostez votre enseignement
Licence d'enseignement subventionnée
Apportez la puissance de Unity à votre institution
Certifications
Prouvez votre maîtrise de Unity
Options d'assistance
Obtenir de l'aide
Vous aider à réussir avec Unity
Plans de succès
Atteignez vos objectifs plus rapidement avec un support expert
FAQ
Réponses aux questions courantes
Contactez-nous.
Connectez-vous avec notre équipe
Offres et tarifs
Langue
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
Réseaux sociaux
Devise
Acheter
  • Produits
  • Unity Ads
  • Abonnement
  • Asset Store Unity
  • Revendeurs
Formation
  • Participants
  • Formateurs
  • Établissements
  • Certification
  • Formation
  • Programme de développement des compétences
Télécharger
  • Hub Unity
  • Télécharger des archives
  • Programme version Bêta
Unity Labs
  • Laboratoires
  • Publications
Ressources
  • Plateforme d'apprentissage
  • Communauté
  • Documentation
  • Unity QA
  • FAQ
  • État des services
  • Études de cas
  • Made with Unity
Unity
  • Notre entreprise
  • Newsletter
  • Blog
  • Événements
  • Carrières
  • Aide
  • Presse
  • Partenaires
  • Investisseurs
  • Affiliés
  • Sécurité
  • Impact sociétal
  • Inclusion et diversité
  • Contactez-nous.
Copyright © 2025 Unity Technologies
  • Mentions légales
  • Politique de confidentialité
  • Cookies
  • Ne vendez ou ne partagez pas mes informations personnelles

« Unity », ses logos et autres marques sont des marques commerciales ou des marques commerciales déposées de Unity Technologies ou de ses filiales aux États-Unis et dans d'autres pays (pour en savoir plus, cliquez ici). Les autres noms ou marques cités sont des marques commerciales de leurs propriétaires respectifs.

Hero background image

Gestion de l'utilisation du GPU pour les jeux PC et consoles

Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.
Cliquez ici.

Il s'agit du troisième d'une série d'articles qui déballe des conseils d'optimisation pour vos projets Unity. Utilisez-les comme guide pour fonctionner à des fréquences d'image plus élevées avec moins de ressources. Une fois que vous aurez testé ces bonnes pratiques, n'oubliez pas de consulter les autres pages de la série :

  • Configurer votre projet Unity pour de meilleures performances
  • Optimisation des performances pour les graphismes haut de gamme
  • Programmation avancée et architecture de code
  • Performances physiques améliorées pour une expérience de jeu fluide

Consultez nos derniers guides d'optimisation pour les développeurs et artistes Unity 6 :

  • Optimisez la performance de vos jeux pour appareils mobiles, la réalité étendue et le Web dans Unity
  • Optimisez la performance de vos jeux pour les consoles et les PC dans Unity
  • Optimisez l'utilisation du GPU dans les jeux PC et consoles
  • Utiliser le traitement par lots des requêtes
  • Vérifiez le débogueur de frames
  • Optimisez le taux de remplissage et réduisez le surcharge
  • Réduisez le nombre de lots
  • Faites attention au gommage
  • Bénéficiez d'une résolution dynamique
  • Vérifier plusieurs vues de caméra
  • Utiliser la fonctionnalité Render Objects Renderer
  • Utiliser les volumes de passes personnalisés en HDRP
  • Niveau de détail d'utilisation
  • Profil des effets de post-traitement
  • Évitez les shaders Tessellation
  • Remplacer les shaders géométriques par des shaders de calcul
  • Viser un bon taux d'occupation du front d'onde
  • Utiliser le calcul asynchrone
  • Essayez GPU Resident Drawer
  • Utiliser le gommage d'occlusion du GPU

Optimisation de l'utilisation du GPU dans les jeux PC et consoles

Comprenez les limites de votre matériel cible et comment profiler le GPU pour optimiser le rendu de vos graphismes. Essayez ces conseils et bonnes pratiques pour réduire la charge de travail du GPU.

Lors du profilage, il est utile de commencer par un benchmark pour vous indiquer les résultats de profilage que vous devez attendre de GPU spécifiques.

Consultez GFXBench pour une grande liste de références standard pour les GPU et les cartes graphiques. Le site Web offre un bon aperçu des GPU actuels disponibles et de la façon dont ils s'empilent les uns sur les autres.

Regardez les statistiques de rendu

Cliquez sur le bouton Statistiques en haut à droite de la fenêtre Game. Cette fenêtre vous montre des informations de rendu en temps réel sur votre application en mode lecture. Utilisez ces données pour optimiser les performances :

- FPS : Images par seconde

- CPU Main : Temps total nécessaire pour traiter une image (et mettre à jour l'éditeur pour Windows)

- Rendu du processeur : Temps total de rendu d'une image de la vue du jeu

- Lots : Groupes de requêtes à réunir

- Triangles et sommets : Géométrie de maillage

- Appels SetPass : Le nombre de fois où Unity doit changer de shader passe pour afficher les GameObjects à l'écran ; chaque passe peut introduire une surcharge supplémentaire du processeur.

Remarque : FPS dans l'Éditeur ne se traduit pas nécessairement par des performances de compilation. Nous vous recommandons de profiler votre compilation pour des résultats aussi précis que possible. Le temps d'image en millisecondes est un indicateur plus précis que lors de l'étalonnage. Apprenez-en plus dans l'ebook Guide ultime sur le profilage des jeux Unity (édition Unity 6).

Supprimez les visages invisibles pour optimiser vos modèles.
Supprimez les visages invisibles pour optimiser vos modèles.

Utiliser le traitement par lots des requêtes

Pour dessiner un GameObject, Unity lance un appel de tirage à l'API graphique (par exemple OpenGL, Vulkan ou Direct3D). Chaque requête est gourmande en ressources. Les changements d'état entre les requêtes, tels que le changement de matériau, peuvent entraîner une surcharge de performances du côté du processeur.

Le matériel PC et console peut pousser beaucoup de requêtes, mais le surcharge de chaque requête est toujours assez élevé pour justifier d'essayer de les réduire. Sur les appareils mobiles, l'optimisation des requêtes est vitale. Cela est possible grâce au traitement par lots des requêtes.

Le traitement par lots des requêtes minimise ces changements d'état et réduit le coût du processeur pour le rendu des objets. Unity peut combiner plusieurs objets en moins de lots en utilisant plusieurs techniques :

- SRP Batching: Si vous utilisez HDRP ou URP, activez le SRP Batcher dans votre ressource Pipeline sous Advanced. Lorsque vous utilisez des shaders compatibles, le SRP Batcher réduit la configuration du GPU entre les requêtes et rend les données matérielles persistantes dans la mémoire du GPU. Cela peut accélérer considérablement les temps de rendu de votre processeur. Utilisez moins de variantes de shader avec un minimum de mots-clés pour améliorer le traitement par lots SRP. Consultez cette documentation SRP pour voir comment votre projet peut tirer parti de ce flux de rendu.

- Instancing GPU : Si vous avez un grand nombre d'objets identiques (par exemple, des bâtiments, des arbres, de l'herbe, etc. avec le même maillage et le même matériau), utilisez l'instanciation GPU. Cette technique les traite par lots en utilisant du matériel graphique. Pour activer l'instanciation du GPU, sélectionnez votre matériau dans la fenêtre Project et, dans l'Inspector, cochez la case Activer l'instanciation.

- Traitement par lots statiques : Pour la géométrie non mouvante, Unity peut réduire les requêtes pour tous les maillages partageant le même matériau. Il est plus efficace que le traitement par lots dynamique, mais il utilise plus de mémoire.Marquez tous les maillages qui ne bougent jamais comme statiques de lots dans l'Inspector. Unity combine tous les maillages statiques en un grand maillage au moment de la compilation. L'utilitaire StaticBatching vous permet également de créer vous-même ces lots statiques lors de l'exécution (par exemple, après avoir généré un niveau procédural de pièces non mobiles).

- Traitement par lots dynamique : Pour les petits maillages, Unity peut regrouper et transformer les sommets sur le processeur, puis les dessiner tous en une seule fois. Remarque : Ne l'utilisez pas à moins d'avoir suffisamment de maillages low-poly (pas plus de 300 sommets chacun et 900 attributs de vertex au total). Sinon, l'activer fera perdre du temps au processeur à chercher de petits maillages à traiter par lots.

Vous pouvez maximiser le traitement par lots avec quelques règles simples :

- Utiliser le moins de textures possible dans une scène. Moins de textures nécessitent moins de matériaux uniques, ce qui les rend plus faciles à mélanger. En outre, utilisez des atlas de texture dans la mesure du possible.

- Faites toujours cuire des lightmaps à la plus grande taille possible de l'atlas. Moins de lightmaps nécessitent moins de changements d'état des matériaux, mais surveillez l'empreinte mémoire.

- Faites attention à ne pas invoquer de matériaux involontairement. Accéder à Renderer.material dans les scripts duplique le matériel et renvoie une référence à la nouvelle copie. Cela casse tout lot existant qui inclut déjà le matériau. Si vous souhaitez accéder à la matière de l'objet par lots, utilisez plutôt Renderer.sharedMaterial.

- Surveillez le nombre de lots statiques et dynamiques par rapport au nombre total de requêtes en utilisant le Profiler ou les statistiques de rendu lors des optimisations.

Veuillez consulter la documentation sur le traitement par lots pour en savoir plus.

SRP Batcher dans le moteur Unity
SRP Batcher vous aide à grouper les requêtes.

Vérifiez le débogueur de frames

Le Frame Debugger vous permet de figer la lecture sur une seule image et de montrer comment Unity construit une scène pour identifier les opportunités d'optimisation. Recherchez les GameObjects qui rendent inutilement et désactivez-les pour réduire les requêtes par image.

Note : Le Frame Debugger n'affiche pas les requêtes individuelles ou les changements d'état. Seuls les profileurs de GPU natifs vous fournissent des informations détaillées sur les requêtes et le timing. Cependant, le Frame Debugger peut toujours être très utile pour déboguer les problèmes de pipeline ou de traitement par lots.

Un avantage du débogueur de frames Unity est que vous pouvez relier un draw call à un GameObject spécifique dans la scène. Cela facilite l'investigation de certains problèmes qui ne sont peut-être pas possibles dans les débogueurs d'images externes.

Pour en savoir plus, lisez la documentation sur le débogueur d'images, puis consultez la section

Interface du Frame Debugger
La solution Frame Debugger décompose chaque frame de rendu.

Optimisez le taux de remplissage et réduisez le surcharge

Le taux de remplissage fait référence au nombre de pixels que le GPU peut rendre à l'écran chaque seconde.

Si votre jeu est limité par le taux de remplissage, cela signifie qu'il essaie de dessiner plus de pixels par image que le GPU ne peut en gérer.

Dessiner sur le même pixel plusieurs fois est appelé overdraw. Overdraw réduit le taux de remplissage et coûte une bande passante mémoire supplémentaire. Les causes les plus fréquentes d'overdraw sont :

- Géométrie opaque ou transparente s ' imbriquant

- Des shaders complexes, souvent avec plusieurs passes de rendu

- Particules non optimisées

- Superposition des éléments de l'IU

Bien que vous souhaitiez minimiser ses effets, il n'existe pas d'approche unique pour résoudre les problèmes d'overdraw. Commencez par expérimenter les facteurs ci-dessus pour réduire leur impact.

Réduisez le nombre de lots

Comme pour les autres plateformes, l'optimisation sur console implique souvent de réduire les lots de requêtes. Il existe quelques techniques qui pourraient vous aider.

- À l'aide du gommage d'occlusion, supprimez les objets cachés derrière les objets de premier plan et réduisez l'overdraw. Attention : cela nécessite un traitement supplémentaire du processeur. Utilisez donc le Profiler pour vous assurer que le déplacement du GPU vers le processeur est bénéfique.

- L'instanciation du GPU peut également réduire vos lots si vous avez de nombreux objets qui partagent le même maillage et le même matériau. Limiter le nombre de modèles dans votre scène peut améliorer les performances. Si c'est fait avec art, vous pouvez créer une scène complexe sans la rendre répétitive.

- Le SRP Batcher peut réduire la configuration du GPU entre les DrawCalls en groupant les commandes Bind et Draw GPU. Pour bénéficier de ce traitement par lots SRP, utilisez autant de matériaux que nécessaire, mais limitez-les à un petit nombre de shaders compatibles (par exemple, shaders éclairés et non éclairés dans les pipelines de rendu universel et HDRP).

Faites attention au gommage

Le gommage d'occlusion désactive les GameObjects qui sont entièrement cachés (occlus) par d'autres GameObjects. Cela empêche le processeur et le GPU d'utiliser le temps pour rendre des objets qui ne seront jamais vus par la caméra.

Le gommage se fait par caméra. Elle peut avoir un impact considérable sur les performances, en particulier lorsque plusieurs caméras sont activées simultanément. Unity utilise deux types de gommage, le gommage tronconique et le gommage occlusion.

Le gommage des troncs est effectué automatiquement sur chaque caméra. Il empêche le rendu des GameObjects qui se trouvent en dehors du frustum de vue, ce qui permet d'optimiser les performances.

Vous pouvez définir des distances de gommage manuellement via Camera.layerCullDistances. Cela vous permet de gommer les petits GameObjects à une distance inférieure à celle du farClipPlane par défaut.

Organisez les GameObjects en calques. Utilisez le tableau layerCullDistances pour attribuer à chacune des 32 couches une valeur inférieure à farClipPlane (ou utilisez 0 pour utiliser par défaut farClipPlane).

Unity gomme d'abord par couche, en ne conservant les GameObjects que sur les couches utilisées par la Caméra. Par la suite, le gommage de tronc supprime tous les GameObjects en dehors du tronc de caméra. Le gommage des troncs est effectué sous la forme d'une série de tâches pour tirer parti des threads de travail disponibles.

Chaque test de gommage de couche est très rapide (essentiellement juste une opération de masque de bits). Cependant, ce coût peut toujours s'additionner avec un très grand nombre de GameObjects. Si cela devient un problème pour votre projet, vous devrez peut-être implémenter un système pour diviser votre monde en « secteurs » et désactiver les secteurs qui ne sont pas en tronc de caméra afin d'alléger une partie de la pression sur le système de gommage des couches/frustums de Unity.

Le gommage d'occlusion supprime les GameObjects de la vue Game si la caméra ne peut pas les voir. Utilisez cette fonctionnalité pour empêcher le rendu d'objets cachés derrière d'autres objets, car ceux-ci peuvent toujours rendre et coûter des ressources. Par exemple, le rendu d'une autre pièce n'est pas nécessaire si une porte est fermée et que la caméra ne peut pas voir dans la pièce.

Activer le gommage d'occlusion peut augmenter considérablement les performances, mais peut également nécessiter plus d'espace disque, de temps de processeur et de mémoire vive. Unity précalcule les données d'occlusion pendant la compilation, puis doit les charger du disque à la mémoire vive pendant le chargement d'une scène.

Alors que le gommage des troncs en dehors de la vue de la caméra est automatique, le gommage des occlusions est un processus précalculé. Marquez simplement vos objets comme Static.Occluders ou Occludees, puis précalculez dans la boîte de dialogue Window > Rendering > Occlusion Culling.

Consultez le tutoriel Working with Occlusion Culling pour en savoir plus.

Interface d'Occlusion Culling
Un exemple d'occlusion culling

Bénéficiez d'une résolution dynamique

Autoriser la résolution dynamique est un paramètre de caméra qui vous permet d'adapter dynamiquement des cibles de rendu individuelles pour réduire la charge de travail sur le GPU. Dans les cas où la fréquence d'image de l'application diminue, vous pouvez réduire progressivement la résolution pour conserver une fréquence d'image cohérente.

Unity déclenche cette mise à l'échelle si les données de performance suggèrent que la fréquence d'image est sur le point de diminuer à la suite de l'utilisation du GPU. Vous pouvez également déclencher cette mise à l'échelle manuellement avec le script. Ceci est utile si vous abordez une section de l'application qui nécessite beaucoup de GPU. Si on l'adapte progressivement, la résolution dynamique peut être presque inaperçue.

Consultez la page du manuel de résolution dynamique pour plus d'informations et une liste des plateformes prises en charge.

Vérifier plusieurs vues de caméra

Parfois, vous aurez besoin de rendre votre jeu de plusieurs points de vue. Par exemple, il est courant dans un jeu FPS de dessiner séparément l'arme du joueur et l'environnement avec des champs de vision (FOV) différents. Cela empêche les objets du premier plan de se sentir trop déformés vus à travers le grand angle FOV de l'arrière-plan.

Vous pouvez utiliser Camera Stacking dans l'URP pour rendre plus d'une vue de caméra. Cependant, il y a encore beaucoup de gommage et de rendu effectué pour chaque caméra. Chaque caméra entraîne des surcharges, qu'elle effectue ou non un travail significatif. Utilisez uniquement les composants Camera requis pour le rendu. Sur les plateformes mobiles, chaque caméra active peut utiliser jusqu'à 1 ms de temps processeur, même en ne rendant rien.

Démonstration de Camera stacking
Camera Stacking dans l'URP : Camera Stacking dans l'URP : le pistolet et l'arrière-plan sont rendus avec des paramètres de caméra différents.

Utiliser la fonctionnalité Render Objects Renderer

Dans l'URP, au lieu d'utiliser plusieurs caméras, essayez une fonctionnalité Render Objects Renderer personnalisée. Sélectionnez Add Renderer Feature dans la ressource Renderer Data. Choisissez l'objet de rendu.

Lorsque vous écrasez chaque objet de rendu, vous pouvez :

- Associez-le à un événement et injectez-le dans un timing spécifique de la boucle de rendu

- Filtre par file d'attente de rendu (transparente ou opaque) et LayerMask

- Affecter les paramètres Depth et Stencil

- Modifier les paramètres de la caméra (champ de vision et décalage de position)

Créez un objet de rendu personnalisé pour remplacer les paramètres de rendu.
Créez un objet de rendu personnalisé pour remplacer les paramètres de rendu.

Utiliser les volumes de passes personnalisés en HDRP

En HDRP, vous pouvez utiliser des passes personnalisées à effet similaire. La configuration d ' un pass personnalisé à l ' aide d ' un volume personnalisé est analogue à celle d ' un volume HDRP.

Un Pass personnalisé vous permet de :

- Modifiez l'apparence des matériaux de votre scène

- Modifier l'ordre dans lequel Unity rend les GameObjects

- Lire les tampons de caméra dans les shaders

L'utilisation des volumes de passes personnalisés peut vous aider à éviter d'utiliser des caméras supplémentaires et les surcharges supplémentaires qui y sont associées. Les passes personnalisées offrent une flexibilité supplémentaire dans la façon dont elles peuvent interagir avec les shaders. Vous pouvez également étendre la classe Custom Pass avec C#.

Un volume de passes personnalisé en HDRP
Un volume de passes personnalisé en HDRP

Niveau de détail d'utilisation

Lorsque les objets se déplacent au loin, le niveau de détail (LOD) peut les ajuster ou les changer pour utiliser des maillages de basse résolution avec des matériaux et des shaders plus simples. Cela améliore les performances du GPU.

Consultez le cours Working with LODs sur Unity Learn pour en savoir plus.

Exemple de maillage utilisant un groupe LOD
Exemple de maillage utilisant un groupe LOD

Profil des effets de post-traitement

Profilez vos effets de post-traitement pour voir leur coût sur le GPU. Certains effets plein écran, comme Bloom et la profondeur de champ, peuvent coûter cher, mais expérimentez jusqu'à trouver un bon équilibre entre qualité visuelle et performance.

Le post-traitement a tendance à ne pas beaucoup fluctuer à l'exécution. Une fois que vous avez déterminé vos remplacements de volume, attribuez à vos effets de post une partie statique de votre budget d'image total.

Interface de post-traitement
Simplifiez au maximum les effets de post-traitement.

Évitez les shaders Tessellation

La tessellation subdivise les formes en petites versions. Cela peut améliorer les détails grâce à une géométrie accrue. Bien qu'il existe des exemples où la tessellation est logique, comme pour les écorces d'arbre réalistes, en général, évitez la tessellation sur les consoles. Ils peuvent coûter cher sur le GPU.

Remplacer les shaders géométriques par des shaders de calcul

Comme les shaders de tessellation, les shaders de géométrie et de sommet peuvent s'exécuter deux fois par image sur le GPU : une fois lors du pré-passage de profondeur, et une autre fois lors du passage d'ombre.

Si vous souhaitez générer ou modifier des données de sommet sur le GPU, un shader informatique est souvent un meilleur choix qu'un shader géométrique. Effectuer le travail dans un shader de calcul signifie que le shader de sommet qui rend la géométrie peut être relativement rapide et simple.

En savoir plus sur les concepts de base du shader.

Viser un bon taux d'occupation du front d'onde

Lorsque vous envoyez un appel de requête au GPU, ce travail se divise en plusieurs fronts d'onde que Unity distribue dans les SIMD disponibles au sein du GPU.

Chaque SIMD dispose d'un nombre maximum de fronts d'onde pouvant être exécutés en même temps. L'occupation du front d'onde fait référence au nombre de fronts d'onde actuellement utilisés par rapport au maximum. Cela mesure la façon dont vous utilisez le potentiel du GPU. Les outils d'analyse des performances spécifiques aux consoles montrent très en détail le taux d'occupation du front d'onde.

Dans l'exemple ci-dessous, les fronts d'onde des shaders de sommets apparaissent en vert. Les fronts d'onde des shaders de pixels apparaissent en bleu. Sur le graphique du bas, de nombreux fronts d'onde de shader de sommet apparaissent sans grande activité de shader de pixel. Cela montre une sous-utilisation du potentiel du GPU.

Si vous effectuez beaucoup de travail sur des shaders de vertex qui ne génèrent pas de pixels, cela peut indiquer une inefficacité. Bien qu'un faible taux d'occupation du front d'onde ne soit pas nécessairement mauvais, il s'agit d'un indicateur pour commencer à optimiser vos shaders et vérifier s'il y a d'autres goulots d'étranglement. Par exemple, si vous avez un décrochage dû à des opérations de mémoire ou de calcul, augmenter le taux d'occupation peut améliorer les performances. D'autre part, un trop grand nombre de fronts d'onde en vol peut entraîner un écrasement du cache et diminuer les performances.

Graphiques sur le rapport entre bonne et mauvaise occupation du front d'onde
Rapport entre bonne et mauvaise occupation du front d'onde

Utiliser le calcul asynchrone

Si vous avez des intervalles où vous sous-utilisez le GPU, Async Compute vous permet de déplacer le travail de shader de calcul utile en parallèle de votre file d'attente graphique. Cela permet de mieux utiliser ces ressources GPU.

Par exemple, lors de la génération de shadow map, le GPU effectue un rendu uniquement en profondeur. Très peu de travaux de shader de pixels se produisent à ce stade, et de nombreux fronts d'onde restent inoccupés.

Si vous pouvez synchroniser certains travaux de compute shader avec le rendu uniquement en profondeur, cela permet une meilleure utilisation globale du GPU. Les fronts d'onde inutilisés peuvent aider avec Screen Space Ambient Occlusion ou toute tâche qui complète le travail actuel.

Regardez cette session sur l'optimisation des performances des Unite

Async Compute peut déplacer les tâches du compute shader en parallèle des files d'attente graphique.
Async Compute peut déplacer les tâches du compute shader en parallèle des files d'attente graphique.

Essayez le tiroir résident du GPU

Le GPU Resident Drawer (disponible à la fois pour l'URP et le HDRP) est un système de rendu piloté par le GPU conçu pour optimiser le temps passé sur le processeur, offrant des avantages significatifs en termes de performances. Il prend en charge le rendu multiplateforme et est conçu pour fonctionner dès le départ avec des projets existants.

Le système peut être activé dans la ressource pipeline de rendu HDRP ou URP. Sélectionnez Instanced Drawing pour l'activer. vous pouvez également sélectionner si vous souhaitez l'activer en mode lecture uniquement ou en mode édition également.

Lorsque vous activez le GPU Resident Drawer, les jeux qui sont liés au processeur en raison d'un nombre élevé de requêtes peuvent améliorer leurs performances à mesure que la quantité de requêtes diminue. Les améliorations que vous verrez dépendent de l'échelle de vos scènes et de la quantité d'instanciation que vous utilisez. Plus vous rendrez d'objets instanceables, plus vous verrez d'avantages.

En sélectionnant l'option Instanced Drawing, vous pouvez recevoir un message dans l'IU vous avertissant que le paramètre «BatchRenderGroup Variants must be ‘Keep All’». Le réglage de cette option dans les paramètres graphiques complète la configuration du tiroir résident du GPU.

Pour en savoir plus, consultez ici notre fil de discussion.

Sélectionnez « Dessin instance » dans le GPU Resident Drawer déroulant
Sélectionnez « Dessin instance » dans le GPU Resident Drawer déroulant

Utiliser le gommage d'occlusion du GPU

Le gommage d'occlusion du GPU, disponible à la fois pour l'URP et HDRP, fonctionne en tandem avec le tiroir résident du GPU. Il améliore considérablement les performances en réduisant la quantité d'overdraw pour chaque image, ce qui signifie que le moteur de rendu ne gaspille pas de ressources en dessinant des éléments qui ne sont pas vus.

Pour activer le gommage d'occlusion du GPU, localisez la ressource pipeline de rendu et activez la case à cocher Occlusion du GPU.

Pour activer le gommage d'occlusion du GPU en mode Debug dans Unity 6, accédez à Window > Rendering > Occlusion Culling. Vous pouvez visualiser ici la façon dont les objets sont gobés en sélectionnant diverses options de visualisation.

L'option GPU Occlusion Culling dans la ressource Render Pipeline.
L'option GPU Occlusion Culling dans la ressource pipeline de rendu URP.
Ebooks Unity
Autres conseils pour Unity 6

Vous pouvez trouver beaucoup plus de bonnes pratiques et de conseils pour les développeurs et les créateurs Unity avancés à partir du hub de bonnes pratiques Unity. Choisissez parmi plus de 30 guides, créés par des experts du secteur, des ingénieurs et des infographistes techniques Unity, qui vous aideront à développer efficacement avec les ensembles d'outils et les systèmes Unity.

Autres bonnes pratiques