🚀 Unreal Engine 5 – Moteur AAA (Lumen, Nanite) & C++/Blueprints
Guide complet IDEO-Lab sur le moteur de jeu 3D temps réel d'Epic Games.
Concept : Moteur AAA
Moteur de jeu 3D, Epic Games, C++/Blueprints, "AAA".
Game Engine C++ BlueprintsInstallation
Epic Games Launcher (Binaire) vs. Source (GitHub).
Epic Launcher GitHubL'Éditeur Unreal (UI)
Viewport, Outliner, Details, Content Drawer.
Editor Viewport OutlinerConcepts : Level & Actor
Level (Map), Actor (Objet de base), Component.
Level Actor ComponentActors vs Components
Héritage (Actor) vs Composition (Component).
Actor ComponentGameplay Framework
Game Mode, Game State, Pawn, Controller.
Game Mode Pawn ControllerBlueprints (BP) : Vue d'ensemble
Scripting visuel (Nodal). Prototypage rapide.
Blueprints Visual ScriptingBlueprints : Types
Actor BP, Level BP, Game Mode BP, Widgets (UI).
Actor BP Level BPBlueprints : Graphs
Event Graph (Logique) vs Construction Script (Setup).
Event Graph Construction ScriptC++ : Vue d'ensemble
UCLASS, UPROPERTY, UFUNCTION. (Reflection).
C++ : Compilation
Hot Reload, Live Coding (UE5). Unreal Header Tool (UHT).
Live Coding UHTBlueprints vs C++
Prototypage (BP) vs Performance (C++).
Comparatif WorkflowUE5 : Lumen
Global Illumination (GI) dynamique (temps réel).
Lumen GI Ray TracingUE5 : Nanite
Géométrie virtualisée (micropolygones). (Millions de polys).
Nanite GéométrieUE5 : Virtual Shadow Maps
Ombres (Shadows) haute résolution pour Nanite/Lumen.
VSM ShadowsMonde : World Partition
Remplacement (World Comp). Streaming (Grilles, Open World).
World Partition Open WorldPhysique : Chaos
Remplacement (PhysX). Destruction (Fracture), Tissus.
Chaos Physics DestructionFX : Niagara
Remplacement (Cascade). Effets visuels (VFX) nodaux.
Niagara VFXMaterial Editor
Éditeur de Shaders nodal (PBR).
Material Shader PBRSequencer (Cinématiques)
Outil de "Timeline" (Montage, Caméras).
Sequencer CinématiqueQuixel Megascans
Bibliothèque d'Assets (Scan 3D) intégrée (Bridge).
Quixel MegascansQu'est-ce que Unreal Engine (UE) ?
Unreal Engine (par Epic Games) est un moteur de jeu (Game Engine) 3D temps réel, leader de l'industrie, conçu pour le développement haut de gamme ("AAA").
Il est réputé pour ses capacités graphiques (rendu) de pointe. Il est écrit en C++ et propose une double approche de scripting : C++ (performance) et Blueprints (visuel).
Usage (Plus que le jeu)
Bien que (à l'origine) conçu pour les jeux (Unreal Tournament, Fortnite), UE5 est maintenant un moteur "Temps Réel" dominant pour :
- Cinéma & VFX : Production virtuelle (ex: "The Mandalorian"), prévisualisation.
- Architecture : Visualisation (ArchViz) photoréaliste.
- Automobile : Design et simulateurs.
Il y a deux façons principales d'installer UE5.
Epic Games Launcher (Binaire)
Pour 99% des utilisateurs (Artistes, Designers, Développeurs).
- Télécharger et installer le Epic Games Launcher.
- Aller dans l'onglet "Unreal Engine".
- (Section "Bibliothèque") Cliquer sur "+" pour installer une version (ex: 5.4.x).
- Gère les versions, les projets, et la Marketplace.
- Avantage : Simple, pré-compilé, prêt à l'emploi.
- Inconvénient : "Boîte noire". Impossible de modifier le code source du moteur.
Source (GitHub)
Pour les studios AAA ou les développeurs C++ avancés.
Nécessite de lier son compte Epic à son compte GitHub pour accéder au dépôt privé d'Epic Games.
git clone ...(Télécharger le code source, ~100+ Go).- Exécuter
GenerateProjectFiles.bat. - Ouvrir
UE5.slndans Visual Studio. - Compiler le moteur (Build) (peut prendre plusieurs heures).
- Avantage : Contrôle total. Permet de modifier/déboguer le code du moteur (ex: le Rendu, la Physique).
- Inconvénient : Extrêmement lourd et complexe.
L'interface (GUI) de l'Éditeur Unreal est très similaire à celle d'Unity.
| Fenêtre (Unreal) | Équivalent (Unity) | Description |
|---|---|---|
| Viewport (Fenêtre) | Scene View | La vue 3D où vous construisez le monde (Level). |
| World Outliner | Hierarchy | (Haut droit) La liste textuelle de tous les Actors actuellement dans le Level (Scène). Gère la hiérarchie (parent/enfant). |
| Details (Détails) | Inspector | (Bas droit) Le plus important. Affiche les Composants et les propriétés (C++/BP) de l'Actor sélectionné. |
| Content Drawer | Project | (Bas) L'explorateur de fichiers (le dossier Content/). Contient tous vos assets (Blueprints, Textures, Materials...). |
C'est la hiérarchie de base d'Unreal (similaire à Unity : Scene, GameObject, Component).
1. Level (Niveau / Map)
Un Level (ou "Map", fichier .umap) est le "contenant" qui regroupe un ensemble d'Actors pour créer une scène jouable (ex: "MainMenu", "Level_01", "Boss_Arena").
Un Projet (.uproject) est composé d'un ou plusieurs Levels.
2. Actor (Acteur)
Un Actor est l'objet de base (AActor en C++) qui peut être placé dans un Level. (Équivalent : GameObject dans Unity).
Tout ce que vous voyez dans le "World Outliner" est un Actor (une Lumière, un Mesh, le Joueur, un Trigger...).
Un Actor, par défaut, sait qu'il existe dans un réseau (Réplication) et possède un Transform (Position, Rotation, Scale).
3. Component (Composant)
Un Component (UActorComponent) est une "brique" de fonctionnalité qui ne peut pas exister seule. Elle doit être attachée à un Actor.
C'est la philosophie de Composition (Composition over Inheritance).
Exemple (Créer un "Lampadaire")
- (Hériter de
AActor) -> CréerBP_Lampadaire(l'Actor). - (Racine)
Scene Component(pour le Transform). - (Enfant) Ajouter
Static Mesh Component-> (Pour le visuel 3D, le "Mesh" du lampadaire). - (Enfant) Ajouter
Point Light Component-> (Pour la lumière émise). - (Enfant) Ajouter
Box Collision Component-> (Pour la physique, la "hitbox").
Unreal utilise à la fois l'Héritage (via C++) et la Composition (via Components). C'est une différence majeure avec Unity (qui est 100% Composition).
Héritage (Ex: ACharacter)
L'héritage est puissant, mais rigide. Unreal fournit des classes de base (Actor) déjà très spécialisées.
AActor
└ APawn (Peut être "possédé" par un Controller)
└ ACharacter (Un Pawn "humanoïde")
├─ (Possède un 'Capsule Component')
├─ (Possède un 'Skeletal Mesh Component')
└─ (Possède un 'Character Movement Component')
Usage : Pour créer votre "Joueur", vous héritez de ACharacter. Vous n'avez *pas* besoin d'ajouter un Rigidbody ou un Capsule Collider ; c'est déjà inclus dans le parent.
Composition (Ex: UActorComponent)
La composition est flexible. C'est "Ajouter des fonctionnalités".
Types de Composants (C++)
UActorComponent: (Composant "abstrait", non-spatial).- Ex:
HealthComponent,InventoryComponent. (Logique pure).
- Ex:
USceneComponent: (Hérite de UActorComponent)- Composant qui a un Transform (Position relative au parent).
- C'est la base de tout ce qui est "visible" ou "placé".
- Ex:
StaticMeshComponent,PointLightComponent,CameraComponent.
C'est l'architecture (conceptuelle) d'Unreal pour la logique de jeu. C'est la partie la plus complexe à maîtriser pour les débutants.
Les "Règles" (Existent uniquement sur le Serveur)
Game Mode (AGameModeBase)
Rôle : Les Règles du Jeu (immuables).
- Ex: "Quel est le Pawn (personnage) par défaut ?", "Quelles sont les règles de spawn ?", "Comment gagner (Deathmatch) ?".
- Existe uniquement sur le Serveur (non-répliqué).
Game State (AGameStateBase)
Rôle : L'État Actuel du jeu (les "scores").
- Ex: "Le score est 10-5", "Il reste 5 minutes", "La liste des joueurs connectés".
- Existe sur le Serveur, et est Répliqué à tous les Clients (pour qu'ils puissent afficher le score).
Le "Joueur" (Séparation Cerveau/Corps)
Unreal sépare l'IA/Input (Cerveau) du corps physique (Avatar).
Pawn / Character (APawn / ACharacter)
Rôle : Le Corps (Avatar).
- C'est l'objet "physique" dans le monde (le "pion" sur l'échiquier).
- Contient le Mesh, les Collisions, la Santé (Health).
- Ne sait pas ce qu'est une "touche Z" ou "Souris" (il ne gère pas l'Input).
- Il ne "pense" pas. Il n'a que des fonctions (ex:
MoveForward(float axis),Jump()).
Controller (AController)
Rôle : Le Cerveau (l'Âme).
- C'est un Actor "non-physique" (invisible).
PlayerController(PC) : Gère l'Input (Touche Z, Souris) d'un vrai joueur.AIController(AIC) : Gère la "logique" (Behavior Tree, IA) d'un Bot.
Flux : Le Controller "possède" (Possess) le Pawn. (Touche Z) -> [PlayerController] -> (Appelle la fonction MoveForward) -> [Pawn].
Le Scripting Visuel (Nodal)
Blueprints (BP) est le système de scripting visuel (Nodal) d'Unreal. Il permet de créer une logique de jeu (fonctions, variables) sans écrire de code C++.
C'est un système "basé sur les nœuds" (Nodes) : on connecte des "boîtes" (Fonctions) avec des "fils" (Flux d'exécution).
(Équivalent C# de Unity: 'OnTriggerEnter')
[Event 'OnActorBeginOverlap']──(Exec)──►[Cast To 'BP_Player']──(Exec)──►[Apply Damage]
(Actor) ───────────────────────────────► (Object) (Target) ◄─ (Self)
(As BP_Player) ───────────────► (Damaged Actor)
Avantages
- Accessibilité : Permet aux non-programmeurs (Game Designers, Artistes) de créer de la logique.
- Prototypage Rapide : Extrêmement rapide pour tester une idée (itération).
- Intégration : Parfaitement intégré à l'éditeur.
| Type de Blueprint | Description |
|---|---|
| Actor Blueprint | (Le plus courant) Crée une classe (Actor) qui peut être placée dans le monde (ex: BP_Porte, BP_Monstre). Contient des Composants et des Graphes (Event, Construction). |
| Level Blueprint | Un graphe de logique unique, lié à un Level (Map) spécifique. (Usage : Scripting de niveau, cinématiques, ex: "Ouvrir Porte A quand le Joueur atteint Trigger B"). |
| Game Mode Blueprint | Hérite de GameModeBase. Permet de définir les "Règles du Jeu" (2.3) en Blueprint. |
| Blueprint Function Library | Une collection de fonctions "statiques" (globales) réutilisables. |
| Widget Blueprint (UMG) | Utilisé pour créer l'Interface Utilisateur (UI) (Menus, HUD). |
Un "Actor Blueprint" (3.2) contient deux graphes (espaces de code) principaux :
1. Event Graph (Graphe d'Événements)
Quand : S'exécute pendant le jeu (Runtime).
Usage : C'est la logique de jeu. (L'équivalent de Start, Update, OnTriggerEnter d'Unity).
Événements (Events) Clés
Event BeginPlay: (Équiv.Start()) Appelé 1 fois quand le jeu démarre.Event Tick: (Équiv.Update()) Appelé à chaque frame. (Coûteux !).Event OnActorBeginOverlap: (Équiv.OnTriggerEnter())
2. Construction Script (Script de Construction)
Quand : S'exécute dans l'Éditeur (Editor-time).
Il s'exécute chaque fois que l'objet est créé, déplacé, ou modifié dans la Scène (avant BeginPlay).
Usage
C'est l'outil de "Level Design" procédural.
Exemple : Créer un Blueprint "BP_RangéeDeLumières".
- (Ajouter une variable
NombreDeLumieres = 10) - (Dans le Construction Script) : Faire une boucle
FOR (1 à 10)->Add Point Light Component. - Résultat : Le Level Designer glisse 1 "BP_RangéeDeLumières", et (dans l'Inspecteur) change "10" à "50". La rangée de 50 lumières apparaît immédiatement dans l'Éditeur.
Le C++ est le langage "natif" d'Unreal Engine. Il est utilisé pour la performance et pour créer des systèmes de base (ex: la "fondation" d'un Personnage) qui seront ensuite étendus/utilisés par les Blueprints.
Unreal Header Tool (UHT) - La "Magie"
UE utilise un C++ "modifié" (via un pré-processeur, l'UHT) qui gère la Réflexion (Reflection) et le Garbage Collection (GC).
Pour que le C++ soit "visible" par l'Éditeur Unreal (et par les Blueprints), vous devez utiliser des Macros :
// MyCharacter.h (Fichier Header)
#pragma once
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h" // (Généré par UHT)
// 1. UCLASS() (Rend la classe visible par UE)
UCLASS(Blueprintable) // (Permet d'en hériter en Blueprint)
class AMyCharacter : public ACharacter
{
GENERATED_BODY() // (Magie UHT)
public:
AMyCharacter();
protected:
// 2. UPROPERTY() (Rend la variable visible/éditable)
// (Visible dans l'Inspecteur ET en Blueprint)
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Stats")
float Health;
// 3. UFUNCTION() (Rend la fonction visible/appelable)
// (Peut être appelée depuis un Event Graph Blueprint)
UFUNCTION(BlueprintCallable, Category="Stats")
void TakeDamage(float Amount);
// (Événement natif, implémentable en BP)
UFUNCTION(BlueprintImplementableEvent)
void OnDeath();
};
Historiquement, la compilation C++ (surtout pour un moteur de jeu) était un processus très lent (Hot Reload).
Live Coding (UE5)
Live Coding (UE 4.22+) est le système de compilation "moderne". Il permet de modifier le code C++ pendant que l'Éditeur (ou le jeu) tourne.
Workflow (Live Coding)
- Lancer le jeu (Play in Editor).
- Ouvrir Visual Studio / VS Code / Rider.
- Modifier une fonction C++ (ex: changer la vitesse du joueur).
- Appuyer sur
Ctrl+Alt+F11(Compiler). - Live Coding compile les deltas (changements) (très rapide).
- Il "patch" (applique) le nouveau code (DLL) à chaud dans le processus du jeu.
- Vous voyez le changement (nouvelle vitesse) instantanément, sans redémarrer le jeu.
Limite : Le Live Coding ne fonctionne (généralement) pas si vous modifiez les en-têtes (.h) (ex: ajouter un UPROPERTY). Cela nécessite un redémarrage complet de l'Éditeur.
La force d'Unreal est l'hybridation des deux. La question n'est pas "l'un *ou* l'autre", mais "quand utiliser l'un *et* l'autre".
| Critère | C++ | Blueprints (BP) |
|---|---|---|
| Performance | Très Élevée (Compilé, Natif) | Lent (Interprété, VM) |
| Usage | Systèmes (Fondations), Algorithmes complexes (Pathfinding), Calculs lourds (Tick). | Prototypage, Logique "glue", Événements (UI, Level), Itération (Designers). |
| Utilisateur | Programmeurs | Designers, Artistes, Programmeurs |
| Itération (Vitesse) | Lente (Compilation, Redémarrage) | Instantanée (Visuel) |
Le Workflow Hybride (Recommandé)
- (C++) Le Programmeur crée les systèmes de base (fondations) en C++.
- (Ex:
AMyCharacter.cpp). - (Crée les
UPROPERTY(ex:float Health) et lesUFUNCTION(ex:TakeDamage())).
- (Ex:
- (BP) Le Designer crée un Blueprint (Enfant) qui hérite de la classe C++ (ex:
BP_Joueurhérite deAMyCharacter). - (BP) Le Designer (dans l'Éditeur) :
- (Inspecteur) : Règle les variables (
UPROPERTY) (ex:Health = 150). - (Event Graph) : Assemble la logique (ex:
Event OnOverlap-> (Appelle C++)TakeDamage(10)). - (Event Graph) : Implémente les événements (ex:
Event OnDeath-> (Logique BP)Spawn Explosion VFX).
- (Inspecteur) : Règle les variables (
Lumen est le système d'Illumination Globale (Global Illumination - GI) et de Réflexions dynamique (temps réel) de UE5.
Le Problème (Avant Lumen)
Avant UE5 (et dans Unity/autres), l'éclairage "indirect" (les rebonds de lumière, ex: la lumière du soleil qui rebondit sur un mur rouge et colore le plafond en rouge) était pré-calculé ("baked").
Ce "baking" (ex: "Lightmass" dans UE4) prenait des heures (voire des jours) de calcul et était statique (si vous déplaciez une lumière ou un mur, il fallait tout re-calculer).
La Solution (Lumen)
Lumen calcule l'éclairage indirect et les réflexions en temps réel (dynamique). Si vous déplacez le soleil, l'éclairage de la scène est mis à jour instantanément.
Résultat : Itération artistique ultra-rapide, mondes dynamiques (ex: cycle jour/nuit, lampes torches).
Modes (Software vs Hardware)
- Software Ray Tracing : (Défaut) Rapide, fonctionne sur (presque) tout.
- Hardware Ray Tracing : (Meilleure qualité) Utilise les cœurs RT des cartes (NVIDIA RTX, PS5, Xbox Series X).
Nanite est le système de géométrie virtualisée (micropolygones) de UE5.
Le Problème (Avant Nanite)
Un modèle 3D "ciné-qualité" (ex: une statue) peut avoir 10 millions de polygones. (Budget de polygones/frame : 1-5M polys).
Solution (Legacy) : L'artiste 3D devait manuellement créer des LODs (Level of Detail) :
LOD 0(proche) = 50k polysLOD 1(moyen) = 5k polysLOD 2(loin) = 500 polys
Un travail long et coûteux.
La Solution (Nanite)
Avec Nanite, vous importez directement le modèle ciné-qualité (10 millions de polygones) dans le moteur.
Nanite analyse le modèle et génère automatiquement une représentation (micropolygone) qu'il peut "streamer" (diffuser) à la volée. Il ne dessine que les polygones (Clusters) qui sont visibles et de la taille d'un pixel.
Résultat : Niveaux de détail géométrique infinis, plus de "pop-in" de LOD, et un gain de temps de production artistique massif.
Problème : Nanite (5.2) permet des milliards de polygones. Les "Shadow Maps" (cartes d'ombres) traditionnelles ne peuvent pas gérer cette complexité (elles pixelliseraient).
Solution : VSM (Virtual Shadow Maps). C'est le "Nanite" pour les ombres. C'est un système de "shadow map" à résolution virtuelle (micropolygones) conçu pour fonctionner avec Nanite et Lumen (5.1) et produire des ombres dynamiques (temps réel) extrêmement nettes et stables, même sur des scènes immenses.
Problème : Comment créer un monde ouvert (Open World) (ex: 100km x 100km) ? On ne peut pas charger tous les assets (terrains, arbres, bâtiments) en mémoire en même temps (RAM/VRAM).
Solution (Legacy - UE4) : World Composition. L'artiste découpait manuellement le monde en "Levels" (sous-niveaux) et gérait leur chargement (streaming) manuellement.
Solution (UE5) : World Partition
World Partition (le système par défaut pour les "Open Worlds" UE5) automatise ce processus.
- L'artiste travaille sur 1 seul "Persistent Level" (Niveau Persistent).
- Il place ses assets (ex: une forêt, un village).
- En arrière-plan, UE5 assigne automatiquement ces assets à une grille (Grid) (cellules).
- Au Runtime : UE5 ne charge (stream) que les cellules (grilles) qui sont proches du joueur.
Résultat : Mondes ouverts massifs avec streaming automatique. (Fonctionne avec "Data Layers" (ex: charger/décharger la version "détruite" d'un bâtiment)).
Chaos est le moteur physique (développé en interne par Epic) de UE5. Il remplace l'ancien moteur (NVIDIA PhysX) utilisé dans UE4.
Fonctionnalités Clés
- Destruction (Chaos Destruction) : (Le point fort) Système de fracture procédurale (Geometry Collections) pour créer des destructions cinématiques (murs, piliers) en temps réel.
- Tissus (Cloth) : Simulation de vêtements, drapeaux...
- Fluides (Niagara) : Intégration avec Niagara pour les fluides (SPH).
- Champs (Fields) : Permet aux artistes (via Blueprints) de "cibler" la destruction (ex: "Fracturer uniquement à ce point d'impact").
Niagara est le système de VFX (Effets Visuels) (particules) de UE5. Il remplace l'ancien système "Cascade" (UE4).
Philosophie (Programmable)
Cascade était une "boîte noire". Niagara est un système nodal (similaire aux Blueprints/Materials) qui donne un contrôle total aux artistes (VFX Artists).
Architecture Niagara
- Emitter (Émetteur) : Un "gabarit" (Template) qui définit un effet (ex: "Fumée").
- (Contient des "Modules" : Spawn Rate, Velocity, Color...).
- System (Système) : Un "conteneur" qui combine plusieurs Émetteurs (ex: 1 Émetteur "Feu" + 1 Émetteur "Fumée" + 1 Émetteur "Étincelles" = 1 Système "Explosion").
Permet des effets extrêmement complexes (ex: interaction avec les fluides Chaos, audio...).
Le Material Editor est l'éditeur nodal (visuel) d'Unreal pour créer des Shaders (programmes GPU).
Matériau (Material) vs Instance
- Material (
.uasset) : (Le "Parent") C'est le shader. C'est là que l'artiste crée la "logique" (les nœuds) (ex: "Prendre une Texture A, une Texture B, les multiplier, et les brancher sur 'Base Color'"). C'est compilé. - Material Instance (
.uasset) : (L'"Enfant") Une "copie" (Instance) du Matériau parent. N'expose que des Paramètres (ex: "Couleur", "Texture"). Très léger, non-compilé.
PBR (Physically Based Rendering)
Unreal utilise un workflow PBR (Rendu Basé sur la Physique). Le nœud "Matériau" final expose des entrées physiques :
- Base Color : La couleur/texture (Albedo).
- Metallic : (0=Non-métal, 1=Métal).
- Roughness (Rugosité) : (0=Miroir parfait, 1=Mat/Diffus).
- Normal : (La "fausse" texture de relief (Normal Map)).
Sequencer est l'outil de cinématique (non-linéaire) d'Unreal (remplace l'ancien "Matinee").
C'est un "Adobe Premiere" ou "After Effects" intégré à l'éditeur.
Usage
Permet de créer des "Séquences" (.uasset) qui animent n'importe quoi dans la scène via une Timeline (chronologie) :
- Caméras : (Mouvement, Focus (Focale)).
- Actors : (Mouvement, Propriétés (ex: couleur de lumière)).
- Animations : (Déclencher des animations de personnages).
- Audio : (Déclencher des musiques, sons).
C'est l'outil utilisé pour les cinématiques de jeu ("Cutscenes") et la production virtuelle (VFX).
Quixel (acquis par Epic Games) est une bibliothèque massive d'Assets (Ressources) photoréalistes, basés sur des scans 3D (Photogrammétrie) du monde réel.
Quixel Megascans
La bibliothèque (des milliers d'assets "AAA") :
- Surfaces : (Sol, Rocher, Bois, Métal...).
- Assets 3D : (Plantes, Rochers, Débris, Bâtiments...).
- Decals : (Tags, Flaques d'eau, Fissures...).
Intégration : Les "Megascans" sont gratuits pour tous les utilisateurs d'Unreal Engine.
Quixel Bridge
Bridge est l'outil (intégré à l'Éditeur UE5) qui permet de naviguer dans la bibliothèque Megascans et d'importer (Drag & Drop) les assets (Modèle 3D + Materials PBR) directement dans le projet.
C'est un accélérateur majeur pour la création de mondes réalistes (surtout avec Nanite).
