En mission, la circulation est un film
Pendant une mission de GTA V, les voitures autour de vous ne sont pas toutes conduites par l'IA. Beaucoup rejouent un trajet enregistré à l'avance, image par image, comme une vidéo. Ces enregistrements portent un nom : les YVR. Cinq preuves, de la rue en 3D jusqu'au tournage des bandes-annonces.
En mission, toute la rue est un enregistrement
Quand une course-poursuite démarre, Rockstar ne laisse pas la circulation au hasard. Un développeur a déjà joué la scène. Pendant qu'il roulait, le jeu a enregistré chaque voiture autour de lui : sa position, sa vitesse, son volant. En mission, le jeu rejoue tout ça.
La vue debug de Rockstar trie ces voitures par couleur. En vert, la circulation enregistrée. En rouge, les séquences spectaculaires : un développeur a refait le trajet en conduisant exprès de façon plus folle, pour que la scène soit plus excitante. En bleu, les voitures garées, elles aussi placées par l'enregistrement.
Il reste une couleur : le magenta. C'est une voiture que vous avez percutée. Elle sort de son rail, et l'IA reprend le volant. Dans la démo, touchez une voiture pour voir ce moment.
Le mot « UBER » de la vue debug se retrouve jusque dans les noms de fichiers : l'exemple de la documentation est fbis1uber001.yvr, l'enregistrement n° 1 de la série « FBIs1UBER ».
(UBER) TR 90 // circulation enregistrée, n° 90 (UBER) SP 503 // séquence d'un développeur, n° 503 voitures garées // positions enregistrées aussi hors rails // l'IA a repris le volant // fichier : fbis1uber001.yvr (exemple de la doc)
Ce qu'il y a dans un fichier YVR
Un YVR est une longue liste de lignes. Plusieurs fois par seconde, le jeu a noté l'état de la voiture : l'heure de la ligne, sa position, sa vitesse, son orientation, l'angle du volant, l'accélérateur, le frein et le frein à main. Chaque ligne tient en 32 octets.
Pour rejouer, le jeu lit la liste et place la voiture entre deux lignes. Le fichier ne dit pas quelle voiture conduisait : n'importe quel véhicule peut le rejouer, même un bus.
Le format a ses petites économies. L'accélérateur va de -100 à +100 : en dessous de zéro, c'est la marche arrière. Et la vitesse est stockée sur si peu de place qu'elle plafonne vers 120 mètres par seconde, environ 430 km/h. Le jeu ne charge pas plus de 24 enregistrements à la fois. Et d'après le code de CodeWalker, chaque ligne a la même forme que dans les enregistrements de GTA IV, les fichiers .rrr.
- Timele moment de la ligne, en millisecondes
- Position · Velocityoù est la voiture, et à quelle vitesse elle va
- Right · Forwarddeux flèches qui donnent son orientation : la droite et l'avant de la voiture
- Steering · Gas · Brakele volant et les pédales, comme le développeur les tenait ; l'accélérateur négatif, c'est la marche arrière
- Handbrakele frein à main, tiré ou non
REQUEST_VEHICLE_RECORDING(numéro, "nom") // charge "nom" + numéro sur 3 chiffres + ".yvr" // (1, "FBIs1UBER") → fbis1uber001.yvr · 24 au maximum HAS_VEHICLE_RECORDING_BEEN_LOADED(numéro, "nom") START_PLAYBACK_RECORDED_VEHICLE(véhicule, numéro, "nom", true) // 4e paramètre : lié aux remorques GET_TIME_POSITION_IN_RECORDING(véhicule) GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(numéro, "nom")
La première mission : Lamar ne conduit pas, il rejoue
Dans « Franklin et Lamar », vous faites la course jusqu'à la concession de Simeon. Lamar a l'air de piloter. En réalité, sa voiture rejoue un enregistrement.
Le script de la mission regarde l'écart entre vous et lui, et il règle la vitesse de lecture. Vous êtes loin derrière : Lamar ralentit et vous attend. Vous passez devant : il accélère pour revenir. La course reste serrée, quoi que vous fassiez.
Et la circulation suit la même horloge. Les voitures qui traversent la route sont elles aussi des enregistrements, calés sur l'avancée de Lamar. Quand il ralentit, toute la rue ralentit avec lui. C'est pour ça qu'une voiture vous coupe toujours la route au même moment.
START_PLAYBACK_RECORDED_VEHICLE(lamar, numéro, "nom", true) SET_PLAYBACK_SPEED(lamar, vitesse) // à chaque image // vous êtes devant : vitesse > 1 // vous êtes derrière : vitesse < 1
Pourquoi des rails plutôt que l'IA
Une voiture conduite par l'IA décide de tout à chaque image : sa trajectoire, son freinage, sa réaction aux autres. Elle ne refait jamais deux fois la même chose. Pour une mission, c'est un problème.
Un enregistrement, lui, rejoue la scène au millimètre à chaque essai. Il permet un spectacle qu'aucune IA ne fait seule, comme une glissade parfaite devant votre capot. Il coûte moins de calcul, puisque la voiture n'a rien à décider. Et tout arrive au bon moment.
Le prix à payer : un enregistrement ne sait pas réagir. Si vous percutez la voiture, le jeu la sort du rail et donne le volant à l'IA. Il peut même lui demander de revenir sur son trajet un peu plus tard, au bout d'un délai réglé à la milliseconde.
Le passage inverse, de l'IA vers le rail en douceur, existe aussi. D'après la documentation, une seule mission s'en sert : le braquage de la bijouterie.
Et ce n'est pas le seul système de rails. Les « waypoint recordings » guident des piétons et des véhicules le long de chemins enregistrés, 32 au maximum en mémoire.
SET_PLAYBACK_TO_USE_AI(véhicule, styleDeConduite) SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER( véhicule, durée, styleDeConduite, false) IS_PLAYBACK_GOING_ON_FOR_VEHICLE(véhicule) // durée en ms avant le retour sur le rail, 0 = jamais SET_SHOULD_LERP_FROM_AI_TO_FULL_RECORDING(véhicule, p1) // utilisée seulement dans jewelry_heist // (nom de NativeDB, sans nom sur docs.fivem.net)
Les bandes-annonces sont tournées sur des rails aussi
Pour filmer une course-poursuite de bande-annonce, il faut plusieurs prises. Avec des voitures conduites à la main, aucune prise ne ressemble à la précédente. Avec des enregistrements, la scène se rejoue à l'identique, encore et encore.
Seule la caméra bouge d'une prise à l'autre. L'équipe peut chercher le meilleur angle, ralentir le moment d'une glissade, revenir trois secondes en arrière. Les voitures, elles, repassent toujours au même endroit.
Sur FiveM, les mêmes natives existent. Elles rejouent les enregistrements du jeu sur n'importe quelle voiture : c'est comme ça que nous tournons ces plans.
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(véhicule, ms) SET_PLAYBACK_SPEED(véhicule, 0.25) // ralenti PAUSE_PLAYBACK_RECORDED_VEHICLE(véhicule) UNPAUSE_PLAYBACK_RECORDED_VEHICLE(véhicule)
Le prochain dossier est déjà sur le Discord
Les membres lisent chaque dossier avant sa publication, avec les fichiers de tournage complets.
Rejoindre le DiscordL'eau de GTA est une illusion
La mer, les lacs et les rivières de Los Santos ne sont pas ce qu'ils ont l'air d'être.