Derrière ce mur, la ville n'existe pas
À chaque image, des milliers d'objets vous entourent dans Los Santos. Le jeu n'en dessine qu'une petite partie : ceux qui sont devant la caméra et que rien ne cache. Tout le reste est rayé de la liste avant même d'être dessiné. Cinq preuves, et une ville en 3D où vous voyez enfin ce que le moteur a rayé.
Ce que la caméra ne regarde pas n'est pas dessiné
Le moteur commence par un tri simple. Tout ce qui sort du champ de la caméra est rayé de la liste : les immeubles derrière vous, ceux sur les côtés, ceux trop loin. Rien de tout ça n'est envoyé à la carte graphique. On appelle ce tri le « frustum culling », du nom de la pyramide de vision qui part de la caméra.
Puis il fait un deuxième tri, plus malin. Parmi ce qui reste, il raye ce qui est caché derrière autre chose. C'est l'« occlusion culling ».
En haut de la démo, la vue du joueur. En bas, la vue du moteur : en rouge ce qui est hors du champ, en violet ce qui est caché. Dans la vue du joueur, vous ne voyez aucune différence. C'est tout le principe.
1. dans le champ de la caméra ? non → rayé 2. caché derrière un occluder ? oui → rayé 3. sinon → dessiné // un objet rayé ne coûte presque rien
Derrière un immeuble, le quartier disparaît
Un gratte-ciel devant vous cache tout un pâté de maisons. Le moteur le sait, et il ne dessine rien de ce qu'il y a derrière : ni les voitures, ni les arbres, ni les petites maisons.
Une fonction coupe ce tri pour l'image en cours. Activez-la dans la démo : le compteur d'objets dessinés grimpe d'un coup, alors que vous ne voyez rien de plus à l'écran. Le jeu travaille pour rien.
Les scripts peuvent aussi poser la question au moteur : cet objet est-il caché en ce moment ? Et même : un objet posé à tel endroit le serait-il ?
DISABLE_OCCLUSION_THIS_FRAME() // à rappeler à chaque image // le jeu dessine aussi ce qui est caché IS_ENTITY_OCCLUDED(entité) WOULD_ENTITY_BE_OCCLUDED(modèle, x, y, z, p4)
Des murs invisibles cachés dans les immeubles
Pour savoir ce qui est caché, le moteur ne se sert pas des vrais immeubles : ils sont bien trop détaillés. Dans les fichiers de la carte, chaque bâtiment est doublé d'une forme invisible et toute simple, un « occluder ». C'est une boîte, ou un petit modèle grossier fait de quelques triangles.
Cette forme est un peu plus petite que le vrai bâtiment. Comme ça, elle ne cache jamais quelque chose que vous devriez voir. Les arbres, les grillages et les vitrines n'en ont pas, parce qu'on voit à travers.
boxOccluders // des boîtes iCenterX/Y/Z · iLength · iWidth · iHeight · iCosZ/iSinZ occludeModels // des formes simplifiées bmin · bmax · verts · numTris · flags // aucune n'est jamais affichée à l'écran
Le moteur vérifie sur une image minuscule
Tester chaque objet contre chaque occluder prendrait trop de temps. Alors le moteur dessine d'abord tous les occluders dans une image toute petite, que vous ne voyez jamais. Chaque case de cette image ne garde qu'une chose : la distance du mur le plus proche.
Ensuite, chaque objet est réduit à un rectangle. Si toutes les cases sous ce rectangle contiennent un mur plus proche que l'objet, il est caché. Plus l'image est petite, plus le test est rapide, mais plus le jeu dessine d'objets pour rien.
rectangle de l'objet → cases de l'image toutes les cases ont un mur plus proche ? oui → rayé · non → dessiné // une case à moitié couverte compte comme vide : // dans le doute, le moteur dessine
Pourquoi la map disparaît sur certains serveurs FiveM
Sur FiveM, les créateurs de cartes suppriment souvent un bâtiment d'origine pour construire le leur à sa place. Mais l'occluder n'est pas attaché au bâtiment : c'est une donnée à part dans la carte. S'il n'est pas supprimé lui aussi, il reste là, comme un mur invisible qui cache tout ce qu'il y a derrière.
Résultat : des morceaux de la nouvelle carte disparaissent sous certains angles, puis réapparaissent dès qu'on se décale. La réparation se fait dans CodeWalker : on supprime les occluders de l'ancien bâtiment.
1. ouvrir le .ymap de la zone 2. afficher les Box Occluders et Occlude Models 3. supprimer ceux de l'ancien bâtiment 4. sauvegarder, puis streamer le .ymap modifié
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 DiscordVous n'êtes jamais seul dans votre bunker
D'autres joueurs sont peut-être dans la même pièce que vous. Le jeu les cache.