Les performances décrivent la fluidité de votre projet sur votre matériel cible. Unreal Engine simule le temps réel en dessinant, ou en rendant, une image du monde du jeu à l'écran de façon répétée. À la manière d'un folioscope, le moteur affiche les images les unes après les autres pour créer un effet de mouvement. Les performances des images rendues peuvent être mesurées de deux façons : en images par seconde et par durée d'image. Ces indicateurs vous aident à comprendre les performances de votre application pour cibler un certain nombre d'images par seconde, et à déterminer où le temps est passé dans chaque image, mesuré en millisecondes.
Plus vous rendez d'images par seconde, plus le mouvement est fluide pour l'utilisateur et plus l'application est réactive. Généralement, les applications ciblent 30, 60 et 120 images par seconde en fonction de leur budget de performance et du matériel cible. Pour offrir la meilleure expérience utilisateur possible, la fréquence d'images doit être élevée, mais également constante. Ce document fournit une introduction aux considérations de performance liées au rendu, ainsi qu'un aperçu des outils disponibles pour analyser et gérer les performances de rendu de votre application Unreal Engine.
Comprendre les performances
Une grande partie de la logique dans l'Unreal Engine repose sur deux éléments :
Ce qui se passe dans l'image actuelle
Le temps écoulé depuis l'image précédente
Par exemple, lors du rendu d'une image, les événements suivants peuvent se produire :
L'utilisateur peut déplacer un personnage ou un véhicule.
L'utilisateur peut interagir avec un objet.
Des entités contrôlées par une IA peuvent se déplacer ou effectuer diverses actions.
L'interface de l'utilisateur peut changer.
Un objet affiché à l'écran peut faire avancer son animation ou fusionner plusieurs animations.
Les simulations physiques peuvent modifier la position ou la rotation d'objets physiques.
Chacune de ces opérations ajoute une charge de travail supplémentaire que votre ordinateur doit effectuer lors de l'affichage de chaque image. De plus, vous pouvez rendre le processus d'affichage de chaque image plus ou moins complexe à l'aide de divers paramètres de rendu. Voici quelques-uns des ajustements possibles :
Augmenter le niveau de détail des objets et des textures, ce qui permet à votre ordinateur de consacrer plus de temps au calcul de la couleur finale de chaque pixel associé.
Ajouter des effets de post-traitement, qui ajoutent des passes supplémentaires à exécuter sur l'image à différentes étapes du rendu.
Utiliser un éclairage et un ombrage plus réalistes qui rendent les scènes plus réalistes, mais augmentent également la complexité des calculs d’éclairage.
Plus vous demandez à votre application d’exécuter de tâches à chaque image, plus le rendu d’une seule image prendra du temps. Si le rendu de vos images prend particulièrement longtemps, cela ralentira la fréquences d’image globale, rendant votre application moins fluide et moins réactive.
Mesurer la fréquences d’image et la durée d’image
Pour effectuer un suivi de la fréquence d’image et de la durée d’image, vous pouvez activer l’affichage de ces mesures dans le hublot. Dans le menu hamburger du hublot, activez Afficher le FPS, cliquez sur Statistiques > Moteur et activez FPS et Unité.
Contraintes matérielles et chutes de fréquence d'images
Une fréquence d'images lente est le résultat d'un traitement excessif sur une seule image, généralement dû à des opérations qui se répètent à chaque affichage d’image à l'écran. Vous pouvez imaginer chaque image que vous rendez comme un train programmé pour quitter la gare, suivi par un autre train quelques millisecondes plus tard. Tous les passagers qui ont acheté un billet doivent monter à bord du train avant que celui-ci puisse partir. Chaque opération effectuée sur cette image, qu'il s'agisse de gameplay ou de logique de rendu, représente un passager qui doit embarquer.
Lorsque trop de temps est consacré au traitement d’une seule image, c’est comme si l’on retardait le départ d’un train parce qu’on essaie de faire monter trop de passagers, et qu’ils ne sont pas encore tous à bord. Cela empêche le prochain train d’entrer en gare. Le résultat à l'écran est une baisse de la fréquence d'images. Cela peut se produire de manière ponctuelle, entraînant des saccades où l’écran reste figé sur une image un peu trop longtemps, ou de manière continue à chaque image, ce qui entraîne une fréquence d’images globalement faible.
Chacune des ressources de calcul suivantes peut causer un goulot d’étranglement :
CPU : Le processeur (CPU) de votre ordinateur effectue trop d’opérations sur un ou plusieurs threads au cours d’une même image. Cela indique que l’interface, la logique de gameplay ou toute autre logique de base de votre application ne s'exécute pas efficacement ou que vous effectuez trop de ces opérations au cours d'une même image.
GPU : le processeur graphique (GPU) de votre ordinateur effectue trop d'opérations au cours d'une même image. Cela indique que le rendu ou le post-traitement de votre jeu sont inefficaces, ou que le processeur graphique est surchargé d’opérations à exécuter pour suivre.
Taille de la mémoire (RAM) : La mémoire vive (RAM) de votre ordinateur est pleine. Les opérations ne peuvent donc pas être exécutées tant qu’elle n’est pas vidée. Cela tend à provoquer une exception de type "mémoire insuffisante" et un plantage, plutôt qu’un simple ralentissement des performances. Certains systèmes comme le nettoyage de la mémoire ou le chargement dynamique de ressources sont élastiques, ce qui retarde dynamiquement le travail de nettoyage. Quand la mémoire vive est pleine, ces systèmes doivent exécuter plus fréquemment des opérations de nettoyage et de régénération, ce qui ajoute à la charge de travail du CPU.
Vitesse de la mémoire (RAM) : les CPU traitent de petits tronçons de données situées physiquement à proximité des cœurs, échangeant ces tronçons avec la mémoire RAM selon les besoins. Ces opérations peuvent s’effectuer bien plus rapidement que l’échange de tronçons entre le processeur et la RAM (par exemple, un processeur peut effectuer 20 manipulations de données déjà chargées dans le même laps de temps qu’il faut pour charger un nouveau tronçon de données). Plus la RAM est lente et plus le processeur doit souvent accéder à différents tronçons de mémoire, plus ses cœurs risquent de rester inactifs, contraints d’attendre que les données transitent par le bus mémoire.
Mémoire du processeur graphique (VRAM) : la mémoire vive de votre processeur graphique est pleine et les opérations ne peuvent donc pas être exécutée tant qu'elle n'est pas vidée. Cela résulte généralement d'une surcharge de la mémoire des textures, car les textures occupent une grande quantité d'espace.
Accès au disque dur : les objets doivent être chargés à partir de votre disque dur ou de votre appareil de stockage avant de pouvoir être ajoutés à la mémoire. Un accès trop fréquent au périphérique de stockage empêche les opérations de s’exécuter correctement.
Bande passante réseau : La connexion Internet de l’ordinateur étant lente ou instable, le processeur doit fournir un effort accru à chaque image pour reconstituer ou renvoyer des paquets fiables, concentrant ainsi en une seule fois un travail qui aurait normalement été réparti sur plusieurs images, ou provoquant simplement des saccades visuelles malgré l’absence de goulots d’étranglement côté matériel local.
Limitée par le processeur ou limitée par le GPU
On qualifie une application de limitée par le CPU ou par le GPU selon lequel des deux constitue le principal facteur limitant ses performances. Si votre processeur est plus susceptible de générer des goulots d'étranglement, elle est limitée par le CPU. Si votre processeur graphique est plus susceptible de générer des goulots d'étranglement, elle est limitée par le GPU. Si la Vsync est activée et que le CPU et le GPU sont tous deux capables de produire des images plus rapidement que le moniteur ne peut les afficher, votre application est alors limitée par l’affichage. Cela dépendra souvent de votre plateforme cible et de ses ressources.
Pics de traitement
Le pic de traitement fait référence à une brève et soudaine augmentation du temps que consacre votre processeur ou votre processeur graphique à une image.
Opérations coûteuses ou Opérations peu coûteuses
De manière générale, une opération coûteuse requiert une quantité relativement importante de ressources informatiques pour s’exécuter. Cela peut impliquer un temps de traitement ou des quantité de mémoire utilisée plus importants. Les opérations peu coûteuses requièrent peu de ressources de calcul. Ces termes sont souvent utilisés pour comparer des processus qui effectuent des opérations similaires.
La mémoire dans les application en temps réel
Tout ce que vous pouvez traiter ou rendre se trouve dans la mémoire de votre application, à l'exception d’éléments tels que la géométrie virtuelle dans Nanite, qui se charge directement à partir d'un disque dur à semi-conducteurs (SSD). Pour simplifier, si un élément est visible et déplaçable à l’écran, une copie de cet élément existe dans la mémoire de l’ordinateur, tandis que ses ressources de rendu, telles que les textures, les shaders et les maillages, résident dans la mémoire du GPU.
Performances et consommation d'énergie
La consommation d’énergie varie selon l’architecture matérielle, mais en général, une charge de traitement plus importante et un rendu à une fréquence d'images plus élevée entraînent tous deux une consommation d’énergie accrue. Avec les paramètres Mobile et IHM, la consommation d’énergie de votre appareil constitue une problématique majeure. Nous vous recommandons donc vivement de faire en sorte que votre application s'exécute de la manière la plus efficace possible. Les joueurs peuvent attribuer une note négative aux jeux qui consomment la batterie de leur téléphone plus rapidement que d'autres. En outre, le fait de faire chauffer le téléphone en consommant plus d'énergie peut activer l'étranglement thermique, qui oblige le processeur à fonctionner plus lentement jusqu'à ce que le téléphone refroidisse à nouveau.
Outils de profilage
Le profilage consiste à analyser l'utilisation par votre application des ressources du système, telles que le traitement par le CPU ou le GPU, l'utilisation de la mémoire ou la bande passante réseau. L'Unreal Engine fournit plusieurs ensembles d'outils de profilage :
Outil | Description |
Unreal Insights | Enregistrer et examiner les données de performance image par image. |
Commandes Stat | Afficher les statistiques de performance à l'écran. |
Pour plus d'informations sur l'utilisation d'Unreal Insights avec les appareils Android, consultez la page Unreal Insights sur les appareils Android.
Vous pouvez également utiliser un outil de profilage tiers, notamment les suivants :
Outil | Description |
Déboguez des captures d’image unique du rendu graphique de votre application. | |
Créez un profil complet du système et traitez des données de tracé. |
N'oubliez pas que le profilage utilise le même processeur, la même mémoire vive et le même disque que le jeu. L'exécution de votre jeu avec un profileur actif entraîne une légère baisse des performances. Cela peut toutefois être un avantage, car cela crée une situation où le fait d’atteindre vos objectifs de performance signifie en réalité que vous les avez dépassés, laissant ainsi des ressources disponibles pour que le jeu puisse maintenir ses performances en cas de variations imprévues du système.
Unreal Insights
Unreal Insights est une suite robuste et puissante d'outils de profilage disponibles dans l’Unreal Engine, offrant des outils pour le profilage de threads individuels, l'utilisation de la mémoire et la bande passante réseau. Vous pouvez voir combien de millisecondes chaque opération prend individuellement sur le CPU ou le GPU, consulter la mémoire allouée dans Memory Insights, ainsi qu’un aperçu détaillé de la télémétrie et des données de paquets dans Network Insights. Il existe également des modes spécialisés pour le profilage des graphiques de tâches, des changements de contexte et des éléments d'interface Slate, qui peuvent vous aider à effectuer une analyse approfondie des performances de votre application.
Commandes Stat
Stats fait référence à une série de commandes de console que vous pouvez utiliser dans une application UE en cours d'exécution pour afficher des statistiques à l'écran. Il existe des commandes Stat pour une grande variété d'opérations et de systèmes, y compris, sans s'y limiter :
Suivi de la mémoire
Charge du GPU et du CPU
Ticks de gameplay
UI
Animations
Bien que l’utilisation des commandes Stat soit moins complète que le recours à Unreal Insights ou RenderDoc, elle reste le moyen le plus rapide d’obtenir des informations sur le fonctionnement de votre application pendant son exécution ou ses phases de test.
Pour une liste exhaustive des commandes Stat, voir la page Commandes Stat.
RenderDoc
RenderDoc est un débogueur graphique open-source qui peut se connecter à l'UE et fournir des captures d'images uniques. Il peut effectuer de nombreuses opérations, dont les suivantes :
Inspecter des textures, des modèles ou des shaders.
Afficher des événements de dessin individuels.
Fournir une répartition de l'état du pipeline de votre application au moment où vous capturez une image.
Alors qu'Unreal Insights peut vous donner une idée générale des opérations de rendu qui consomment le plus de ressources de traitement et de mémoire, RenderDoc est plus adapté pour obtenir un diagnostic détaillé des opérations de rendu et repérer les endroits exacts où des bogues se produisent. Par exemple, si vous constatez des artefacts de rendu sur votre appareil cible, mais pas dans Play-In-Editor, vous pouvez utiliser RenderDoc pour capturer une image sur les deux, comparer leurs données et identifier les différences responsables de l’apparition des artefacts.
Outils de configuration des performances
De nombreuses instructions relatives à l'ajustement des paramètres de rendu et d’évolutivité de votre projet renvoient aux commandes et aux variables de console. Cette section décrit leur utilisation et fournit des ressources permettant de les comprendre en profondeur.
Commandes et variables de console
La console est une ligne de commande dans l’Unreal Engine que vous pouvez utiliser pour modifier les paramètres, lancer des commandes de débogage et obtenir des informations pendant l’exécution du jeu. Vous pouvez utiliser les commandes de console dans l’Unreal Editor ou dans une version Développeur ou Débogage d'un projet empaqueté en appuyant sur la touche tilde (~). Cela ouvre la ligne de commande et vous invite à saisir votre commande.
Les commandes dans l’UE prennent en charge une fonction de recherche et d’autocomplétion, ce qui permet de taper une commande partielle pour afficher une liste restreinte des commandes correspondantes. Par exemple, si vous tapez Stat, une liste de commandes Stat s'affiche.
Les variables de console, ou CVars, sont des variables de configuration que vous pouvez modifier à l'aide de commandes de console. Vous pouvez modifier directement les CVars dans la console en saisissant le chemin de configuration de la variable, puis en indiquant la valeur que vous souhaitez lui attribuer. Par exemple :
r.TemporalAA.Quality 0La commande ci-dessus définit la CVar r.TemporalAA.Quality sur 0, désactivant ainsi l'anticrénelage temporel. Les arêtes des objets apparaissent ainsi plus rigides et pixellisées.
Voir les pages suivantes pour plus d'informations sur la console :
Variables et commandes de console - Une vue d'ensemble détaillée de l’utilisation de la console.
Référence des commandes de console - Liste complète des commandes de console.
Référence des variables de console - Liste complète des variables de console.
Éditeur de variables de console - Un plug-in permettant de modifier les variables de console directement dans l’Unreal Editor.
Vous pouvez également utiliser les commandes de console dans Blueprint et C++ pour modifier les variables à tout moment, même lorsque la console est désactivée dans les versions de production. Cela peut être utile pour mettre à l'échelle de manière sélective vos paramètres pendant l’exécution de votre application.
Journal de sortie
Lorsque vous travaillez avec la console dans l’Unreal Editor, il est plus facile de comprendre ce qui se passe en affichant le journal de sortie, qui contient un enregistrement des commandes et des journaux.
Pour visualiser le journal de sortie dans l'Unreal Editor, cliquez sur Fenêtre > Journal de sortie. Le journal de sortie s'affichera alors au bas de votre éditeur.
Les fichiers de registre enregistrés apparaissent dans le dossier Saved/Logs de votre projet.
Fichiers de configuration
Les variables de console sont stockées dans vos fichiers de configuration (.ini) sous forme de paires clé-valeur, fournissant des paramètres par défaut pour les versions de votre jeu. Voir la rubrique Fichiers de configuration pour plus d'informations.
Profils d’appareils
Les profils d’appareils sont des fichiers de configuration qui contiennent les paramètres d'un appareil spécifique ciblé par votre projet. Il peut s'agir d'un large éventail d'appareils, comme Android_Mid, ou d’un matériel spécifique. Chaque profil d'appareil comporte une série de remplacements de paramètres qui ne s'appliquent qu'à l'appareil en question.
Les profils d’appareils d'Unreal Engine tournent principalement autour des familles de GPU, telles que la série Adreno 7xx, mais vous pouvez ajouter vos propres profils d’appareils personnalisés et définir les règles nécessaires pour votre matériel pris en charge.
Pour plus d'informations, consultez la rubrique Personnaliser les profils d’appareil et l'évolutivité sous Android.
Ressources supplémentaires
Consultez la rubrique Considérations courantes en matière de performance pour plus d'informations sur les situations et les facteurs susceptibles d’avoir une incidence sur les performances de votre application.
Conseils et pratiques recommandées
Tester tôt et tester fréquemment
Lors des tests, prévoyez que votre projet rencontrera des bogues spécifiques à chacune des plateformes que vous prenez en charge. Bien qu'Unreal Editor s'efforce de fournir un aperçu précis, rien ne remplace le profilage direct sur le matériel cible. Plus vous passez de temps sans tester votre matériel, plus vous risquez de voir apparaître des bogues dont vous n’avez pas connaissance.