Le rendu dans l'Unreal Engine
Introduction au rendu dans les moteurs de jeu
Le rendu fait référence au processus de génération d'une image finale sur l'écran à partir d'une collection d'objets dans une scène.
Le logiciel utilisé pour effectuer le rendu d'une image est appelé moteur de rendu, et ces moteurs sont généralement classés comme suit :
Contrairement à d'autres moteurs temps réel sur le marché, l'Unreal Engine propose de nombreuses fonctionnalités exclusives conçues spécifiquement pour le temps réel et les performances. L'objectif est de réduire la complexité du développement et d'obtenir des résultats plus rapidement tout en maintenant un niveau élevé de qualité et de performances.
Les fonctionnalités, telles que le système d'éclairage global et de reflets Lumen, la géométrie virtualisée Nanite et les textures d'ombres virtuelles sont des étapes importantes dans la réalisation de l'objectif qui consiste à éliminer la complexité au cours du développement grâce à des fonctionnalités qui fonctionnent uniquement sur les applications PC et console. Les plateformes mobiles prennent en charge l'éclairage dynamique et les flux de travail d'éclairage précalculés qui vous obligent à précalculer l'éclairage dans les textures.
Introduction au rendu dans l'Unreal Engine
Les moteurs de jeu effectuent une série d'étapes, souvent appelée pipeline de rendu, pour effectuer le rendu d'une image à l'écran. Cette section décrit comment l'Unreal Engine procède en utilisant son chemin de rendu différé par défaut et compare les étapes avec le chemin de rendu différé de Unity, le cas échéant.
Le moteur Unity est livré avec trois pipelines de rendu distincts : Built-In, Universal, et High Definition. Chaque pipeline est conçu pour des cas d'utilisation spécifiques et est généralement sélectionné avant de commencer un nouveau projet.
Le pipeline de rendu de l'Unreal Engine peut être utilisé avec son chemin de rendu différé par défaut ou il peut être configuré pour fonctionner dans un chemin de rendu direct. Vous pouvez en outre activer le chemin de rendu mobile pour vous adapter à des appareils moins puissants, dont le moteur de rendu mobile Vulkan. Pour en savoir plus sur les fonctionnalités de rendu prises en charge pour chaque chemin de rendu, lisez la page Supported Features by Rendering Path (Fonctionnalités prises en charge par chemin de rendu) de la documentation.
L'image ci-dessous montre une visualisation de haut niveau des étapes que l'Unreal Engine exécute à chaque image pour rendre une image finale en utilisant le chemin de
Le processus se déroule de gauche à droite et les étapes 2 à 5 se déroulent en parallèle.
Ci-dessous, vous en apprendrez davantage sur chacune de ces étapes du pipeline de rendu et sur ce qu'il faut pour effectuer le rendu de chaque image.
Préparation de la scène et occlusion
L'Unreal Engine dispose de trois threads principaux : les threads de jeu (CPU), d'affichage et GPU.
Avant de lancer le processus de rendu, le thread de jeu (ou de CPU) rassemble les transformations de tous les objets de la scène. Il s'agit notamment de traiter toutes les animations, les simulations physiques et l'intelligence artificielle (IA) avant de rassembler les transformations finales pour chaque objet.
Les informations relatives à la transformation sont ensuite transmises au thread
Ce processus comporte les étapes suivantes (dans l'ordre) :
Élimination par la distance : Supprime tous les objets situés au-delà d'une distance précise de la caméra. Élimination par le champ de vision : Supprime les objets qui ne figurent pas dans le champ de vision de la caméra. Élimination en fonction de l'occlusion : Vérifie avec précision l'état de visibilité de tous les objets restants dans la scène. Cette méthode est coûteuse et est donc appliquée à la fin du processus d'occlusion, lorsque le test des objets visibles restants se poursuit pour voir s'ils sont occultés (masqués) par d'autres objets.
La liste finale des objets visibles est transmise au thread GPU pour commencer le processus de rendu.
Équivalent Unity
Unity effectue une
Rendu de géométrie
Au cours de cette étape, l'Unreal Engine passe en revue la liste des objets visibles dans la scène et les prépare pour l'étape suivante, au cours de laquelle il convertit les données de vertex 3D en données de pixels affichées à l'écran.
Shaders de vertex
Un shader est un morceau de code qui s'exécute directement sur le GPU et qui est utilisé pour effectuer un ensemble de calculs. Ils sont efficaces et le GPU peut exécuter de nombreux calculs de shaders en parallèle.
Le shader de vertex effectue les étapes suivantes.
Convertir les positions locales des vertex en position dans le monde : les données relatives aux vertex des objets sont stockées dans l'espace local, mais une fois l'objet placé dans le monde, les informations relatives aux vertex doivent être converties en coordonnées d'espace du monde. Gérer l'ombrage et la colorisation des vertex : le shader de vertex gère le lissage des vertex ainsi que les données de colorisation des vertex dans l'objet lui-même. Possibilité d'appliquer des décalages supplémentaires aux positions des vertex : Le shader de vertex permet de décaler la position de tout vertex à l'écran, afin d'obtenir des effets précis. Cela s'effectue via le matériau de l'objet et s'appelle décalage de position dans le monde.
Passe de profondeur
Avant d'effectuer le rendu séparé des objets, l'Unreal Engine effectue une
Appels de rendu
Après la passe de profondeur, le GPU effectue le rendu de chaque objet en générant tous les polygones qui partagent les mêmes propriétés en même temps, comme les maillages et les matériaux. Il s'agit d'un appel de rendu.
Tous les polygones d'un objet auxquels est attribué le même matériau sont considérés comme le même appel de rendu. Cependant, chaque matériau nécessite son propre appel de rendu. Par exemple, chaque objet à l'écran nécessite au minimum un appel de rendu, mais il peut y en avoir davantage en fonction du nombre de matériaux assignés à un objet.
Équivalent Unity
Le pipeline de rendu de Unity exécute des étapes similaires en effectuant une passe de profondeur et en utilisant des appels de rendu pour générer les objets de la scène.
Rastérisation et tampon de géométrie
Le
Le processus de conversion de ces images composées se produit pour chaque image rendue et pour chaque appel de rendu où les données de vertex sont converties en données de pixel et génèrent les parties correctes des images dans le tampon de géométrie.
Équivalent Unity
Le chemin de rendu différé de Unity utilise également un tampon de géométrie pour stocker des informations critiques sur la scène. Dans le cas de Unity, le tampon de géométrie stocke des informations semblables sur la scène (référencées par des noms différents) : albédo, spéculaire, normale, et informations d'émission/éclairage pour les objets.
Rendu des textures
L'Unreal Engine effectue le rendu des textures par chargement dynamique de textures, afin d'optimiser le chargement des textures dans la scène. Le système de chargement dynamique des textures fait appel à des mipmaps de texture. c'est-à-dire une séquence précalculée d'images de la même texture à différentes résolutions. Il s'agit en quelque sorte de niveaux de détail (LOD) pour les textures, au lieu des maillages. Le moteur crée automatiquement ces mipmaps dans lesquelles la résolution de chaque image est égale à la moitié de la précédente.
L'Unreal Engine charge la mipmap de la texture pendant le jeu en fonction de la distance par rapport à la caméra. Cette opération s'effectue automatiquement pour optimiser la bande passante et la consommation de mémoire, ainsi que pour réduire le bruit à distance de la caméra.
La taille des textures doit être une puissance de 2 pour recevoir des mipmaps. Les tailles de texture les plus courantes sont 3840 x 2160 pixels (4K) et 1920 x 1080 pixels (HD). Notez que les textures ne sont pas tenues d'avoir un ratio spécifique, une texture de 1920 x 480 pixels recevra également des mipmaps.
Équivalent Unity
Shaders de pixels et matériaux
Une fois les objets entièrement rendus dans le tampon de géométrie, l'Unreal Engine commence l'ombrage de chaque objet à l'écran en utilisant les propriétés matérielles de chaque objet avec le shader de pixels.
Un
Le système de matériau utilise des modèles de shaders en langage de shaders de haut niveau (HLSL), ainsi que l'éditeur de matériau pour créer les matériaux finaux appliqués aux objets à l'écran. Ces matériaux peuvent utiliser des paramètres, tels que des textures, pour définir l'aspect de chaque objet.
Équivalent Unity
Unity est livré avec plusieurs shaders intégrés (équivalents des matériaux dans l'Unreal Engine) ainsi qu'avec son Shader Graph pour créer des shaders dans votre projet. L'éditeur de matériau de l'Unreal Engine est l'équivalent du Shader Graph de Unity.
Reflets
Après avoir fait l'ombrage de tous les objets de la scène, l'Unreal Engine commence à effectuer le rendu des reflets des objets en fonction de leurs propriétés de matériau.
L'Unreal Engine utilise quatre systèmes pour effectuer le rendu des reflets de la scène. Ces systèmes sont exécutés dans l'ordre suivant :
Captures de reflets : précalculées et stockées dans une texture cubique statique, à un endroit précis. Reflets planaires : capture les reflets depuis et vers un plan. Reflets espace écran (SSR) : utilise les informations disponibles à l'écran pour générer des reflets précis d'objets en temps réel. Reflets Lumen : résoudre les reflets pour l'ensemble des valeurs de rugosité de la scène. Ces reflets prennent en charge la lumière naturelle, les matériaux de couche transparente, la translucidité et même les matériaux d'eau à couche unique.
L'Unreal Engine mélange les trois méthodes, en donnant la priorité aux reflets espace écran, puis en revenant aux réflexions planaires, et enfin en revenant aux captures de reflets. Le résultat final est combiné avec les images de rugosité, spéculaires et métalliques dans le tampon de géométrie.
Équivalent Unity
Éclairage statique et ombres
Après le rendu des reflets, l'Unreal Engine effectue le rendu de l'éclairage statique et des ombres pour tous les objets de la scène.
L'Unreal Engine utilise son système d'
Ce système est très rapide, mais il nécessite plus de mémoire et doit être précalculé à chaque modification de la scène.
Le système d'éclairage global Lightmass est une bonne solution pour les projets pour appareils mobiles et de faible puissance.
Équivalent Unity
Le
Éclairage et ombres dynamiques
Après le rendu de l'éclairage statique, l'Unreal Engine effectue le rendu dynamique de l'éclairage et des ombres (en temps réel) avec Lumen, son système d'éclairage global dynamique.
Il offre des rebonds diffus infinis et coopère en fluidité avec la
Lumen remplace les reflets espace écran lorsqu'ils sont utilisés dans la scène.
Équivalent Unity
Cela diffère de Lumen, car Lumen n'a pas besoin de données précalculées pour fournir des rebonds lumineux indirects.
Brouillard et transparence
Après le rendu de l'éclairage dynamique et des ombres, l'Unreal Engine effectue le rendu des effets de brouillard et de transparence.
L'Unreal Engine effectue le rendu des
Équivalent Unity
Unity prend en charge le brouillard
Effets de post-traitement
Une fois le brouillard et la transparence rendus, l'Unreal Engine peut appliquer des effets supplémentaires à l'image. Ces effets sont les effets de post-traitement, car ils sont appliqués après le traitement de l'image finale. Les effets s'appuient sur le shader de pixels et utilisent les informations disponibles dans le tampon de géométrie.
Parmi les effets de post-traitement les plus courants figurent le flou lumineux, la profondeur de champ, les puits de lumière, le mappage de ton et le flou de mouvement.
Dans le cadre de cette étape de post-traitement, l'Unreal Engine peut appliquer la
Dans la chaîne de rendu, la super résolution temporelle intervient après la profondeur de champ, et tout ce qui suit est upscalé : le flou de mouvement, le flou lumineux, etc.
Une fois ces effets appliqués au tampon de géométrie, l'Unreal Engine effectue le rendu de l'image finale à l'écran.
Les étapes décrites ci-dessus génèrent une image unique à l'écran. Ces étapes sont souvent répétées entre 30 et 60 fois par seconde, en fonction de la fréquence d'images cibles du jeu.
Équivalent Unity
Unity propose des solutions de post-traitement basées sur le pipeline de rendu choisi. La plupart des effets disponibles sont similaires à ceux de l'Unreal Engine.
Unity 6 est également doté du Spatial-Temporal Post-processing (STP), un logiciel natif de modification d'échelle qui utilise des techniques de suréchantillonnage spatial et temporel pour produire une image anticrénelée de haute qualité.
Vue d'ensemble des fonctionnalités de rendu dans l'Unreal Engine
Maintenant que vous comprenez les étapes que suit l'Unreal Engine pour effectuer le rendu d'une image à l'écran, vous êtes en mesure d'en apprendre davantage sur les fonctionnalités de rendu spécifiques fournies avec le moteur.
Pour en savoir plus sur les fonctionnalités de rendu de l'Unreal Engine, lisez la page Éclairer l'environnement de la documentation.