Retour au portfolio

Projet personnel / Programmation de moteur et d'outils

Hibou Engine

Un moteur de jeu personnel où j'explore l'interopérabilité C++ et C#, les outils d'éditeur et les systèmes qui font fonctionner un jeu.

  • C++
  • C#
  • Windows
  • OpenGL
  • WPF
L'éditeur Hibou Engine avec un viewport 3D, une hiérarchie de scène et des panneaux de composants.
L'éditeur Hibou Engine, développé en parallèle du moteur.

01 / Contexte

Apprendre en créant
la couche sous-jacente.

Je travaille sur Hibou pendant mon temps libre pour comprendre comment les systèmes natifs et un éditeur managé s'articulent.

Le point de départ était l'interopérabilité C++ et C#. Le projet est ensuite devenu un terrain d'exploration du rendu, des entités et composants, de la persistance des projets et des outils de scène.

Je donne la priorité aux outils d'éditeur et au lien entre les deux langages. Ce choix façonne aussi le rendu : il doit permettre de travailler avec une scène pendant que je me concentre sur les systèmes que je souhaite comprendre.

02 / Décisions techniques

Un regard sur
le moteur et l'éditeur.

L'éditeur Hibou Engine affiche une scène dans son viewport OpenGL.
Travail sur une scène dans l'éditeur.

Rendu

Un moteur de rendu basé sur OpenGL

Le moteur utilise OpenGL pour le rendu. Je l'ai choisi pour sa simplicité et sa mise en œuvre relativement rapide, afin de me concentrer sur les outils d'éditeur et l'interopérabilité C++ / C# plutôt que sur des graphismes photoréalistes.

  • C++
  • OpenGL
L'interface de l'éditeur Hibou Engine basée sur WPF.
L'interface de l'éditeur managé.

Outils d'éditeur

Un éditeur managé avec WPF

L'interface de l'éditeur est construite avec Windows Presentation Foundation (WPF). Cette base d'interface Windows me permet de développer des outils de scène et d'explorer des interfaces comme les éditeurs de nœuds, en parallèle du moteur natif.

  • C#
  • WPF
  • Windows
Un projet ouvert dans l'éditeur Hibou Engine.
Données du projet et édition de scène.

Persistance des projets

Projets et sérialisation

Chaque projet est géré indépendamment. Les scènes, entités, composants et paramètres sont sérialisés afin de sauvegarder et de recharger le projet. Cela rend l'éditeur utilisable d'une session de travail à l'autre.

  • Scènes
  • Composants
  • Sérialisation
Hiérarchie de scène et panneaux de composants dans Hibou Engine.
Entités et composants représentés dans l'éditeur.

Architecture du moteur

Entités et composants avec EnTT

Le cœur du moteur utilise une architecture entité-composant-système (ECS) avec EnTT. J'y explore la représentation des entités et des composants sous l'éditeur.

  • C++
  • EnTT
  • ECS

03 / Sous le capot

Compiler le projet.
Travailler avec la mémoire.

Configuration de compilation

Générer des projets avec Sharpmake

Les fichiers de projet et de solution sont générés par programmation avec Sharpmake, l'outil libre de configuration de compilation en C# d'Ubisoft.

Configuration de compilation de Hibou Engine écrite avec Sharpmake.
Configuration de compilation en code.

Mémoire / En cours

Explorer EASTL

Je remplace progressivement des parties de la bibliothèque standard C++ par EASTL d'Electronic Arts pour explorer un contrôle plus fin de l'allocation mémoire dans les systèmes du moteur.

Ce travail est en cours. L'accent est mis sur l'implémentation et les choix qu'elle implique.

  • C++
  • EASTL
  • Allocation mémoire

04 / Travail en cours

Explorer
la programmation visuelle.

En développement

Le prochain objectif est un système à nœuds pour créer la logique de gameplay.

La base de l'interface utilise Nodify. Je me concentre actuellement sur le modèle de graphe sous-jacent et l'exécution de la logique : comment un graphe créé dans l'éditeur devient une logique exécutable.

Il s'agit d'une piste que j'explore dans le projet, plutôt que d'une fonctionnalité terminée.

  • C#
  • Nodify
  • Modèle de graphe
  • Logique de gameplay

Contact

Québec, QC, Canada / Ouvert aux opportunités

Je suis ouvert aux possibilités en développement logiciel, en programmation d'outils et de gameplay, ainsi qu'aux postes d'artiste 3D junior. Si mon expérience peut répondre aux besoins de votre équipe, je serai heureux d'échanger avec vous sur mes réseaux sociaux.