Inside·Rockstar Preuve 0
Dossier complet · série « Le moteur vous ment »

Sous la carte, il y a une autre ville

Quand vous entrez dans votre bunker ou votre labo de motard, vous croyez descendre sous le bâtiment. En réalité, le jeu vous téléporte dans une boîte rangée ailleurs, parfois des dizaines de mètres sous le port. Cinq preuves, et une coupe 3D de ce qu'il y a sous Los Santos.

Lecture : 8 min Sources : doc des natives FiveM + NativeDB + wiki RAGE MP
Preuve 1 / 5

Les intérieurs flottent sous le port

Les entreprises de motards, l'entrepôt et le bunker de GTA Online n'existent pas derrière leur porte d'entrée. Leurs intérieurs sont regroupés au même endroit, sous les docks du port de Los Santos, entre 37 et 98 mètres sous le niveau de la mer.

La porte que vous ouvrez en ville n'est qu'un déclencheur : écran noir, téléportation, et vous voilà sous la mer. Le jeu ne charge la boîte qu'au moment où vous en avez besoin.

Le port n'est pas le seul sous-sol. La boîte de nuit, le hangar et le Terrorbyte sont rangés sous l'aéroport, entre 49 et 80 mètres de profondeur. Les petits garages, l'appartement bas de gamme et le motel sont à 99 mètres sous le centre-ville. Et même l'intérieur du casino est rangé 50 mètres sous terre.

La preuvenatives GTA V
GET_INTERIOR_AT_COORDS(x, y, z)   // 0 si dehors
PIN_INTERIOR_IN_MEMORY(intérieur)  // chargement
IS_INTERIOR_READY(intérieur)
// bunker      899.6, -3246.0, -98.0
// labo de meth 1009.5, -3196.6, -39.0
// boîte de nuit -1604.7, -3012.6, -78.0
// casino       1100.0,   220.0, -50.0
Coordonnées de la communauté (wiki RAGE MP)
11 intérieurs
Intérieurxyz
Glissez pour tourner autour du port. Positions relevées par la communauté, tailles des boîtes illustratives.
Preuve 2 / 5

Les tunnels sont des intérieurs

Pour le moteur, le métro, les égouts, les tunnels ferroviaires et les parkings souterrains ne font pas partie de la ville. Ce sont des « intérieurs », exactement comme une maison ou un magasin.

C'est pour ça que la lumière, le son et la météo changent d'un coup quand vous entrez dans un tunnel : vous venez de changer de monde.

Le moteur les range même par familles. Une maison est dans le groupe 0. Le métro et les égouts partagent le groupe 1. Chaque grand tunnel a son numéro, de celui sous Mirror Park à celui sous Fort Zancudo, et les parkings de Rockford Plaza, de l'Arcadius, de l'Union Depository et du FIB ont aussi le leur.

La preuvenative GTA V
GET_INTERIOR_GROUP_ID(intérieur)
// 0  intérieur ordinaire
// 1  métro, voies du métro, égouts
// 3  tunnel ferroviaire sous Mirror Park
// 5  tunnel près de Del Perro
// 12 tunnel sous Fort Zancudo
// 18 à 21  parkings : Rockford Plaza, Arcadius,
//          Union Depository, FIB
Survolez un souterrain
Preuve 3 / 5

Des boîtes reliées par des portails

Pour le moteur, un intérieur n'a pas de murs au sens où vous l'entendez. C'est une liste de pièces, chacune une boîte fermée, et une liste de « portails » : de simples rectangles invisibles posés dans chaque porte, chaque arche et chaque fenêtre.

Chaque portail relie deux pièces. La pièce numéro 0 a un nom à part, « limbo » : c'est tout ce qui n'est pas l'intérieur, donc la ville dehors. Une porte d'entrée ou une fenêtre est un portail vers limbo.

Ce découpage sert à une seule chose : ne dessiner que ce que vous pouvez voir. Dans la démo, déplacez le personnage, tournez son regard et regardez le champ de vision se rétrécir à chaque porte.

—
Glissez la caméra dans la maison ou dehors. Baissez « Portails traversés » pour voir le calcul étape par étape : en orange, les portails que le moteur n'a pas encore franchis.

Comment le moteur choisit ce qu'il dessine

  1. Il cherche la pièce de la caméra. Pas celle du personnage : celle de la caméra. Toute la suite part de là.
  2. Il dessine cette pièce, mais seulement ce qui tombe dans le champ de vision.
  3. Il regarde les portails de la pièce. Pour chaque portail visible, il rétrécit le champ de vision à la taille exacte de ce rectangle.
  4. Il recommence dans la pièce suivante avec ce champ rétréci. À chaque porte, le cône devient plus étroit, et il finit par ne plus rien laisser passer.
  5. S'il tombe sur un portail vers limbo, il dessine la ville, mais uniquement dans la petite part de champ qui passe par la fenêtre ou la porte.

Tout ce qui n'a jamais été atteint par ce cône n'est pas dessiné du tout. Une maison de six pièces peut n'en afficher que deux.

Ce qui passe par les portails

La lumière

Chaque pièce a son propre réglage d'ambiance (le « timecycle »). Passez une porte, et l'éclairage change d'un coup : vous venez de changer de pièce pour le moteur.

Ce qui passe par les portails

Le son

Le jeu se sert aussi des portails pour savoir comment le son voyage d'une pièce à l'autre. Une porte ouverte laisse passer le bruit, un mur plein l'étouffe.

Ce qui passe par les portails

La ville

Depuis l'intérieur, la ville n'existe qu'à travers les portails vers limbo. Pas de fenêtre dans le champ de vision, pas de ville dessinée.

Ce que ça explique en jeu

  • La caméra qui traverse un mur. Elle n'est plus dans la bonne pièce, alors le calcul repart de travers : des pièces entières disparaissent d'un coup, ou l'extérieur s'efface.
  • Les intérieurs vus de dehors. En regardant par une fenêtre, vous ne voyez que la part de la pièce qui passe par ce portail. Le reste de la maison n'est même pas chargé à l'écran.
  • Les grands intérieurs fluides. Un centre commercial ou un bunker reste rapide, parce que chaque mur coupe le travail du moteur.
  • Les téléportations. Arriver dans une pièce sans avoir franchi de portail, c'est arriver nulle part pour le moteur. Les scripts doivent lui dire de force dans quelle pièce vous êtes.
La preuvefichier d'intérieur (.ytyp) + natives FiveM
// archétype d'intérieur, tel que l'affichent les outils de la communauté
rooms    0 limbo · 1 entrée · 2 salon · …   // chaque pièce : son timecycle
portals  roomFrom → roomTo · 4 coins · flags

GetInteriorRoomName(intérieur, 0)          // "limbo"
GetInteriorPortalCount(intérieur)
GetInteriorPortalRoomFrom(intérieur, portail)
GetInteriorPortalRoomTo(intérieur, portail)
GetInteriorPortalCornerPosition(intérieur, portail, coin)
FORCE_ROOM_FOR_ENTITY(entité, intérieur, pièce)
// charge la pièce quand on y arrive sans passer de portail
Structure documentée par la communauté (CodeWalker)
Preuve 4 / 5

Les murs peuvent disparaître

On peut décrocher un intérieur du moteur. Les murs, le sol et les meubles disparaissent, mais les gens qui vivent dedans continuent leur journée, comme suspendus dans le vide. Le sol, lui, est seulement invisible : il reste solide, et personne ne tombe.

La preuve que les personnages et le décor sont deux choses séparées : l'un peut exister sans l'autre.

Il existe une version plus brutale. Désactivez carrément l'intérieur, et le sol disparaît pour de bon : la documentation prend l'exemple du strip-club, où le joueur traverse le plancher et tombe.

La preuvenative GTA V
UNPIN_INTERIOR(intérieur)
// tout devient invisible, le sol tient,
// les passants se comportent normalement
DISABLE_INTERIOR(intérieur, true)
// l'intérieur disparaît, le joueur tombe
Preuve 5 / 5

Un même lieu en deux versions

La caravane de Trevor existe en version « sale » et en version « rangée ». Ce ne sont pas des objets déplacés : ce sont deux calques de carte complets, qu'on charge et décharge comme on change de diapositive.

D'autres lieux de l'histoire fonctionnent pareil. La ferme O'Neil existe intacte et brûlée, le pont ferroviaire avec et sans le train déraillé, le cargo du port à flot, coulé ou en flammes. Le jeu échange ces morceaux de carte entiers selon votre avancée.

Le plus gros calque, c'est North Yankton, la ville enneigée du prologue. Elle est rangée dans le même jeu, en pleine mer au sud-est de la carte, et ne s'affiche que quand le jeu la charge.

À l'intérieur des bâtiments, le même principe existe en plus petit : les « entity sets », des morceaux de décor qu'on allume dans une pièce. Le butin du coffre de Cayo Perico en est un : tequila, collier de perles, obligations, diamant rose ou panthère, selon le braquage.

La preuvenatives GTA V
REQUEST_IPL("TrevorsTrailerTrash")
REMOVE_IPL("TrevorsTrailerTrash")
REQUEST_IPL("trevorstrailertidy")
REQUEST_IPL("farm_burnt")       // la ferme O'Neil brûlée
REQUEST_IPL("prologue01")       // North Yankton, morceau 1
ACTIVATE_INTERIOR_ENTITY_SET(coffre, "pink_diamond_set")
Avant-première

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 Discord
Dossier suivant

Derrière ce mur, la ville n'existe pas

Le jeu ne dessine que ce que vous pouvez voir, et il triche pour le savoir.