Programmer des véhicules dans les jeux
(wassimulator.com)- L’implémentation des véhicules dans les jeux privilégie l’expérience de jeu plutôt qu’un véritable moteur physique
- Selon les jeux de course et les simulateurs, la manière de piloter et le niveau d’immersion diffèrent fortement
- Une simulation de véhicule se compose de trois éléments principaux : moteur/boîte de vitesses, pneus, châssis
- La modélisation des pneus et la notion de glissement (slip) sont essentielles pour reproduire une sensation de conduite réaliste
- Le développeur doit lui-même définir le niveau de simplification et d’abstraction adapté au concept du jeu
Pourquoi les véhicules sont particuliers dans les jeux
Les véhicules dans les jeux servent d’élément d’expérience central dans de nombreux genres.
Des commandes irréalistes comme des simulations de conduite réalistes peuvent toutes deux transmettre la “sensation de conduire”.
Par exemple, Mario Kart et Assetto Corsa visent des expériences fondamentalement différentes, mais l’essence de la programmation de véhicules reste la même.
Plutôt que de reproduire exactement les lois de la physique réelle, l’enjeu est de savoir comment transmettre la sensation de conduite attendue par l’utilisateur.
L’objectif du développeur n’est pas tant une “simulation exacte” que la conception de l’expérience voulue.
Premières tentatives et leçons : AV Racer
Au début du développement d’AV Racer, le véhicule était déplacé avec un simple modèle de mécanique newtonienne, sans pour autant procurer une sensation proche d’une vraie voiture.
Rotations, drift, vitesse angulaire et autres aspects ont été ajustés à coups de code spécifique et de réglages de paramètres.
Cela permettait de produire une sensation empirique de “glisse”, mais restait insuffisant dans les cas extrêmes ou face aux attentes d’un vrai conducteur.
Sans une bonne compréhension de la physique réelle du véhicule et de l’expérience du conducteur, on finit par se heurter à des limites fondamentales.
Pour aller plus loin, il a donc fallu étudier les principes réels de la dynamique automobile.
Structure d’une simulation de véhicule pour le jeu
Dans un jeu, un véhicule peut être divisé en trois éléments conceptuels : moteur (et boîte de vitesses), roues/pneus, châssis.
Moteur (boîte de vitesses incluse)
- Reçoit des entrées comme l’accélérateur et les changements de rapport
- Calcule le couple et le régime moteur (RPM), puis les transforme selon le rapport engagé
- Fonctionne avec un retour d’information mutuel avec les roues (autrement dit, une synchronisation bidirectionnelle moteur-roues)
Pneus (roues incluses)
- Reçoivent diverses entrées : couple moteur, freinage, direction, charge, friction de la route, etc.
- Toutes les forces sont générées au point de contact pneu-sol
- La modélisation des pneus (par exemple la Pacejka Magic Formula) permet de reproduire des forces réalistes
Châssis
- Joue le rôle de corps rigide dans le moteur physique
- Réagit aux forces des pneus, à la résistance de l’air, à la gravité, aux collisions et autres influences externes
- Détermine le mouvement global du véhicule et influence les variations de charge sur les pneus
| Élément | Entrées principales | Sorties principales |
|---|---|---|
| Moteur/boîte de vitesses | Accélérateur, entrée de boîte, vitesse des roues | Couple de rotation, RPM |
| Pneus | Couple moteur, freinage, direction, charge, friction | Forces sur le châssis, synchronisation moteur-roues |
| Châssis | Forces des pneus, résultats aérodynamiques | Charge sur les roues, déplacement global |
Comme dans un véhicule réel, implémenter avec une précision parfaite 100 % de tous les détails physiques est irréaliste.
À moins d’être dans le laboratoire de recherche d’un constructeur automobile, la plupart des jeux et simulations utilisent des modèles boîte noire, des formules et des approches simplifiées.
L’essentiel est donc que le concepteur décide ce qu’il faut omettre et ce qu’il faut mettre en avant.
Conception du moteur et de la transmission
Moteur (cœur du calcul du couple)
- En réalité c’est extrêmement complexe, mais en code on peut le représenter comme un simple modèle boîte noire de entrée (RPM, accélérateur) → sortie de couple
- Les courbes de couple/puissance peuvent être paramétrées numériquement ou graphiquement afin de simuler des moteurs aux comportements variés
- Exemple : concevoir directement la courbe avec Desmos, etc., pour ajuster le “caractère du moteur”
Boîte de vitesses
- Peut être implémentée simplement avec une table de rapports de transmission
- Les changements de rapport déterminent les caractéristiques d’accélération, la vitesse maximale, etc. du véhicule
- C’est simple, mais l’impact sur l’expérience de jeu est important
| Rapport | Ratio |
|---|---|
| R | -2.92 |
| N | 0 |
| 1 | 2.50 |
| 2 | 1.61 |
| 3 | 1.10 |
| 4 | 0.81 |
| 5 | 0.68 |
Synchronisation des RPM moteur et des roues
- Les RPM du moteur et la vitesse angulaire des roues motrices sont interdépendants
- Le calcul numérique se fait à l’aide d’équations différentielles basées sur l’écart entre ces deux variables d’état
- On implémente à chaque frame un rapprochement progressif, sous la forme d’un système qui “poursuit une valeur cible”
Cela permet de s’étendre aussi bien vers un modèle arcade que vers un simulateur.
Quand le joueur ajuste divers paramètres moteur (par exemple le profil d’arbre à cames, le turbo, etc.), cela peut être relié au son ou aux changements de courbe de puissance.
Même sans reproduire exactement le mouvement réel du moteur, on peut transmettre clairement le lien de cause à effet et renforcer l’expérience d’interaction.
Modèle de pneu
Rôle du pneu
- C’est la seule partie du véhicule qui est en contact réel avec la route
- Toutes les forces d’accélération, de freinage et de passage en courbe sont générées à la zone de contact du pneu
- Les forces naissent principalement de la déformation élastique et des propriétés de friction
Force longitudinale (accélération/freinage) et taux de glissement (slip ratio)
- Le pneu offre son adhérence maximale en friction statique ; au-delà de la limite, il passe en friction dynamique (glissement)
- Le taux de glissement est calculé à partir de la différence entre la vitesse de rotation de la roue (accélération/freinage) et la vitesse de déplacement au sol
- Taux de glissement = (vitesse angulaire de la roue - vitesse angulaire en roue libre) / vitesse angulaire en roue libre
- En général, il y a glissement quand la roue tourne plus vite que le sol à l’accélération, et plus lentement au freinage
- L’évolution de l’adhérence selon le taux de glissement peut être représentée par une courbe
- L’adhérence augmente jusqu’à une certaine zone, puis chute fortement après un pic
Formule de calcul des forces intégrant le slip ratio (Pacejka Magic Formula, etc.)
- On utilise des formules prenant le taux de glissement en entrée pour produire des courbes complexes (sinus/arctangente paramétrés)
- Le calcul doit être effectué individuellement pour chaque pneu
Force latérale (virage) et angle de glissement (slip angle)
- En virage, la zone de contact se déforme, ce qui génère un angle de glissement
- Angle de glissement = différence d’angle entre la direction réelle du pneu et la direction vers laquelle la roue pointe
- Plus l’angle de glissement augmente, plus l’adhérence augmente progressivement, jusqu’à dépasser une limite où le pneu décroche
- La relation entre angle de glissement et adhérence suit elle aussi une courbe caractéristique
- De nombreux paramètres influencent ce phénomène : charge, friction, variations dynamiques, etc.
Phénomènes comme le sous-virage et le survirage
- Sous-virage : lorsque l’angle de glissement des roues avant est supérieur à celui des roues arrière, la voiture tourne moins que prévu
- Survirage : lorsque l’angle de glissement des roues arrière devient plus important, l’arrière du véhicule part vers l’extérieur
- Avec un bon modèle de pneu, ces caractéristiques de tenue de route apparaissent naturellement
Limitation mutuelle des forces longitudinales et latérales (Friction Circle)
- Quand un pneu doit utiliser en même temps sa force pour accélérer/freiner et pour tourner, les maxima de chaque direction s’influencent mutuellement
- Cercle de friction (circle/ellipse) : la somme des deux vecteurs de force ne peut pas dépasser une limite
- (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
- Exemple : lors d’un freinage brutal avec un braquage fort, il est facile de perdre le contrôle
- Les pneus réels ont un comportement courbe et non linéaire ; il faut donc ajuster les paramètres en fonction de données réelles
Implémentation en code
- Calculer séparément les forces longitudinales et latérales pour chaque pneu
- Additionner les deux vecteurs puis les normaliser (scaling) à l’intérieur d’un cercle de friction virtuel
- En ajustant dynamiquement les paramètres, on peut expérimenter facilement des variations avancées de comportement routier
Intégration dans le moteur physique global du véhicule
- Les forces des pneus + la sortie de la suspension + les influences externes (gravité, traînée, etc.) sont agrégées dans le châssis
- Les lois du mouvement de Newton permettent ensuite de mettre à jour accélération et vitesse à chaque frame
Éléments supplémentaires extensibles
- Géométrie de suspension : carrossage, chasse, etc.
- Dynamique avancée des pneus : température, usure, expansion, variation de charge, etc.
- Aérodynamique : appui, traînée, aileron à réglage automatique
- Transmission/différentiel, ABS, ESP, limitation de braquage, etc.
- Si besoin, on peut consulter plusieurs ouvrages : Race Car Vehicle Dynamics (Milliken), Mechanics of Pneumatic Tires (S.K. Clark)
Conclusion
Avec ces modèles seulement, il est déjà possible d’implémenter la base d’un véhicule de jeu qui se comporte de manière proche d’un vrai véhicule.
Des détails supplémentaires peuvent être ajoutés selon les objectifs du développement et les besoins.
L’essentiel réside dans la simplification/abstraction des principes fondamentaux issus du réel, et dans une philosophie de conception centrée sur l’expérience de jeu.
Pour toute question, avis ou proposition de correction, n’hésitez pas à prendre contact.
2 commentaires
J’ai d’abord mal lu « programmer des véhicules dans un jeu » comme « programmer des véhicules depuis un véhicule », et je me suis dit que ce n’était pas un peu dangereux ?
Commentaires sur Hacker News
Ce qui est intéressant, c’est que même si le moteur est en réalité la partie avec le plus de composants mobiles, dans le code c’est au contraire la partie la plus simple de toute la simulation automobile. En effet, le rôle essentiel du moteur est d’être un calculateur de couple. Il reçoit plusieurs entrées et ne produit qu’une seule sortie, le couple de rotation, un peu comme une boîte noire. Je recommande vraiment la série de vidéos sur le simulateur de moteur d’AngeTheGreat. C’est impressionnant de voir à quel point c’est optimisé pour fonctionner en temps réel, tout en produisant un son de moteur réaliste. Voir la vidéo du simulateur de moteur d’AngeTheGreat
Le jeu Automation propose un moteur de création/simulation de moteurs extrêmement poussé. Faire toutes sortes d’expériences de moteur y est vraiment amusant, et la partie simulation sonore reprend aussi en partie certains concepts abordés dans les vidéos d’AngeTheGreat
Ça me rappelle l’exemple classique d’animation d’un cube dans Houdini. Il y a quelque chose de fascinant dans les comportements inattendus d’une simulation de moteur à combustion interne en temps réel. Exemple d’animation de cube dans Houdini
J’ai commencé à programmer parce que mon père écrivait un simulateur de moteur en BASIC. Ingénieur en mécanique, il voulait comparer les courbes de couple de plusieurs architectures moteur. Quand je l’ai vu dessiner en fil de fer des pistons, l’ensemble vilebrequin-manivelle et le vilebrequin lui-même, animés à une cadence de moins d’une seconde par image avec les commandes CIRCLE et LINE, ça m’a bouleversé de comprendre qu’un ordinateur pouvait dessiner quelque chose et le faire bouger. Le fait que cette personne ait fait la même chose pour produire de meilleurs sons de voiture de course est vraiment impressionnant
Les moteurs de VE ne sont-ils pas en réalité très simples ? Un moteur thermique est coûteux et complexe parce qu’il exploite de petites explosions pour produire du couple. Je me demande donc si la plupart des voitures dans les jeux ne se comportent pas en fait comme des VE, à moins de simuler plus fidèlement un ICE (moteur à combustion interne)
J’étais responsable de toute la simulation véhicule sur Army of Two. Cet article est une bonne introduction. Le modèle de pneus de Pacejka et les différentiels de transmission m’ont beaucoup aidé. Ce qui surprend aussi, c’est à quel point la simulation physique des barres antiroulis et de la suspension est cruciale pour obtenir une conduite « amusante ». Sans ça, la conduite devient glissante et peu immersive. On retrouve un peu cette sensation dans la vidéo de démo. Si on n’implémente pas les barres antiroulis et la suspension, la voiture se renverse trop facilement, ce qui pousse à tripoter sans cesse le glissement des pneus ou les paramètres de friction du sol, alors qu’en réalité l’expérience de conduite en souffre
Merci beaucoup pour cette info ! Je ne savais pas que les barres antiroulis étaient aussi importantes dans un modèle de base. Je vais creuser le sujet et, si j’arrive à bien l’implémenter, je prévois de mettre l’article à jour
J’ai eu récemment un problème avec la suspension de ma voiture, et j’ai donc vécu moi-même une « conduite non amusante ». Je compatis encore plus avec ce point de vue
Cela ressemble beaucoup à ce que j’ai découvert par moi-même en créant le jeu Flightle. Je faisais un simulateur de vol mobile à défilement horizontal, et comme le mouvement de l’avion était trop bizarre, je me suis lancé moi-même en me disant avec agacement : « qu’est-ce qu’il y a de si difficile ? ». En étudiant les principes du vol, j’ai compris que le bon niveau d’abstraction était crucial. Trop irréaliste, ce n’est pas amusant ; trop réaliste, l’équilibrage du gameplay devient difficile. Lien vers Flightle
Il est trop tard pour modifier mon commentaire, mais j’ai rassemblé mon retour d’expérience détaillé dans un article séparé. Voir création d’un simulateur de vol à défilement latéral. Au passage, j’ai ensuite essayé de remplacer l’avion réduit à un point par une structure composée de deux ailes reliées par une barre, et j’ai énormément galéré à le régler de manière amusante. Quelqu’un de plus compétent y serait sans doute mieux arrivé
J’ai bien aimé le jeu. Pour les utilisateurs desktop, je proposerais de permettre l’ajustement des curseurs avec la molette de la souris
J’ai déjà créé un jeu iOS qui simule les voitures et le drift. C’était basé sur SpriteKit, mais c’est facile à implémenter dans n’importe quel moteur de jeu 2D. L’idée de base est de relier les deux roues avant à une carrosserie rectangulaire via des pin joints, puis d’appliquer une force aux roues. L’angle de la force se calcule ainsi : x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) J’y ai aussi ajouté des particules de dérapage. Le drift a été obtenu en ajustant les valeurs d’amortissement des roues et de la carrosserie. App Drift Mania Infinite Car Racer
Le jeu a vraiment du style ! J’ai aimé le fait qu’on puisse commencer immédiatement. Les particules de dérapage sont efficaces. Le visuel est réussi aussi. En revanche, c’était trop difficile pour moi. Un « mode zen » où l’on ne réinitialise pas après avoir touché un mur me donnerait envie d’y jouer davantage
Le jeu est vraiment superbe. Le marché des apps étant tellement concurrentiel, obtenir 22 évaluations est impressionnant. Je serais curieux de savoir comment il a été promu
« Ce jeu offre des graphismes incroyables... » L’autodérision est vraiment adorable. Je le télécharge tout de suite
Cet article m’a sincèrement intéressé. Rien que la partie sur le modèle de pneus mérite plusieurs relectures. Si on cherche seulement le fun sans se soucier de simulation ou de réalisme, rien ne bat Super Sprint, l’arcade des années 1980. Infos sur le jeu Super Sprint
Je colle ici une partie des conférences liées au sujet que j’ai gardées dans mes notes : Hamish Young, dynamique des véhicules et des pneus dans ‘Just Cause 4’ Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, physique des véhicules suralimentés dans ‘Skylanders’ Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, conférence sur la science du tout-terrain The Science of Off-Roading Jared Cone, la physique de ‘Rocket League’ It IS Rocket Science! The Physics of 'Rocket League' Detailed
L’article lui-même est excellent, mais l’introduction m’a semblé un peu confuse. On y dit que les voitures offrent dans les jeux toute une variété d’expériences irréalistes, alors que les armes à feu ne le feraient pas, ce qui m’interroge. En réalité, les jeux regorgent d’armes irréalistes. Et puis l’idée selon laquelle nos attentes sur la conduite viennent non pas d’une expérience directe mais d’une expérience indirecte via les médias ou la culture ne s’applique-t-elle pas encore davantage aux armes ? Même le saut est traité de façons très variées dans les jeux, alors que mes attentes sur le saut viennent bien davantage de ma propre expérience réelle du saut
On dirait que tu n’as pas beaucoup d’expérience dans le développement de FPS. Les armes réelles sont différentes de l’expérience qu’on en a dans les jeux. Si les jeux reproduisaient exactement les armes réelles, ce serait bien moins amusant et plus frustrant. C’est pareil pour les jeux de course : il faut tordre un peu la réalité pour servir le fun
Je pense que le sujet ici n’est pas le « réalisme », mais la « vraisemblance ». L’important est de créer une expérience que le joueur peut juger crédible. Les armes dans les jeux diffèrent du réel, mais elles privilégient le fantasme de puissance et de menace. Le saut aussi n’a souvent aucun vrai fondement réaliste, mais il est conçu dans la forme qui sert le mieux les objectifs du jeu. À l’inverse, dans un domaine comme l’automobile, où les faits physiques peuvent être modélisés de manière systémique, on vise davantage une représentation réaliste, au point de pouvoir comparer cela à des simulations industrielles. En revanche, les mouvements humains, les systèmes économiques ou le déroulement des combats sont bien plus difficiles à traiter avec ce degré de réalisme, d’où des représentations beaucoup plus caricaturales. Le game designer doit trouver le bon compromis en fonction des attentes des joueurs et des objectifs globaux du jeu. Chercher un réalisme trop détaillé au détriment de la structure d’ensemble est un piège très courant
L’exemple du FPS m’était venu à l’esprit à la hâte pendant la présentation, mais en y repensant, j’ai réalisé que ce n’était pas un bon exemple. Merci d’avoir relevé le point
J’ai l’impression qu’il manque des éléments comme les collines, les rampes et la suspension. Unreal Engine propose une démo de véhicule très simple, ainsi qu’une autre avec un vrai modèle de suspension
Comme mentionné à la fin de la présentation et de l’article, il y a une courte vidéo montrant l’état réel du moteur, et on y voit divers terrains avec des collines, des rampes, etc. La présentation utilise une simple grille plane. La suspension est elle aussi implémentée, mais comme il ne s’agit pas d’un problème spécifique aux voitures, plutôt d’une fonctionnalité générale pour supporter le poids, elle n’a pas été traitée en détail pour des raisons de temps et de fluidité de la présentation
Comme Wassim l’a mentionné dans la session de questions-réponses, la suspension est gérée par le moteur physique, et ses effets se répercutent sur la charge des pneus, influençant ainsi naturellement les forces exercées par les pneus
Il existe une excellente conférence GDC sur la physique des véhicules dans Rocket League. Voir conférence sur la physique de Rocket League. Pour précision, j’étais dans l’équipe, mais je ne travaillais pas sur le client du jeu, plutôt sur d’autres parties
En lisant cet article, j’ai repensé à une excellente conférence sur la physique des jeux de course. Voir Andre Marziali - Physics of Racing