Corriger les erreurs

Corriger l’erreur de leak : « leaked » à la compilation dans Hammer

Corriger un leak de map : ce que signifie le message VBSP « leaked », comment trouver le trou avec le pointfile et pourquoi une skybox géante ne règle rien.

Le message **** leaked **** signifie que l’intérieur de ta map n’est pas étanche par rapport au vide : il existe un chemin entre une entité et l’extérieur. Dans Hammer, charge le pointfile via Map → Load Pointfile, suis la ligne rouge jusqu’au trou et bouche-le avec un world brush solide.

Ce qu’est un leak dans la géométrie de la map

VBSP doit savoir ce qui est dedans et ce qui est dehors. Pour le déterminer, l’outil remplit en quelque sorte la map d’air en partant des entités. Tout ce que ce remplissage atteint compte comme intérieur. Le reste, c’est le vide, et il est supprimé. Si le remplissage atteint le vide, il n’y a plus d’intérieur clairement délimité, et le log affiche quelque chose comme ceci :

**** leaked ****
Entity info_player_start (128.00 -64.00 32.00) leaked!

L’entité citée n’est en général pas la cause, sauf si elle se trouve elle-même hors de la map. C’est simplement le point de départ à partir duquel VBSP a trouvé la sortie.

Les conséquences vont bien au-delà de cette seule ligne. VBSP n’écrit pas de fichier de portals, donc VVIS ne peut pas calculer la visibilité. Sans données de visibilité, VRAD ne travaille qu’avec la lumière directe. Souvent, la map se charge quand même, mais elle tourne mal et son éclairage est faux. L’article sur VBSP, VVIS et VRAD explique comment les trois outils dépendent les uns des autres.

Trouver le leak : charger le pointfile et suivre la ligne rouge

  1. Compile la map. En cas de leak, VBSP crée à côté de la VMF un fichier portant l’extension .lin. C’est le pointfile.
  2. Dans Hammer, choisis Map → Load Pointfile et confirme le fichier proposé.
  3. Une ligne rouge apparaît dans les vues 2D et dans la vue 3D. Elle part de l’entité indiquée dans le log et se termine dans le vide.
  4. Suis la ligne dans la vue 3D jusqu’à l’endroit où elle traverse l’enveloppe extérieure. C’est là que se trouve le trou.
  5. Bouche le trou, retire la ligne via Map → Unload Pointfile et recompile.

VBSP ne signale jamais qu’un seul chemin. Si la map a plusieurs endroits non étanches, répète l’opération jusqu’à ce que le message disparaisse. Avec View → Go to Coordinates, tu peux sauter directement aux coordonnées indiquées dans le log.

Causes typiques

CauseComment la reconnaîtreSolution
Espace entre deux brushesLa ligne passe par une fente étroite, souvent dans les angles ou le long de murs inclinésAligne les brushes sur la grille jusqu’à ce qu’ils se rejoignent parfaitement
Le mur extérieur est un func_detail ou une autre entité brushLa ligne traverse un mur qui a l’air ferméSélectionne le brush et renvoie-le dans le world avec Ctrl+Shift+W
Displacement comme limite extérieureLa ligne sort par le terrain, vers le bas ou sur le côtéPlace un world brush solide en tools/toolsnodraw derrière
Entité hors de la mapLe log cite une entité dont les coordonnées sont dans le videSupprime l’entité ou déplace-la dans la map
Brush défectueuxMap → Check for Problems (Alt+P) signale un solid invalideRépare le brush ou reconstruis-le

Deux points passent facilement inaperçus. D’abord, seuls les world brushes rendent une map étanche. Tout ce qui est lié à une entité, comme un func_detail, un func_brush ou une porte, laisse passer VBSP à cet endroit. Il en va de même pour les displacements et les modèles. Ensuite, pour une entité, c’est son origine qui compte. Un prop peut être entièrement visible dans la map alors que son origine se trouve derrière le mur, dans le vide.

Pourquoi une skybox géante autour de la map n’est pas une solution

Une grande boîte creuse autour de toute la map fait disparaître le message, puisque le chemin vers l’extérieur s’arrête désormais à la paroi de la boîte. Le vrai problème reste entier et revient sous une autre forme :

  • Tout l’espace entre la map et la boîte compte comme intérieur. VBSP le découpe en visleafs, et VVIS doit traiter chacun d’eux. Le temps de compilation grimpe fortement.
  • Normalement, VBSP supprime toutes les faces tournées vers le vide. Avec la boîte, les côtés extérieurs et les faces arrière de ta géométrie sont conservés, éclairés et affichés en jeu.
  • Le calcul de visibilité est bien moins efficace, car des zones qui seraient autrement séparées se voient à travers l’espace extérieur. Le framerate chute.

Ne place donc des brushes de skybox que là où le ciel est réellement visible, et garde-les au plus près de la map.

Éviter les leaks dès le départ

  • Construis l’enveloppe extérieure avec de grands world brushes simples, alignés sur la grille. Les détails viennent se placer devant, en func_detail.
  • Place un brush solide en tools/toolsnodraw sous chaque displacement et derrière.
  • Compile souvent. Un leak qui apparaît juste après une modification se localise vite.
  • Sur les grandes maps, utilise le cordon tool pour ne compiler qu’une partie et cerner la zone.

Si le log contient d’autres messages en plus du leak, ce sont souvent des erreurs en cascade. Tu peux coller un compile log dans le Map Scanner. Il détecte les causes, les erreurs en cascade et les solutions adaptées dans les logs VBSP, VVIS et VRAD. Tu peux aussi rechercher un message précis dans la base d’erreurs. L’article lire un compile log montre comment lire un log toi-même.

Questions fréquentes

Que signifie « leaked » à la compilation ?

L’intérieur de la map n’est pas entièrement fermé par des world brushes solides. VBSP a trouvé un chemin entre une entité et le vide. Tant que c’est le cas, il manque les données de visibilité et un éclairage complet.

Où trouver le pointfile dans Hammer ?

Dans le menu Map, sous Load Pointfile. Le fichier portant l’extension .lin se trouve dans le même dossier que ta VMF et porte le même nom. Il n’est créé que si VBSP a réellement trouvé un leak.

Puis-je quand même jouer sur une map qui a un leak ?

Souvent oui, mais ça n’a guère d’intérêt. Sans données de visibilité, le moteur affiche bien plus que nécessaire, et l’éclairage se limite à la lumière directe. Une map avec un leak n’est pas prête à être publiée.

Est-ce que func_detail rend une map étanche ?

Non. func_detail est une entité brush et n’est pas pris en compte pour l’étanchéité. Les murs, sols et plafonds qui ferment la map vers l’extérieur doivent être des world brushes classiques.