- Il est tout à fait possible de développer des jeux de manière simple et amusante sans moteur de jeu commercial
- La plupart des fonctionnalités des gros moteurs ne sont pas nécessaires, et écrire soi-même ses outils apporte davantage de souplesse et d’efficacité de développement
- En s’appuyant sur C# moderne et des bibliothèques open source, il est possible de disposer d’un environnement de développement suffisant, quelle que soit la taille de l’équipe
- En combinant des bibliothèques comme FMOD, SDL3, Dear ImGui avec ses propres outils, on peut construire un pipeline adapté à ses besoins
- Du point de vue du développement cross-platform, de la maintenance et de la portabilité, un framework léger construit en interne est très avantageux
Préface : réflexions d’un développeur de jeux avec 20 ans d’expérience
- En 2025, l’auteur développe toujours des jeux vidéo sans moteur de jeu commercial
- Beaucoup de personnes autour de lui sont surprises qu’il n’utilise pas de moteur commercial
- Les fonctionnalités de base des gros moteurs comme Unity ou Unreal sont moins satisfaisantes qu’une implémentation maison, et il faut souvent en reconstruire une grande partie au final
- L’usage de moteurs commerciaux expose régulièrement aux problèmes causés par les changements de politique commerciale ou par les mises à jour
- Créer soi-même de petits outils parfaitement adaptés à chaque projet est plus efficace et, à long terme, plus facile à maintenir
Choisir le langage de programmation nécessaire au développement de jeux
- L’auteur utilise C# comme langage principal depuis longtemps
- Le C# moderne s’est beaucoup amélioré par rapport au passé en matière de performances, de syntaxe et d’expérience de développement
- Des fonctions de hot reload comme dotnet watch sont très pratiques pour modifier et tester le code en temps réel
- Même les non-développeurs peuvent s’y mettre facilement, ce qui améliore la répartition des rôles et l’efficacité de la collaboration au sein de l’équipe
- La fonctionnalité intégrée de reflection est un atout pour créer des éditeurs ou des outils
Bibliothèques cross-platform et implémentation du rendu et des entrées
- Avec SDL3, l’auteur implémente toutes les fonctions de base : fenêtres, rendu, contrôleurs, support cross-platform, etc.
- L’abstraction GPU de SDL3 facilite la prise en charge de différents environnements comme DirectX, Vulkan, Metal
- Une couche C# écrite au-dessus de SDL (par exemple Foster) est utilisée comme utilitaire commun
- FMOD reste le dernier outil audio commercial utilisé ; pour le reste, le pipeline repose sur l’open source
- L’auteur a auparavant aussi implémenté directement OpenGL/DirectX, mais la stabilité de SDL constitue un avantage important
Méthode de gestion des assets
- Lorsqu’on utilise son propre moteur, on charge simplement uniquement les fichiers nécessaires au jeu
- Pour des assets de petite taille, comme dans un jeu en pixel art, tous les fichiers sont chargés d’un coup à l’initialisation
- Dans les grands projets, seuls les assets nécessaires sont chargés à la demande, puis libérés de la mémoire lors des changements de scène
- Lorsqu’une conversion est nécessaire, il suffit d’écrire un script de traitement automatique à la compilation
Éditeur de niveaux et outils UI
- Il est facile d’intégrer les données d’éditeurs de niveaux open source comme LDtk, Tiled, Trenchbroom
- En général, un éditeur sur mesure est implémenté directement pour chaque projet
- Plutôt que d’écrire toute l’UI à la main, l’auteur utilise activement la GUI en mode immédiat de Dear ImGui
- La combinaison de la reflection de C# et d’ImGui permet de visualiser en temps réel l’état des objets du jeu
- Si nécessaire, des outils externes adaptés à l’objectif peuvent être mélangés avec des outils maison
Cross-platform et portabilité vers les consoles
- Autrefois, les problèmes de portage sur console rendaient souvent le choix du C++ nécessaire, mais l’arrivée de C# Native-AOT a changé la donne
- Des frameworks open source comme FNA étendent activement leur support des consoles
- En exploitant la couche d’abstraction générique fournie par SDL3, il est possible d’utiliser la même base de code sur la plupart des systèmes
Environnement de développement : un écosystème ouvert centré sur Linux
- La plateforme de développement principale a été déplacée vers Linux, qui fonctionne très bien avec les toolchains open source
- Il reste des liens avec certains logiciels commerciaux spécifiques (par ex. vscode, github), mais plus l’écosystème open source s’élargit, plus le support progresse
- L’auteur met en place le même environnement de travail sur différentes plateformes basées sur Linux, comme le Steam Deck
Q&R supplémentaires et exemples
- Question sur l’usage de Godot : si l’on souhaite développer autour d’un moteur open source, Godot est recommandé ; sinon, l’auteur préfère les outils personnalisés
- Travail en 3D : les gros moteurs ont des avantages, mais pour des projets spécialisés de petite taille, un framework sur mesure suffit largement
- Besoins techniques de haut niveau : selon les exigences, utiliser un gros moteur comme Unreal reste tout à fait valable
- Changement de moteur à l’échelle d’une équipe : cette approche convient bien au développement solo ou en petite équipe, et même des studios de taille moyenne à grande se tournent de plus en plus vers des moteurs maison pour éviter les risques à long terme
- Workflow des assets : les fichiers Aseprite peuvent être automatiquement convertis en animations en exploitant les tags et timings intégrés
Conclusion
- Créer un jeu sans moteur de jeu commercial est un choix qui dépend avant tout des préférences et de la manière de travailler
- Il suffit de choisir la méthode qui vous convient le mieux, en donnant la priorité à vos besoins et au plaisir de créer
5 commentaires
C’est une belle initiative.
J’ai fait partie de la première génération de développeurs de jeux.
Avant l’arrivée d’Unreal, il allait de soi que les studios
développaient leur propre moteur,
et c’était justement là leur avantage concurrentiel.
Le développement du moteur consistait en grande partie à créer des outils
à partir du core, du kernel, du rendu et des autres entrées/sorties.
À l’époque, j’étais en charge des outils de particules, de son, de couches et d’objets,
et notre équipe comptait 7 personnes, mais en réunissant tout,
je crois qu’on dépassait facilement la vingtaine d’outils.
Puis, à partir du moment où Unreal est arrivé et que les jeux produits à la chaîne
se sont mis à déferler, ils n’ont plus investi dans le développement de moteurs.
Je crois que beaucoup de gens se sont alors mis à leur compte et ont créé leur entreprise.
C’était il y a déjà 27 ans.
Moi aussi, j’ai pris de l’âge entre-temps et je travaille désormais sur autre chose que les jeux.
Cela me rappelle avec nostalgie cette époque où je faisais du travail bas niveau sur le core
en fonction de la carte graphique, avec des modes directx et opengl distincts.
Bon courage...
Dernièrement, comme je cherchais depuis longtemps un moteur pour créer un jeu de stratégie, je me suis dit qu’à ce compte-là il vaudrait mieux en fabriquer un moi-même ; voir un exemple de quelqu’un qui est passé à l’action et a réussi me redonne vraiment du courage.
Avis Hacker News
Après avoir développé seul un moteur de jeu 2D pendant 5 ans, tout en faisant des missions rémunérées liées à ce sujet, je veux expliquer un point important que les gens connaissent mal
Le moteur, c’est la partie facile
Ce qui compte vraiment, c’est le tooling autour du moteur, le contenu et le pipeline d’assets
Importer des textures, de l’audio, des modèles (gltf, fbx, animations, etc.) depuis diverses sources et formats de données
Dans l’application d’édition, fournir les fonctions d’édition de base comme couper, copier, coller, annuler, rétablir, enregistrer et supprimer
Des visualisations et des fonctionnalités permettant aux développeurs de créer et manipuler de vraies données avec l’éditeur (entités, animations, scènes, graphe audio, prise en charge du scripting, etc.)
Le packaging et le prétraitement des données, comme le baking de géométrie statique, la compilation de shaders, le rééchantillonnage et l’empaquetage de textures et d’audio, ou encore la création de packs d’assets de contenu de jeu
Une fois tout cela terminé, la partie runtime proprement dite (c’est-à-dire la boucle principale du jeu et les sous-systèmes) n’est qu’une petite partie de l’ensemble
C’est pour cela que dans les studios de jeu, il y a peu de personnes affectées au moteur et une majorité de programmeurs qui fabriquent des outils
Moteur detonator : https://github.com/ensisoft/detonator
Il est important de se concentrer sur la création d’un moteur adapté à son propre jeu plutôt que de viser un moteur généraliste
L’UI, la compression, etc. peuvent être gérées avec des bibliothèques et des frameworks
Le fait que l’OP utilise de petites bibliothèques comme imGUI en est un bon exemple
Comme il ne s’agit pas de créer un moteur pour tous les jeux, cela supprime en pratique beaucoup de travail inutile
Un moteur n’est qu’un petit runtime greffé à un pipeline d’assets
De nos jours, même les compilateurs de shaders deviennent progressivement plus importants que les API 3D
Les parties intéressantes se concentrent dans le compilateur de shaders, tandis que l’API 3D se limite à exécuter les shaders et transporter les données
Quand les gens parlent de moteur, ils ont souvent tendance à inclure aussi le pipeline d’assets et l’éditeur
Un moteur moderne, ce n’est pas seulement une boucle principale + quelques fonctions d’API 3D
Même quand on utilise un moteur comme Unity, très peu de développeurs n’écrivent que du code de rendu
Bien sûr, utiliser Unity ou Unreal ne veut pas dire qu’on n’a jamais besoin de créer soi-même des outils d’assets
En ayant récemment réécrit le moteur pour une suite, je suis tout à fait d’accord avec ça
Comme je l’ai écrit dans mon post-mortem, quand on parle de moteur, la plupart des gens pensent au code inclus dans l’exécutable du jeu, mais en pratique je pense que la part la plus importante, c’est le code non distribué avec le jeu, comme l’éditeur de niveaux, le pipeline de contenu, le débogage/profiling et le workflow de développement
Le développement d’outils est un travail plus ennuyeux et plus épuisant que le développement du moteur
C’est pour cette raison que tant de développements de jeux sur moteur custom s’arrêtent en cours de route
Post-mortem : https://ruoyusun.com/2025/04/18/game-sequel-lessons.html
Construire un éditeur depuis zéro représente un travail considérable
Quand c’est possible, j’utilise des éditeurs existants
Par exemple TrenchBroom (éditeur Quake) + func_godot, ou Tiled pour la 2D
Pour gérer les données de jeu, il y avait aussi CastleDB, désormais intégré à Hide (un véritable éditeur 3D)
Après avoir construit les outils, il reste encore l’étape majeure de la conception du jeu et de la création du contenu
Il y a quelques années, avec SDL2 et un peu de C++, j’ai créé une classe simple de
spriteet ajouté quelques fonctions basiques comme les collisionsSi je devais vraiment appeler ce que j’ai fait un moteur, c’était plutôt une sorte d’assistance de vélo électrique
Le point important, c’est que le « moteur » finit souvent par diriger l’ensemble du projet/jeu
On se retrouve souvent à adapter le jeu au moteur, ce qui est la raison pour laquelle j’évite toujours d’utiliser de gros moteurs comme Unity
Ces moteurs finissent par produire toujours la même structure de jeu, seuls les assets changent
Personnellement, au lieu de perdre du temps à apprendre un moteur, je peux commencer avec SDL grâce à une courbe d’apprentissage courte, et SDL peut aussi servir à d’autres projets cross-platform en dehors du jeu
Mon jeu : https://store.steampowered.com/app/2318420/Glypha_Vintage/
On dit que créer son propre moteur prend longtemps, mais combien de temps faut-il pour vraiment maîtriser Unreal ou Unity au point de pouvoir transformer immédiatement une idée en jeu ?
Au final, une fois mon moteur terminé, j’aurai directement ce niveau d’expertise, donc c’est un gain de temps sur le long terme
Plus on a d’expérience comme ingénieur, plus fabriquer soi-même devient avantageux du point de vue du temps
Plus le jeu est unique ou de niche, plus le choix du développement maison est pertinent
Passer des mois à se perdre dans l’UI complexe d’Unreal pour découvrir que ce qu’on voulait est pratiquement impossible dans un moteur généraliste, c’est inefficace
En revanche, pour un RPG open world photoréaliste, le faire soi-même n’est pas un bon choix
Les contraintes d’un moteur custom peuvent au contraire stimuler la créativité, et produire des jeux plus originaux, même sans atteindre le plus haut niveau technique
J’ai déjà construit mon propre moteur
Au début, cela m’a pris environ un an, avec d’innombrables essais-erreurs et impasses
J’y ai implémenté presque tous les sous-systèmes qu’on voit dans un jeu : rendu 3D, UI adaptative, animation squelettique, fichiers de sauvegarde, smart objects, pathfinding, scripting, audio, physique, etc.
J’ai notamment implémenté moi-même une fonction de rembobinage (comme le système de Braid)
Ce type de fonctionnalité exige le support de tous les sous-systèmes du moteur (scripts, physique, etc.)
Je connais chaque partie du moteur que j’ai créé, ce qui me donne une énorme liberté pour développer des fonctions supplémentaires
Mais après un an de développement, le burnout s’est installé peu à peu et j’ai perdu la motivation
Je ne connais pas Unreal, mais avec Unity on peut développer plus de 10 fois plus vite qu’en codant tout soi-même
Ajouter de la physique prend 1 minute, alors qu’avec un moteur maison rien que l’intégration d’une bibliothèque externe peut prendre un ou deux jours
Les fonctions de visualisation interne montrées par Noel dans Unreal sont aussi intégrées à Unity
L’édition de choses comme les bounding boxes est fournie de base
Et si le comportement de base du moteur ne suffit pas, on peut facilement l’étendre avec ImGui ou un moteur CSS basé sur Yoga
Le moteur offre aussi un éditeur de particules avancé, des shaders dont la complexité est déjà absorbée, du data streaming modulaire, et bien d’autres fonctions
En théorie j’aimerais tout faire moi-même, mais au final la question est celle du temps, donc priorité à terminer
Le temps nécessaire pour apprendre Unreal ou Unity au point de pouvoir implémenter directement une idée de jeu, et le temps nécessaire pour créer son propre moteur, ce sont deux questions différentes
Donnez-moi une petite idée, et je peux produire un prototype jouable en quelques heures
Avec Unity, au départ il suffit juste de programmer, et avec Unreal on peut aller presque jusqu’à la sortie du jeu en utilisant seulement les blueprints
Voir cette vidéo où un prototype de jeu style Super Hexagon est réalisé en 10 minutes : https://www.youtube.com/watch?app=desktop&v=p8MzsDBI5EI
Dans Unity, l’élément vraiment spécifique est surtout le prefab, le reste relève de concepts généraux du développement de jeux
Du point de vue d’un développeur Unreal, je pourrais faire un prototype similaire sous Unity en moins d’une heure
L’hypothèse même du « après avoir terminé le moteur » est peut-être irréaliste
Même une action simple comme
GameObject.Instantiatedemande des ressources énormes si on doit l’implémenter soi-même dans le moteurIl faut tenir compte de la complexité de la physique 2D/3D, des shaders, du support des plateformes, etc.
Si l’objectif est le moteur, faites un moteur ; si le but est le jeu, faites le jeu lui-même
Si vous avez déjà assez de connaissances en développement de jeux pour construire un moteur de jeu
une journée suffit pour apprendre Unreal ou Unity au point de faire un prototype
Atteindre une maîtrise parfaite prend longtemps, mais le temps pour sortir le prototype du jeu voulu est sans commune mesure
Faire un jeu sans gros moteur « qui fait tout » est plus facile, plus amusant et parfois plus efficace
Cela dit, quand on creuse certaines fonctions spécifiques du moteur (par exemple l’IK d’Unreal ou l’animation blending), on se dit aussi « heureusement que je ne me suis pas infligé 2 ou 3 semaines de travail pour refaire ça moi-même »
Le minimalisme ou la lutte contre le bloat sont importants, mais si ces moteurs sont si populaires, c’est aussi parce qu’ils prennent en charge le gros du travail difficile
Avant, j’étais moi aussi dans cette approche
Quand j’ai voulu faire mon premier jeu 3D, j’ai tout implémenté moi-même : input, gestion des objets, culling, chargement de modèles, bibliothèque mathématique, graphismes, normal maps, SSAA, etc., et au final l’avancement réel du jeu était de 0 %
En revanche, pour mes projets 2D hobby, je continue encore à développer sans dépendances avec juste le canvas du navigateur
En pratique, c’est le navigateur qui joue le rôle du moteur
À propos du « heureusement que je ne l’ai pas fait moi-même »
si on pense à sa carrière d’indé sur le long terme, même si cela prend quelques semaines, une compréhension profonde du sujet + la possession à 100 % du code source et sa valeur de réutilisation ont davantage de valeur
Mon mémoire de fin d’études portait sur le portage vers Windows 95/Visual C++ d’un moteur de particules basé sur NeXTSTEP/Objective-C (OpenGL, avec un exemple utilisant marching cubes)
Aujourd’hui, ce genre de thème n’est plus qu’une petite partie d’une fonctionnalité qui tient en une ligne dans les moteurs modernes
Utiliser un moteur fait avancer le projet bien plus vite et évite de dépenser son temps à développer l’infrastructure
Réinventer la roue n’est pas particulièrement amusant pour la plupart des gens
Des fonctions comme l’IK ou l’animation blending
si elles sont au cœur du jeu, alors cela vaut la peine de les implémenter ; sinon ce sont juste des pièges techniques inutiles
Je fais mes jeux à ma manière avec Lua & Love2D
Le fait même de s’imposer ses propres contraintes est au cœur du plaisir
Quand le développement cesse d’être amusant, c’est le signe que quelque chose ne va pas, donc il faut chercher une meilleure façon de faire
Mon jeu YOYOZO est minuscule, 39 KB, mais il a figuré aux côtés de grosses productions dans la liste des meilleurs jeux de 2023 d’Ars Technica
https://news.ycombinator.com/item?id=38372936
Des années après avoir acheté une Playdate, j’ai enfin commencé à jouer avec le SDK, et j’apprends aussi Lua pour la première fois
J’aimerais davantage de typage fort et de sécurité dans le langage, mais c’est suffisant dans ce contexte
Pour l’instant je n’ai fait qu’une petite démo technique où du texte tourne dans un faux espace 3D selon la manivelle
https://bsky.app/profile/haydenblai.se/post/3lpgnya4cqk2a
Ce projet m’a fait réaliser qu’après une longue carrière dans le CRUD et les web apps, j’avais presque tout oublié de la trigonométrie
Le meilleur aspect du développement sur Playdate, c’est cette sensation libératrice d’avoir un canvas fixe : une fois les pixels placés, ça fonctionne tel quel sur tous les appareils
Après des années passées à ne faire que des UI responsives, c’est une expérience très nouvelle pour moi
Chaque fois que j’essaie de créer quelque chose avec un moteur de jeu (Godot, Unity, Unreal, etc.), je finis toujours par me battre contre le moteur
Au final, j’ai l’impression d’empiler des assets sur une forme de jeu prédéfinie, ce qui rend difficile la création du jeu que je veux vraiment
Si on compare au développement web, cela ressemble à un produit fini comme WordPress
Quand la configuration de base ne correspond pas à l’intention, cela exige énormément de hacks et de contournements
Les « game templates » jettent de l’huile sur le feu ici
On peut acheter des templates qui donnent l’apparence d’un jeu terminé en remplaçant juste l’écran-titre et les modèles
Presque la moitié des nouvelles sorties sur Steam ne sont guère plus que des jeux-template Unity/Unreal avec un léger reskin
Exemples divers :
https://assetstore.unity.com/packages/templates/…
https://store.steampowered.com/app/2488370/Cash_Cleaner_Simulator/
https://store.steampowered.com/app/2073910/A_Webbing_Journey/
https://store.steampowered.com/app/3498270/Better_Mart/
https://store.steampowered.com/app/2625420/Drive_Beyond_Horizons/
https://store.steampowered.com/app/3163790/Toy_Shop_Simulator/
https://store.steampowered.com/app/3023600/Horse_Farm_Simulator/
https://store.steampowered.com/app/3124550/Liquor_Store_Simulator/
Sur Google Play, tous les jeux finissent par se ressembler, avec de longs temps de chargement, des problèmes de rendu, du texte cassé, des bugs audio et autres soucis typiques de Unity
Pour des jeux « idle RPG » remplis de publicité sur mobile, on peut peut-être l’accepter, mais voir Unity utilisé en VR m’a toujours semblé franchement difficile à comprendre
Pour satisfaire aux performances exigées par le Meta Quest Store, il faut modifier en profondeur une grande partie du moteur Unity
Il est difficile d’atteindre les performances voulues, et sa façon de faire est vieillissante
Si l’on veut produire un logiciel de haute qualité, c’est impossible en partant d’un moteur auquel on ne peut pas faire confiance
L’auteur (Noel) a créé le jeu Celeste, vendu à plus de 3 millions d’exemplaires
https://en.wikipedia.org/wiki/Celeste_(video_game)
Je suis largement d’accord moi aussi, et je construis un framework de jeu C# orienté code (héritier spirituel de XNA/Monogame, utilisant Sokol plutôt que SDL)
https://zinc.graphics/
Les points forts du C# moderne : cross-platform, compilation NativeAOT, hot reloading natif, reflection, etc.
Personnellement, j’y ai aussi ajouté des source generators
L’image négative du passé subsiste, mais les progrès de CoreCLR et du langage ces 5 dernières années sont remarquables
La seule chose qui me manque vraiment, ce sont les Union Types, actuellement proposés et que j’espère voir ajoutés l’an prochain
https://github.com/dotnet/csharplang/blob/main/proposals/TypeUnions.md
Je n’ai utilisé C# que sur Win32 ou dans Unity, et même si j’ai des connaissances bas niveau côté moteurs en C/C++, je pensais que C# était impossible pour du cross-platform comme les consoles de jeu
Je réalise maintenant que je me trompais
Pour n’importe quel logiciel, je préfère partir de zéro au début
Pour quelqu’un qui a de l’expérience sur de gros projets, cela peut sembler lent, mais au stade startup c’est au contraire plus rapide
On implémente seulement le strict minimum, puis dès qu’une abstraction apparaît, la vitesse d’ajout de nouvelles fonctions augmente
La productivité dans un gros logiciel d’entreprise et dans un mini-moteur écrit soi-même n’a rien à voir
Le code qu’on a écrit soi-même se coupe et se refactore immédiatement, donc on va beaucoup plus vite
C’est pour cela que je préfère les microservices et les petites équipes
Quand on construit soi-même, il faut forcément passer par des tâtonnements et un champ de mines de choses qui cassent, et il faut aussi des années pour vraiment comprendre la nature du langage ou de la plateforme
Mais au final, tout ce processus devient une vraie force accumulée pour le développeur
Plutôt que d’utiliser un moteur, je me demande ce que ça donnerait de s’en tenir à un framework du niveau de MonoGame~
« Le processus en lui-même finit par devenir la vraie maîtrise du développeur » : je suis tout à fait d'accord.