Programmeur moteur jeu vidéo, de l'allocateur mémoire au job system

Un moteur de jeu dispose de 16 ou 33 millisecondes pour produire chaque image, sur PC comme sur console. Le programmeur moteur écrit en C++ ce qui se passe sous le gameplay : allocateurs, job system, streaming des ressources, couche plateforme et outils de build.

Recevoir la fiche complète

Mis à jour le Par l'équipe Delectus5 min de lecture

La fiche Programmeur moteur : technologies, chaîne du poste, une question et la grille d'évaluation

Un programmeur moteur écrit et maintient les couches basses d'un moteur de jeu : gestion de la mémoire, répartition du travail sur tous les cœurs, chargement des ressources, abstraction des plateformes, chaîne de build. Les studios qui ont leur propre moteur en cherchent pour le faire évoluer, comme Ubisoft avec Anvil et Snowdrop. Ceux qui travaillent sur Unreal Engine en cherchent pour modifier le code source du moteur et l'adapter aux consoles.

Le poste diffère de celui de programmeur gameplay. Le gameplay construit les mécaniques avec les systèmes du moteur ; le programmeur moteur fournit ces systèmes et répond de leur coût en millisecondes et en mégaoctets. Une liste de jeux sortis ne suffit donc pas. Ce qui compte, c'est de mesurer avant d'optimiser, d'expliquer un défaut de cache, une contention entre threads ou une fragmentation mémoire, et de travailler avec les kits de développement des consoles, dont la documentation est sous accord de confidentialité.

Faites lire du code plutôt que réciter la norme. Un extrait avec une course de données, une capture de profileur qui montre un pic de 8 ms ou un allocateur à compléter montrent vite le niveau. Le PDF contient un cas de 20 minutes sur une traversée de ville qui dépasse le budget d'image sur console.

Ce qu'un programmeur moteur écrit et maintient

C++ moderne, avec les contraintes d'un moteur

Le langage du poste, en C++17 ou C++20 selon les compilateurs des plateformes. Beaucoup de moteurs coupent les exceptions et le RTTI et remplacent une partie de la bibliothèque standard par leurs propres conteneurs, ou par EASTL. Vérifiez que le candidat sait ce que coûte chaque construction du langage.

Allocateurs et budgets mémoire

Arènes remises à zéro à chaque image, pools pour les objets de taille fixe, piles, zones séparées par durée de vie. Chaque système a un budget, et la fragmentation se surveille sur des sessions de plusieurs heures. Sur console, la quantité de mémoire est fixe.

Job system et multithreading

Le travail de chaque image est découpé en jobs répartis sur tous les cœurs, avec des dépendances entre eux. Certains moteurs utilisent des fibers pour ne jamais bloquer un thread. Unreal fournit son propre système de tâches. C'est un sujet de niveau senior : demandez un job system que la personne a écrit ou modifié.

Données orientées et ECS

La performance dépend surtout de la disposition des données en mémoire et du cache du processeur. Les architectures ECS (Unity Entities, Mass dans Unreal, EnTT, flecs) rangent les composants dans des tableaux contigus traités par des systèmes. Le candidat doit savoir quand ce modèle se justifie.

Ressources, cooking et streaming

Les fichiers des artistes sont convertis au format de chaque plateforme pendant le build, c'est le cooking. En jeu, le streaming charge et décharge les ressources pendant que le joueur avance, avec des lectures asynchrones et de la décompression, matérielle sur les consoles actuelles. Les à-coups en monde ouvert viennent souvent de là.

Plateformes et consoles

PlayStation 5, Xbox Series, Nintendo Switch 2 et PC. Les SDK et les kits de développement ne sont accessibles qu'aux studios agréés, sous accord de confidentialité. Chaque constructeur impose ses exigences de certification avant la sortie d'un jeu. Un candidat peut en parler sans entrer dans les détails couverts par ces accords.

Profileurs

Tracy, Superluminal, Unreal Insights côté moteur, PIX pour Xbox et Windows, Razor pour PlayStation, RenderDoc pour le GPU. Un programmeur moteur passe beaucoup de temps dans ces outils. Demandez-lui d'interpréter une capture.

Build, compilation et outils

CMake ou un outil maison comme l'Unreal Build Tool, compilation distribuée avec FASTBuild ou Incredibuild, Perforce pour les gros fichiers, une CI qui produit un build par plateforme. Sur un moteur de plusieurs millions de lignes, le temps de compilation et d'itération est un sujet de productivité pour tout le studio.

Le métier existe dans les studios qui développent leur moteur maison et dans ceux qui modifient en profondeur Unreal Engine ou un autre moteur. Les offres demandent un C++ de niveau expert, la gestion de la mémoire, le multithreading, l'analyse de performance et souvent une expérience console. Selon la taille de l'équipe, le poste est généraliste ou spécialisé : mémoire et ordonnancement, streaming, plateforme, outils. Beaucoup d'offres demandent plusieurs années de C++ et sont rédigées en anglais. Des profils venus de la simulation, de l'embarqué ou de la finance à faible latence peuvent s'y adapter s'ils ont l'habitude de mesurer et d'optimiser.

Les six blocs techniques à couvrir avec un programmeur moteur

  • C++ haute performance
  • Gestion mémoire et allocateurs
  • Multithreading et job system
  • Architecture du moteur et données orientées
  • Ressources, streaming et pipeline de build
  • Profilage et contraintes des consoles

Questions d'entretien pour un programmeur moteur, avec les réponses attendues

Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.

  1. Question 1 · confirmé

    À chaque image, le moteur alloue et libère des milliers de petits objets temporaires. Que proposez-vous ?

    Une bonne réponseD'abord mesurer : nombre d'allocations par image et temps passé dans l'allocateur. Puis un allocateur linéaire (arène) par image, remis à zéro en fin d'image, avec un double tampon si des données doivent survivre une image de plus. Un pool pour les objets de taille fixe. Il pense à l'alignement, aux destructeurs qui ne seront pas appelés et aux threads : une arène par thread de travail évite les verrous.

    Signal d'alerte« new et delete, le système s'en occupe. » Ou un allocateur général maison écrit sans avoir mesuré le problème.

  2. Question 2 · senior

    Comment concevez-vous un job system qui occupe tous les cœurs d'une console ?

    Une bonne réponseUn thread de travail par cœur disponible, en laissant ceux que le système se réserve. Des files de jobs par thread avec vol de travail entre threads, des dépendances exprimées par des compteurs ou un graphe, des jobs ni trop petits ni trop gros. Aucun job ne bloque son thread en attendant un autre : il exécute d'autres jobs pendant l'attente, ou le moteur utilise des fibers, comme Naughty Dog l'a présenté à la GDC 2015.

    Signal d'alerteUn std::thread créé par tâche, ou une file unique protégée par un mutex global.

  3. Question 3 · confirmé

    Une boucle qui met à jour 50 000 entités prend 4 ms, et le profileur montre beaucoup de défauts de cache. Que changez-vous ?

    Une bonne réponseLa disposition des données. Des tableaux contigus par composant (structure of arrays) au lieu d'objets éparpillés en mémoire et reliés par des pointeurs, seulement les champs utiles chargés dans la boucle, pas d'appel virtuel par entité, des entités regroupées par type. Il mesure avant et après, et ne parallélise qu'ensuite.

    Signal d'alerte« On compile en -O3 », ou multithreader la boucle sans toucher aux données.

  4. Question 4 · senior

    ECS ou hiérarchie d'objets avec héritage : comment choisissez-vous pour un nouveau système du moteur ?

    Une bonne réponseUn ECS quand beaucoup d'entités homogènes sont traitées en masse : données contiguës, systèmes faciles à paralléliser. Des objets classiques à composants quand ils sont peu nombreux avec une logique riche. Il compte le coût pour les outils de l'éditeur, la sérialisation, le débogage et l'existant. Il cite des exemples réels : Unity Entities, Mass dans Unreal, EnTT ou flecs.

    Signal d'alerteUne réponse dogmatique (« l'héritage, c'est mal » ou « l'ECS, c'est la mode ») sans critère de choix.

  5. Question 5 · senior

    Le joueur traverse un monde ouvert en véhicule et des textures apparaissent en retard, avec des à-coups. Comment organisez-vous le streaming ?

    Une bonne réponseLe monde découpé en cellules, un chargement anticipé selon la position et la vitesse, des lectures asynchrones sur un thread dédié avec des priorités, un budget mémoire avec éviction, des mips chargés du plus petit au plus détaillé, une décompression matérielle ou dans les jobs. Le thread principal ne bloque jamais sur une lecture disque. Il mesure le débit et la latence des lectures sur la machine cible.

    Signal d'alerteTout charger au démarrage du niveau, ou des lectures synchrones depuis le thread principal.

Recevez la fiche d'entretien complète en PDF

La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.

  • 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
  • Le niveau visé pour chaque question
  • Une mise en situation de 20 minutes et ce qu'on attend du candidat
  • La grille d'évaluation de 1 à 4, axe par axe

Questions fréquentes sur le recrutement d'un programmeur moteur

Programmeur moteur ou programmeur gameplay : comment distinguer les profils ?

Le programmeur gameplay construit les mécaniques du jeu avec les outils du moteur et travaille au quotidien avec les game designers. Le programmeur moteur écrit ces outils et répond de leur coût en temps et en mémoire. Sur un CV, cherchez des systèmes et non des fonctionnalités de jeu : allocateur, job system, streaming, portage sur une plateforme, temps de chargement réduit. En entretien, faites expliquer un gain mesuré au profileur.

Un développeur C++ hors jeu vidéo peut-il devenir programmeur moteur ?

Oui, s'il a déjà travaillé sous contrainte de performance ou de mémoire : simulation, embarqué, moteur de rendu industriel, finance à faible latence. Il lui manquera le vocabulaire du jeu (image, streaming, cooking) et l'expérience des consoles, qui s'apprennent sur le poste. Un développeur C++ d'applications de gestion aura plus de chemin à faire, car il n'a souvent jamais eu à compter les allocations ou les défauts de cache.

L'expérience console est-elle indispensable ?

Elle compte pour un poste de portage, de plateforme ou d'optimisation finale. Pour un poste sur le job system, la mémoire ou les outils, un excellent profil PC peut apprendre les spécificités des consoles avec l'équipe. Les candidats ne peuvent pas détailler ce qui est couvert par les accords de confidentialité, mais un profil qui a sorti des jeux sur console peut décrire les contraintes de mémoire et de certification rencontrées.

Test à la maison ou exercice en entretien pour un programmeur moteur ?

Beaucoup de studios combinent un test technique court en C++ et une discussion technique approfondie. Le test peut demander un petit allocateur, une file de jobs ou l'optimisation d'une boucle, avec des mesures à fournir. En entretien, faites commenter le code rendu et lire une capture de profileur. Évitez les devoirs de plusieurs jours : les bons profils en poste ont rarement ce temps.

Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.

Les fiches voisines

Toutes les fiches →

Voyez Delectus sur vos propres offres.

Commencez gratuitement. Passez à l'échelle quand vous êtes prêt.

Demander une démo

Votre ATS, connecté à Delectus

  • Workable
  • Teamtailor
  • iCIMS
  • Lever
  • SmartRecruiters
  • Jobvite
  • Greenhouse
  • Pinpoint