Aux débuts du jeu vidéo (du début des années 1970 au milieu des années 1980), un programmeur cumulait souvent les fonctions de concepteur et d'artiste . Cela s'expliquait généralement par les capacités limitées des premiers ordinateurs , qui ne permettaient pas de disposer de personnel spécialisé pour chaque fonction. Les concepts de jeu étaient généralement simples et les parties étaient conçues pour être jouées seulement quelques minutes. Mais surtout, le contenu artistique et les variations de gameplay étaient limités par la puissance des ordinateurs.
Plus tard, avec l'augmentation de la puissance des bornes d'arcade et des consoles de salon , les développeurs ont pu élaborer des scénarios plus complexes et intégrer des fonctionnalités telles que des graphismes haute résolution en couleur, une physique réaliste , une intelligence artificielle avancée et un son numérique . La technologie a tellement progressé que les jeux actuels proposent généralement des graphismes 3D et des séquences vidéo en plein écran , grâce à des ressources créées par des graphistes professionnels . Aujourd'hui, l'expression péjorative « art de programmeur » désigne les couleurs vives et le style graphique anguleux caractéristiques des premiers jeux vidéo.
Le désir d'enrichir les jeux et de développer leurs ressources a nécessité une division du travail . Initialement, la création artistique était confiée à des artistes à temps plein . Puis, la programmation est devenue une discipline distincte de la conception de jeux . Aujourd'hui, seuls certains jeux, comme le jeu de puzzle Bejeweled , sont suffisamment simples pour ne nécessiter qu'un seul programmeur à temps plein. Malgré cette division, la plupart des développeurs de jeux (artistes, programmeurs et même producteurs ) ont leur mot à dire sur la conception finale des jeux contemporains.
Disciplines
Un jeu vidéo contemporain peut intégrer une physique avancée, une intelligence artificielle, des graphismes 3D, un son numérisé, une bande originale, une stratégie complexe et utiliser divers périphériques d'entrée ( souris , claviers , manettes et joysticks ). Il peut être jouable en ligne ou en réseau local . Chaque aspect du jeu peut mobiliser un programmeur, voire plusieurs. Certains programmeurs se spécialisent dans un domaine précis de la programmation de jeux , tandis que d'autres maîtrisent plusieurs aspects. Le nombre de programmeurs nécessaires pour chaque fonctionnalité dépend de leurs compétences, mais surtout du type de jeu développé.
Programmeur de moteur de jeu
Les programmeurs de moteurs de jeu créent le moteur de base du jeu, incluant la simulation physique et les graphismes. De plus en plus, les jeux vidéo utilisent des moteurs de jeu existants , qu'ils soient commerciaux, libres ou gratuits . Ces moteurs sont souvent personnalisés pour un jeu particulier, et les programmeurs se chargent de ces modifications.
Programmeur de moteur physique
Le programmeur physique d'un jeu vidéo est chargé de développer les mécanismes physiques utilisés par ce jeu. Généralement, un jeu ne simule que quelques aspects de la physique réelle. Par exemple, un jeu spatial peut nécessiter une simulation de la gravité , mais n'aura pas besoin de simuler la viscosité de l'eau .
Comme les cycles de traitement sont toujours précieux, les programmeurs physiques peuvent utiliser des « raccourcis » peu gourmands en ressources de calcul, mais dont le rendu est suffisamment convaincant pour le jeu en question. Dans d'autres cas, une physique irréaliste est employée pour simplifier le gameplay ou créer un effet dramatique. Parfois, un sous-ensemble spécifique de situations est défini et leurs résultats physiques sont enregistrés et ne sont jamais calculés lors de l'exécution.
Certains programmeurs de physique peuvent même se pencher sur les tâches difficiles de la cinématique inverse et d'autres mouvements attribués aux personnages de jeux vidéo, mais de plus en plus, ces mouvements sont assignés via des bibliothèques de capture de mouvement afin de ne pas surcharger le processeur avec des calculs complexes.
programmeur de moteur graphique
Historiquement, ce titre désignait généralement un programmeur qui développait des algorithmes de rendu spécialisés et des optimisations ingénieuses pour les graphismes 2D . Aujourd'hui, cependant, il est presque exclusivement attribué aux programmeurs spécialisés dans le développement et la modification de moteurs de rendu graphique 3D complexes . Certaines compétences en graphisme 2D sont toutefois redevenues utiles récemment pour le développement de jeux destinés à la nouvelle génération de téléphones portables et de consoles de jeux portables .
Un programmeur en graphisme 3D doit avoir une solide maîtrise des concepts mathématiques avancés tels que les mathématiques vectorielles et matricielles , les quaternions et l'algèbre linéaire .
Les programmeurs qualifiés spécialisés dans ce domaine du développement de jeux vidéo peuvent exiger des salaires élevés et sont généralement rares. Leurs compétences peuvent être utilisées pour des jeux vidéo sur n'importe quelle plateforme .
Programmeur en intelligence artificielle
Un programmeur en IA conçoit la logique temporelle pour simuler l'intelligence des ennemis et des adversaires. Ce domaine est devenu une discipline spécialisée, car ces tâches étaient auparavant confiées à des programmeurs spécialisés dans d'autres domaines. Un programmeur en IA peut programmer les systèmes de recherche de chemin , de stratégie et de tactique ennemie. C'est l'un des aspects les plus complexes de la programmation de jeux vidéo, et sa sophistication évolue rapidement. Les jeux actuels consacrent environ 10 à 20 % de leurs effectifs de programmeurs à l'IA.
Certains jeux, comme les jeux de stratégie tels que Civilization III ou les jeux de rôle comme The Elder Scrolls IV: Oblivion , utilisent l'IA de manière intensive, tandis que d'autres, comme les jeux de réflexion , l'utilisent avec parcimonie, voire pas du tout. De nombreux développeurs ont créé des langages entiers permettant de programmer l'IA de leurs jeux via des scripts . Ces langages sont généralement moins techniques que celui utilisé pour le développement du jeu et sont souvent employés par les concepteurs de jeu ou de niveaux pour créer l'univers. De nombreux studios mettent également les scripts de leurs jeux à la disposition des joueurs, et ils sont fréquemment utilisés par les développeurs de mods tiers .
Il ne faut pas confondre l' intelligence artificielle utilisée dans la programmation des jeux vidéo avec la programmation et la recherche académiques en IA . Bien que ces deux domaines s'inspirent mutuellement, ils sont généralement considérés comme des disciplines distinctes, malgré quelques exceptions. Par exemple, le jeu Black & White de Lionhead Studios ( 2001) propose une approche originale de l'IA : une créature contrôlée par l'utilisateur utilise l'apprentissage automatique pour modéliser ses comportements au cours du jeu. Ces dernières années, des efforts accrus ont été consacrés à l'exploration de domaines prometteurs de la recherche en IA et de la programmation de l'IA pour les jeux vidéo.
Programmeur sonore
La programmation sonore, qui n'est pas toujours une discipline à part entière, est un élément essentiel de la programmation de jeux vidéo depuis l'époque de Pong . La plupart des jeux utilisent l'audio, et beaucoup possèdent une bande son complète. Les jeux audio sur ordinateur se passent totalement de graphismes et utilisent le son comme principal mécanisme de retour d'information.
De nombreux jeux utilisent des techniques avancées telles que le son spatialisé 3D , ce qui rend la programmation audio complexe. Pour ces jeux, un ou deux programmeurs peuvent se consacrer entièrement à la conception et à l'amélioration du moteur sonore, et ces programmeurs peuvent être formés ou avoir une formation en traitement numérique du signal .
Les outils de script sont souvent créés ou maintenus par des programmeurs sonores à l'intention des concepteurs sonores . Ces outils permettent aux concepteurs d'associer des sons à des personnages, des actions, des objets et des événements, tout en assignant de la musique ou des sons d'ambiance aux environnements de jeu (niveaux ou zones) et en définissant des variables environnementales telles que la réverbération.
Programmeur de gameplay
Bien que tous les programmeurs contribuent au contenu et à l'expérience d'un jeu, le programmeur gameplay se concentre davantage sur la stratégie, l'implémentation des mécaniques et de la logique du jeu, ainsi que sur son ambiance. Il ne s'agit généralement pas d'une discipline à part entière, car les tâches de ce programmeur varient d'un jeu à l'autre, et il sera inévitablement amené à intervenir dans des domaines plus spécialisés du développement, tels que les graphismes ou le son.
Ce programmeur peut implémenter des tables de stratégie, modifier le code d'entrée ou ajuster d'autres facteurs qui influencent le jeu. Cependant, bon nombre de ces aspects peuvent être modifiés par des programmeurs spécialisés dans ces domaines (par exemple, les tables de stratégie peuvent être implémentées par des programmeurs en IA).
Scripteur
Dans les premiers jeux vidéo, les programmeurs de gameplay écrivaient le code pour créer tout le contenu du jeu : si le joueur devait tirer sur un ennemi particulier et qu’une clé rouge devait apparaître avec du texte à l’écran, alors cette fonctionnalité était entièrement écrite dans le cadre du programme principal en langage C ou assembleur par un programmeur de gameplay.
De nos jours, le moteur de jeu est généralement séparé de la programmation du gameplay. Cette approche présente plusieurs avantages en matière de développement. Le moteur de jeu gère le rendu graphique, le son, la physique, etc., tandis qu'un langage de script s'occupe des cinématiques, du comportement des ennemis et des objectifs du jeu. Les projets de grande envergure peuvent faire appel à une équipe de scripteurs pour implémenter ces contenus.
Les programmeurs sont généralement aussi des concepteurs de jeux. Il est souvent plus facile de trouver un concepteur de jeux qualifié à qui l'on peut apprendre un langage de script que de trouver un concepteur de jeux qualifié maîtrisant le C++ .
programmeur d'interface utilisateur
Ce programmeur est spécialisé dans la programmation d'interfaces utilisateur (IU) pour les jeux vidéo. Bien que certains jeux possèdent des interfaces utilisateur personnalisées, ce programmeur est plus susceptible de développer une bibliothèque réutilisable dans plusieurs projets. La plupart des IU sont en 2D, mais les IU modernes utilisent généralement la même technologie 3D que le reste du jeu ; une certaine connaissance des mathématiques et des systèmes 3D est donc utile pour ce poste. Les systèmes d'IU avancés peuvent permettre l'utilisation de scripts et d'effets spéciaux, tels que la transparence, l'animation ou les effets de particules pour les commandes.
programmateur d'entrée

La programmation des entrées, bien que n'étant généralement pas un poste à part entière ni même une fonction spécifique sur un projet de jeu, reste une tâche importante. Ce programmeur écrit le code qui spécifie comment les périphériques d'entrée, tels qu'un clavier , une souris ou un joystick, interagissent avec le jeu. Ces routines sont généralement développées dès les premières étapes de la production et font l'objet d'ajustements continus tout au long du développement. En règle générale, un programmeur n'a pas besoin de consacrer tout son temps au développement de ces systèmes. Un jeu en temps réel à détection de mouvements, utilisant des appareils comme la télécommande Wii ou Kinect, peut nécessiter un système d'entrée très complexe et à faible latence, tandis que les exigences HID d'un jeu de stratégie au tour par tour piloté par la souris, tel que Heroes of Might and Magic, sont nettement plus simples à mettre en œuvre.
Programmeur réseau
Ce programmeur conçoit le code permettant aux joueurs de s'affronter ou de coopérer, connectés via un réseau local ( LAN ) ou Internet (ou, plus rarement, directement par modem ). Les programmeurs chargés de l'implémentation de ces fonctionnalités peuvent consacrer tout leur temps à ce rôle, souvent considéré comme l'un des plus complexes sur le plan technique. La latence réseau , la compression des paquets et les déconnexions ou interruptions de connexion ne sont que quelques-uns des problèmes à prendre en compte. Bien que les fonctionnalités multijoueurs puissent occuper la totalité du cycle de production et nécessitent que les autres systèmes du moteur soient conçus en tenant compte du réseau, les systèmes réseau sont souvent reportés aux derniers mois de développement, ce qui complexifie encore davantage ce rôle. Certains jeux ont vu leurs fonctionnalités en ligne (souvent considérées comme moins prioritaires que le gameplay principal) supprimées plusieurs mois avant leur sortie en raison de problèmes tels que le manque de gestion, de prévoyance dans la conception ou de difficultés d'adaptation. Virtua Fighter 5 sur PS3 est un exemple notable de cette tendance.
programmeur d'outils de jeu
Le développeur d'outils peut contribuer au développement d'un jeu en créant des outils personnalisés. Ces outils de développement incluent souvent des fonctionnalités telles que la compilation de scripts, l'importation ou la conversion de ressources graphiques et l'édition de niveaux. Si certains outils utilisés sont des logiciels commerciaux comme un EDI ou un éditeur graphique, les développeurs d'outils créent des outils aux fonctions spécifiques, adaptées à un jeu particulier et non disponibles dans les produits commerciaux. Par exemple, un développeur de jeu d'aventure pourrait avoir besoin d'un éditeur pour gérer les dialogues à embranchements narratifs , tandis qu'un développeur de jeu de sport pourrait utiliser un éditeur propriétaire pour gérer les statistiques des joueurs et des équipes. Ces outils ne sont généralement pas accessibles aux consommateurs qui achètent le jeu.
Programmeur de portage
Le portage d'un jeu d'une plateforme à une autre a toujours été une activité essentielle pour les développeurs. Certains programmeurs se spécialisent dans cette tâche, convertissant le code d'un système d'exploitation pour qu'il fonctionne sur un autre. Parfois, le programmeur est chargé d'assurer la compatibilité de l'application non seulement avec un seul système d'exploitation, mais aussi avec divers appareils, comme les téléphones mobiles . Cependant, il arrive souvent que le portage implique de réécrire l'intégralité du jeu, car les langages , outils ou matériels propriétaires rendent la conversion du code source vaine.
Ce programmeur doit maîtriser les systèmes d'exploitation et les langages d'origine et cibles (par exemple, convertir un jeu initialement écrit en C++ en Java ), convertir les ressources graphiques et sonores, ou réécrire le code pour les téléphones à faible mémoire. Il peut également être amené à contourner des implémentations de langage boguées, parfois peu documentées, à refactoriser le code , à superviser plusieurs branches de code, à réécrire le code pour l'adapter à différentes tailles d'écran et à implémenter des directives spécifiques aux opérateurs. Enfin, il peut être amené à corriger des bogues non détectés dans la version originale du jeu.
Programmeur technologique
Le programmeur technique se trouve généralement dans les grands studios de développement dotés de départements dédiés exclusivement à la R&D . Contrairement aux autres membres de l'équipe de programmation, il n'est généralement pas affecté à un projet ou un type de développement spécifique pendant une période prolongée et relève généralement directement du directeur technique ou d'un chef de département, plutôt que d'un producteur de jeux. Comme son intitulé l'indique, ce poste est extrêmement exigeant sur le plan technique et requiert une connaissance approfondie du matériel de la plateforme cible. Les tâches couvrent un large éventail de sujets, notamment l'implémentation pratique d'algorithmes décrits dans des articles de recherche, l'optimisation en assembleur de bas niveau et la capacité à résoudre des problèmes complexes liés aux besoins en mémoire et à la mise en cache lors des dernières phases d'un projet. Il existe de nombreux points communs entre ce poste et d'autres, en particulier celui de programmeur graphique.
Généraliste
Dans les petites équipes, un ou plusieurs programmeurs sont souvent qualifiés de « généralistes » et assument diverses autres fonctions selon les besoins. Les généralistes sont fréquemment chargés de rechercher les bogues et de déterminer les compétences requises au niveau du sous-système pour les corriger.
Programmeur de jeu principal
Le programmeur principal est responsable de l'ensemble de la programmation du jeu. Il lui incombe de veiller à la bonne implémentation des différents sous-modules et de suivre le développement du point de vue de la programmation. Ce poste est généralement occupé après plusieurs années d'expérience dans d'autres domaines de la programmation de jeux. Malgré son titre, le programmeur principal consacre généralement moins de temps à la programmation que les autres programmeurs du projet, car il doit participer à des réunions et interagir avec le client et les autres responsables du jeu. Il doit néanmoins programmer occasionnellement et posséder une bonne connaissance des aspects techniques du jeu. Les rôles de directeur technique et de programmeur principal présentent souvent de nombreuses similitudes, si bien qu'ils sont fréquemment assurés par une seule et même personne.
Plateformes
Les programmeurs de jeux vidéo peuvent se spécialiser sur une plateforme ou une autre, comme la Wii U ou Windows . Ainsi, en plus de se spécialiser dans une discipline de la programmation de jeux, un programmeur peut également se spécialiser dans le développement sur une plateforme particulière. Par conséquent, un programmeur de jeux vidéo pourrait être intitulé « Programmeur graphique 3D PlayStation 3 ». Certaines disciplines, comme l'intelligence artificielle, sont transférables à différentes plateformes et n'ont pas besoin d'être adaptées à un système en particulier. De même, les principes généraux du développement de jeux, tels que les concepts de programmation graphique 3D, l'ingénierie sonore et la conception d'interfaces utilisateur, sont transférables d'une plateforme à l'autre.
Éducation
Il est à noter que de nombreux programmeurs de jeux vidéo n'ont pas de formation académique, ayant débuté comme amateurs et programmant par eux-mêmes, pour le plaisir, et ayant finalement réussi grâce à leur aptitude et à leur expérience acquise sur le tas. Cependant, la plupart des offres d'emploi pour programmeurs de jeux vidéo exigent un diplôme de licence (en mathématiques, physique, informatique ou expérience équivalente).
De plus en plus d'universités proposent des cours et des diplômes en programmation de jeux vidéo. Ces diplômes présentent des similitudes importantes avec les formations en informatique et en génie logiciel .US . Les programmeurs les moins expérimentés, avec moins de trois ans d'expérience, perçoivent un salaire annuel moyen supérieur à 72 000 $ US. Les programmeurs les plus expérimentés, avec plus de six ans d'expérience, perçoivent un salaire annuel moyen supérieur à 124 000 $ US.
En général, les chefs de projet programmeurs sont les mieux rémunérés, même si certains programmeurs en infographie 3D peuvent égaler, voire dépasser, leurs salaires. Selon la même enquête mentionnée précédemment, les chefs de projet programmeurs gagnent en moyenne 127 900 $ par an.
Sécurité de l'emploi
Source :
Bien que les ventes de jeux vidéo rivalisent avec celles d'autres formes de divertissement comme le cinéma , l' industrie du jeu vidéo est extrêmement instable. Les programmeurs de jeux ne sont pas à l'abri de cette instabilité, car leurs employeurs rencontrent des difficultés financières.
Les développeurs tiers, la catégorie la plus courante de développeurs de jeux vidéo , dépendent d'un flux de trésorerie régulier provenant des éditeurs . Si une étape importante ou une échéance n'est pas respectée (ou pour diverses autres raisons, comme l'annulation du jeu), les fonds peuvent venir à manquer et le développeur peut être contraint de licencier du personnel ou de déposer le bilan et de cesser son activité. Les programmeurs travaillant pour de grands éditeurs sont relativement protégés de ces aléas, mais même ces grands éditeurs peuvent faire faillite (comme lors du rachat d' Hasbro Interactive par Infogrames et de l'annulation de plusieurs projets ; ou encore lors de la faillite de The 3DO Company en 2003 et de l'arrêt de toutes ses activités). Le CV de certains programmeurs est marqué par de courtes expériences, ne dépassant pas un an, car ils sont contraints de passer d'un studio en difficulté à un autre. C'est pourquoi certains préfèrent travailler comme consultants et sont ainsi quelque peu à l'abri des conséquences du sort des différents studios.
Langues et outils
Divers langages de script , tels que Ruby , Lua et Python , sont utilisés pour générer du contenu comme le gameplay et surtout l'IA. Les scripts sont généralement analysés au chargement (lorsque le jeu ou le niveau est chargé en mémoire principale) puis exécutés à l'exécution (via des branches logiques ou d'autres mécanismes similaires). Ils ne sont généralement pas exécutés par un interpréteur , ce qui ralentirait considérablement l'exécution. Les scripts sont souvent utilisés de manière sélective, notamment pour l'IA et la logique de jeu de haut niveau. Certains jeux sont conçus avec une forte dépendance aux scripts, et certains scripts sont compilés au format binaire avant l'exécution du jeu. Lors de la phase d'optimisation, certaines fonctions de script sont souvent réécrites dans un langage compilé.
Java est utilisé pour de nombreux jeux web car il est multiplateforme , ne nécessite généralement pas d'installation par l'utilisateur et présente moins de risques de sécurité qu'un programme exécutable téléchargé. Java est également un langage populaire pour les jeux mobiles . Adobe Flash , qui utilise le langage ActionScript , et JavaScript sont des outils de développement courants pour les jeux web.
Avec l'augmentation de la taille et de la complexité des jeux, les intergiciels gagnent en popularité dans l'industrie. Ils offrent des fonctionnalités plus étendues et de plus haut niveau que les API de bas niveau standard telles que DirectX et OpenGL , notamment pour l'animation squelettique . Outre la prise en charge de technologies plus complexes, certains intergiciels s'efforcent d'être indépendants de la plateforme , facilitant ainsi les conversions courantes, par exemple de Microsoft Windows vers la PS4 . En résumé, les intergiciels visent à réduire au maximum les redondances dans le cycle de développement (par exemple, la création de nouveaux systèmes d'animation pour chaque jeu produit par un studio), permettant ainsi aux programmeurs de se concentrer sur le contenu.
D'autres outils sont également essentiels aux développeurs de jeux : les logiciels 2D et 3D (comme Blender , GIMP , Photoshop , Maya ou 3ds Max ) permettent aux programmeurs de visualiser et de modifier les ressources créées par les artistes ou autres membres de l'équipe de production. Les systèmes de gestion de versions garantissent la sécurité du code source et optimisent les fusions. Les environnements de développement intégrés (IDE) avec débogueur (comme Visual Studio ) facilitent grandement l'écriture de code et la résolution des bogues.