Moteur de jeu

Infos
Un moteur de jeu est une application informatique (dite de type middleware) apportant les fonctionnalités nécessaires à la création d'un jeu.
Moteur de jeu

Un moteur de jeu est une application informatique (dite de type middleware) apportant les fonctionnalités nécessaires à la création d'un jeu.

Vue générale

Dans les jeux vidéo modernes, il existe cinq ensembles principaux gérés par des moteurs distincts, chacun concernant une fonction spécifique du développement : le graphisme, le son, le réseau (pour les jeux multijoueurs), la physique et l'intelligence artificielle. Mais la définition d'un moteur de jeu reste malgré tout relativement floue en raison de la juxtaposition des notions. Un moteur de jeu est ainsi le regroupement de l'ensemble des moteurs spécialisés nécessaires à la réalisation d'un jeu. Par exemple la société Valve Software commercialise le Source engine qui est le nom commercial de son moteur de jeu. Le Source engine est une solution de développement « clé en main » regroupant les différents moteurs (graphisme, son...) nécessaires au développement d'un jeu. La gestion de la physique de ce moteur de jeu est assurée par le moteur Havok, spécialisé et développé par une société tierce et qui est lui-même utilisé dans d'autres moteurs de jeu. Le choix d'un studio de création de jeu se limite donc généralement à acheter ou développer tout ou partie des moteurs nécessaires au développement de son jeu. Il est en revanche important de signaler que depuis plusieurs années le rôle des moteurs de jeu ne cesse de grandir. L'investissement que représente en effet le développement des moteurs de jeu ne cesse de croître et rend délicat voire impossible l’amortissement de ceux-ci sur une unique production. Parmi les moteurs de jeu les plus utilisés ou remarqués ces dernières années, on citera (liste non exhaustive) : le Renderware, les différents Unreal engine, Quake engine, le Source engine, le CryEngine, le Torque engine, Reality engine, Havok, Novodex, Antiryad Gx, etc.

Application middleware

Certaines compagnies sont maintenant spécialisées dans le développement de logiciels dits de middleware, c'est-à-dire fournissant des fonctions qui restent personnalisables. De tels développements ont pour but de ne plus « réinventer la roue » en développant une suite logicielle robuste qui inclut plusieurs éléments nécessaires à la création d'un jeu. De nombreux logiciels de ce type dans le jeu vidéo fournissent des facilités de développement pour les graphismes, les sons, la physique, et l'implémentation d'intelligences artificielles. Gamebryo et RenderWare sont deux représentants largement répandus. Certains middlewares fournissent exclusivement une seule facilité, comme par exemple la synthèse d'arbres et de plantes, c'est le cas de SpeedTree, cette spécialisation lui permet de générer des images plus convaincantes que des moteurs plus généralistes. Certains middlewares fournissent tout le code source, d'autres publient la spécification de leur interface de programmation pour permettre la liaison avec d'autres logiciels. Certains encore, proposent l'un ou l'autre des arrangements selon le contrat signé et les honoraires.

Fonctionnalités

Chaque moteur de jeu est unique. Toutefois, certaines fonctionnalités se retrouvent.

Les entrées/sorties

Cette partie s'occupe de la lecture des périphériques externes :
- Joystick (lecture de l'état des boutons et du ou des sticks)
- Souris (lecture de l'état des boutons, du mouvement relatif, de la position)
- Clavier Elle est aussi en charge de la lecture des données du jeu, et de l'écriture des sauvegardes.
- Lecture/écriture depuis un disque dur.
- Lecture depuis un DVD, un CD ou un mini disk.
- Lecture/écriture depuis une carte mémoire. C'est elle qui se chargera de compresser/décompresser les données du jeu (notamment pour accélérer les chargements). Elle sera aussi en charge de leur éventuel cryptage/décryptage.

Les mathématiques

On y trouvera toutes sortes de fonctions mathématiques nécessaires à l'élaboration d'un jeu. Pour un jeu 3D, on y trouvera plus particulièrement :
- les matrices. En général des matrices 3x4 ou 4x4 pour le stockage de l'orientation des objets (sur les trois axes), de leur scale (sur les trois axes) et parfois aussi de leur position. La signification réelle des lignes et colonnes est directement liée au moteur et n'a pas toujours de base mathématique réelle. Certains stockeront un scale uniforme sur la dernière colonne ou ligne, d'autres la translation, d'autres encore utiliseront des matrices de transformations plus complexes pour éviter les problèmes de scale dans le cas des matrices hiérarchisées.
- les quaternions. Ils servent au stockage des orientations. Ils sont beaucoup plus compacts que les matrices et supportent beaucoup mieux les interpolations. On les retrouve typiquement dans les animations, pour stocker l'orientation de chaque clef d'interpolation.
- les vecteurs. À deux, trois ou quatre dimensions. On parle de composantes x, y, z et w. La composante w n'est en général pas utilisée, et n'existe qu'à des fins d'optimisation sur les processeurs 128 bits. On peut citer comme exemple de calcul très souvent effectué dans un moteur de jeu : la multiplication de matrices, l'inversion de matrices, le produit scalaire ou vectoriel.

La physique

Le module de physique calculera le mouvement des objets, la manière dont ils interagissent les uns avec les autres, la manière dont ils glissent sur le sol ou sur les murs, la manière dont ils rebondissent etc. C'est lui aussi qui calculera la déformation des objets mous, des cheveux, poils, vêtements et autres rideaux. On peut distinguer trois grandes catégories de simulation :
- la physique du point. C'est la plus simple. Un objet est formalisé par un seul point en mouvement avec une vitesse, une accélération, une friction, de la gravité etc. En général, ce genre de physique se contente de déplacer les objets sans agir sur leur orientation.
- la physique du solide. Chaque entité est formalisée par une ou plusieurs formes mathématiques (boîte, sphère, gellule, cylindre) ou même par un mesh convexe. La physique du solide est beaucoup plus réaliste (et donc complexe) que la physique du point puisqu'elle gère aussi l'évolution de l'orientation. Certains éditeurs se sont spécialisés dans la fabrication de modules de physiques du solide pouvant être directement intégrés dans les moteurs existants. On citera par exemple Havok, Novodex, et dans le domaine du libre ODE.
- la physique de particules. Elle s'apparente à la physique du point. Un volume est constitué d'un ensemble de particules (on parle aussi d'atomes) liées entres eux par des contraintes (le plus souvent des ressorts). Ce type de physique autorise la déformation et la rupture des volumes. Elle est donc particulièrement bien adaptée à la simulation des tissus.

Détection des collisions

La gestion des collisions est une couche logicielle qui permet de détecter lorsque deux objets se rencontrent et ainsi de pouvoir définir une action résultante. Un objet est alors une représentation géométrique d'éléments du jeu (personnages, obstacle, projectiles, astéroïdes…). Un module de collision est typiquement constitué d'un ensemble de fonctions mathématiques pour le calcul des intersections par paires de primitives géométriques : sphère contre sphère, sphère contre boîte, boîte contre triangle… Chacune de ces fonctions calculera selon les capacités du module le point d'intersection, la normale au point de contact, ainsi que la distance de pénétration des deux objets. On distingue deux grandes catégories de collisions :
- La détection sur modèle d'objets statiques, la plus simple, considère deux objets sont en collision si au moment du traitement de la détection les deux objets se touchent. Comme le traitement est échantillonné régulièrement dans le temps, des objets en mouvement rapide ont très bien pu entrer en contact avec d'autres objets entre deux temps d'échantillonnage.
- La détection sur modèle d'objets dynamiques s'attache aussi au mouvement des objets. On traite la transition d'un instant échantilloné au suivant. Les calculs sont plus coûteux, mais ont l'avantage d'empêcher un volume en mouvement d'en traverser un autre sans que cela soit détecté. L'instant de la collision de deux objets peut être calculé plus précisément qu'avec la technique dite statique. Selon le type de jeu l'une ou l'autre des approches est utilisée. Les moteurs de jeux en 3D actuelles utilisent typiquement un mélange de ces deux méthodes. Pour optimiser les calculs de collision sur les formes complexes, les moteurs de jeu peuvent utiliser la notion de volume englobant et plus généralement de hiérarchie de volumes englobants. Le calcul rapide mais approximatif permet alors d'éliminer des états de non collision, dans le cas contraire un calcul exact est réalisé sur l'objet. La hiérarchie de volumes englobants rajoute seulement des étapes supplémentaires en subdivisant un objet en sous ensembles englobés dans une forme simple. Pour réduire le nombre de calcul de paire d'objets les moteurs recourent généralement à structurer l'espace en sous ensembles d'objets proches.

Le Graphisme

Voir Moteur 3D.

Le son

Voir Moteur Son.

Recours au langage de script

Le recours au langage de script est une méthode qui a aujourd'hui fait ses preuves, permettant, du point de vue développeur, de faciliter le paramétrage du moteur de jeu en fonction du gameplay qu'il a été décidé de réaliser. Le recours au script dans un projet de développement a pour conséquence de séparer les métiers, le programmeur du moteur peut s'occuper spécialement de cette tâche, le concepteur de niveaux (level designer) peut améliorer le gameplay sans pour cela être un programmeur chevronné. Historiquement, le besoin d'un système de script s'est fait sentir pour les jeux d'aventure nécessitant beaucoup d'interactions, il en a découlé Script Creation Utility for Maniac Mansion (SCUMM), créé initialement et comme son nom l'indique pour le jeu Maniac Mansion (1987) et réutilisé pour chaque nouveau jeu avec un minimum de modifications, il a resservi pour le jeu The Curse of Monkey Island (1997) soit 10 ans plus tard. Les autres types de jeu sont aussi devenus à leur tour complexes, leurs moteurs de jeu ont alors souvent incorporé un système de script Robert Huebner, (www.gamasutra.com, 1997). Pour le développement de Jedi Knight: Dark Forces II (1997), le moteur de jeu a été adapté pour supporter un langage de script. Robert Huebner, qui a participé à cette évolution, explique qu'il existait avant cela un langage binaire INF qu'il était dur d'assimiler, un livret compté était destiné à cet usage. Le langage de script implémenté : COG est compilé à la volée lors du lancement d'une partie puis exécuté sur une machine virtuelle (un automate à pile) pour assurer la robustesse du jeu. Il n'y a eu aucune conséquence négative rapportée que ce soit sur le développement ou sur le jeu lui-même, mais plutôt un accroissement de la créativité des concepteurs . Certaines entreprises ont développé leurs propres langages de script, comme il est écrit plus haut, c'est aussi le cas de id Software avec le langage QuakeC ou de Epic Games avec le langage UnrealScript. Mais l'intégration d'un langage de script est devenu très accessible, certaines bibliothèques logicielles étant développées indépendamment spécialement dans ce but. C'est le cas de la bibliothèque et du langage Lua qui a été utilisé dans un grand nombre de jeux de genres très divers , le langage Lua a été utilisé dans des jeux aussi divers que Baldur's Gate (1998), Escape from Monkey Island (2000), Homeworld 2 (2003), World of Warcraft (2004), Far Cry (2005).

L'intelligence artificielle

Voir Intelligence artificielle.

Le réseau

Voir Moteur Réseau.

Les menus

Il y a souvent dans les jeux en trois dimensions un moteur permettant de gérer les menus. En fait, le but d'un moteur de menu est de faciliter la création d'un menu en deux dimensions et de le superposer à la vue en trois dimensions afin que les informations qu'il transmet apparaissent quelque soit l'environnement dans le jeu.

Les TRC

Notes et références

==
Sujets connexes
Antiryad Gx   Automate fini   Baldur's Gate   Bibliothèque logicielle   Code source   Epic Games   Escape from Monkey Island   Far Cry   Gameplay   Havok Game Dynamics SDK   Homeworld 2   Id Software   Intelligence artificielle   Interface de programmation   Joystick (jeu vidéo)   Langage de script   Lua   Machine virtuelle   Maniac Mansion   Matrice (mathématiques)   Moteur 3D   Moteur Réseau   Moteur Son   ODE   QuakeC   Quaternion   Script Creation Utility for Maniac Mansion   Source engine   The Curse of Monkey Island   Type de jeu vidéo   UnrealScript   Valve Software   Vecteur   World of Warcraft  
#
Accident de Beaune   Amélie Mauresmo   Anisocytose   C3H6O   CA Paris   Carole Richert   Catherinettes   Chaleur massique   Championnat de Tunisie de football D2   Classement mondial des entreprises leader par secteur   Col du Bonhomme (Vosges)   De viris illustribus (Lhomond)   Dolcett   EGP  
^