Moteur Custom

L'objectif de ce projet était de développer un moteur de jeu personnalisé en C++, utilisant DirectX 12 comme API graphique. Ce moteur devait gérer plusieurs aspects essentiels d'un jeu, tels que le rendu 3D, la gestion des ressources, la physique, et d'autres fonctionnalités de base qui sont au cœur du développement d'un moteur de jeu performant.

Étant un projet de groupe, chaque membre a été chargé de travailler sur un module spécifique, tel que le rendu, la physique, l’audio, la gestion des scènes, et ainsi de suite. Cette approche a permis une spécialisation approfondie tout en maintenant l'intégration de chaque partie du moteur.


🛠️ Architecture du moteur

  • Core : La gestion de la boucle de jeu, des événements et des entrées/sorties.
  • Rendu (Renderer) : Utilisation de DirectX 12 pour la gestion de l'affichage 3D, y compris la gestion des shaders et du pipeline graphique.
  • Gestion des ressources : Chargement des modèles 3D, textures, shaders, et autres ressources nécessaires à l'affichage et à l'interaction dans le moteur.
  • Scripting : Ajout d'un système de scripting pour faciliter le développement de contenu sans nécessiter de recompilation, permettant aux concepteurs de créer et d'ajuster facilement les comportements du jeu.
  • Interface utilisateur (UI) : Développement d'un éditeur pour manipuler les objets de la scène et contrôler les aspects du jeu en temps réel.

🎮 DirectX 12 : Gestion du rendu

  • Création d'une instance DXGI : Permet d'interagir directement avec le GPU pour le rendu graphique.
  • Création d'un Device : Utilisation du Device pour établir la communication avec DirectX 12 et initier le rendu des scènes.
  • Création d'un Swap Chain : Gestion de l'affichage des images sur l'écran avec un système de double buffering pour éviter les artefacts visuels.
  • Allocation des Command Queues, Command Lists et Command Allocators : Ces éléments sont utilisés pour envoyer les commandes graphiques au GPU de manière asynchrone et efficace.
  • Mise en place d'un Descripteur de mémoire : Gestion des ressources telles que les textures, buffers et autres objets nécessaires pour le rendu.

🔧 Pipeline graphique

  • Vertex Shader → Transformation des sommets dans l’espace de projection.
  • Pixel Shader → Calcul des couleurs, textures et éclairages sur chaque pixel à afficher à l'écran.
  • Rasterization → Conversion des triangles définis par les sommets en pixels affichés à l'écran.
  • Depth & Stencil Testing → Gestion de la profondeur et des masques pour déterminer la visibilité des objets dans la scène.
  • Output Merger → Finalisation de l’image avant l’affichage final, en combinant les résultats des différentes étapes du pipeline.

🏗️ Gestion de la scène et des objets

  • Entity Component System (ECS) : Utilisation de l'ECS pour une gestion flexible des objets du jeu, permettant d'ajouter ou de modifier facilement des composants.
  • Chargement des modèles 3D : Utilisation de Assimp pour charger des modèles au format obj et fbx, assurant une large compatibilité avec les outils de création de contenu.