This article's documentation is for the "GoldSrc" engine. Click here for more information.
This article's documentation is for anything that uses the Source engine. Click here for more information.

Fr/Leak: Difference between revisions

From Valve Developer Community
< Fr
Jump to navigation Jump to search
 
(9 intermediate revisions by the same user not shown)
Line 2: Line 2:
{{subpage|{{L|Optimization/Level_Design|Optimization (level design)}}}}
{{subpage|{{L|Optimization/Level_Design|Optimization (level design)}}}}


{{Translate|type=inprogress}}
Les cartes {{code|{{L|.bsp}}}} {{in|{{gldsrc|4}} et {{source|4}}}} doivent être complètement fermées. Aucun élément intérieur du niveau, du monde, ne doit donner sur l'extérieur, le {{L|void|vide}}. Le ciel doit également être contenu dans un bloc utilisant la texture <code>tools/toolsskybox</code> (cf. {{L|skybox}}). Dès qu'il existe une légère ouverture sur le vide, une {{L|leak|fuite}} (leak en anglais) est générée lorsque la carte est compilée via {{L|QBSP2}}/{{L|HLBSP}} ou {{L|VBSP}}. Lorsqu'une fuite apparaît, le compilateur BSP ne peut pas savoir quel élément est à l'intérieur ou à l'extérieur, ce qui fait que cela ne fonctionnera pas correctement.
Les cartes {{code|{{L|.bsp}}}} {{in|{{gldsrc|4}} et {{source|4}}}} doivent être complètement fermées. Aucun élément intérieur du niveau, du monde, ne doit donner sur l'extérieur, le {{L|void|vide}}. Le ciel doit également être contenu dans un bloc utilisant la texture <code>tools/toolsskybox</code> (cf. {{L|skybox}}). Dès qu'il existe une légère ouverture sur le vide, une {{L|leak|fuite}} (leak en anglais) est générée lorsque la carte est compilée via {{L|QBSP2}}/{{L|HLBSP}} ou {{L|VBSP}}. Lorsqu'une fuite apparaît, le compilateur BSP ne peut pas savoir quel élément est à l'intérieur ou à l'extérieur, ce qui fait que cela ne fonctionnera pas correctement.


Line 53: Line 52:
Les cartes ne sont pas du tout jouables. {{L|VVIS}} va demander au moteur de générer la carte en une seule fois, ce qui est trop mauvais pour la fréquence d'images, ou il y aura des zones complètement invisibles. Au pire des cas, une fuite peut faire que {{L|VRAD}} généra une carte entièrement noire.
Les cartes ne sont pas du tout jouables. {{L|VVIS}} va demander au moteur de générer la carte en une seule fois, ce qui est trop mauvais pour la fréquence d'images, ou il y aura des zones complètement invisibles. Au pire des cas, une fuite peut faire que {{L|VRAD}} généra une carte entièrement noire.


== Wasting time with leaks ==
== Perte de temps avec les fuites ==


{{L|VBSP}} will always report any leaks it finds, but spending hours of full compile time and game execution just to find out that your map is broken ''after'' compilation, simply isn't efficient. Make sure you've tested that your map doesn't have a leak ''before'' you even begin to worry about your map's visibility and lighting. If you notice that VBSP leaked while the compile is happening, press Ctrl+C to abort the compile.
{{L|VBSP}} remontera toutes les fuites qu'il constate, mais passer des heures à faire des compilations et d'exécution en jeu pour se rendre compte que la carte est corrompie ''après'' compilation, n'est tout simplement très efficient. Assurez vous que votre carte n'a pas de fuite ''avant'' que vous vous préoccupiez de la visibilité et de l'éclairage. Si vous remarquez que {{L|VBSP}} remonte une fuite pendant que la compilation s'exécute, appuyez sur Ctrl+C pour abandonner l'exécution.


== Finding leaks ==
== Trouver les fuites ==


Sometimes these gaps aren't quite as obvious as the above example. They can be a fraction of a unit wide and still cause a leak. {{L|VBSP}} provides you with a {{L|pointfile}} to help you locate the leak. It draws a line from the void of the map to the entity it found during the leak check. After receiving a leak error, a <code>mapname{{L|.lin}}</code> file will be created in the same directory as your {{L|.vmf}} map file.
Parfois les coquilles ne sont pas aussi évidentes que dans l'exemple précédent. Ils peuvent être une petite fraction d'une unité de largeur et provoquer une fuite. {{L|VBSP}} fournit un {{L|pointfile}} pour vous aider à localiser la fuite. Il dessine une ligne à partir du vide de la carte jusqu'à l'entité qu'il a trouvé lors du contrôle de fuites. Après avoir reçu une erreur de fuite, un fichier <code>mapname{{L|.lin}}</code> sera créé dans le même répertoire que votre fichier {{L|.vmf}}.


=== Loading a Pointfile ===
=== Charger un pointfile ===


The pointfile can be loaded into the Hammer Editor to show you precisely where the leak is inside the level. To load a pointfile for the level, use the {{L|Hammer_Map_Menu#Load Pointfile|Load Pointfile}} command in the '''Map''' menu.
Le {{L|pointfile}} peut être chargé dans l'éditeur Hammer pour montrer précisément où se trouve la fuite dans le niveau. Pour charger un {{L|pointfile}} du niveau, aller dans {{L|Hammer_Map_Menu#Load Pointfile|Load Pointfile}} du menu ''Map''.


[[File:hammer_leaks5.jpg||thumb|400px|right|The '''Load Pointfile''' command shows the path to the leak in the Hammer viewports.]]
[[File:hammer_leaks5.jpg||thumb|400px|right|La commande '''Load Pointfile''' affiche le chemin de la fuite dans les fenêtres d'affichage de Hammer.]]
This image shows the pointfile loaded into the previous example. Notice that the red line appears in both the 3D and 2D views, and is traced back from the entity through the gap.
Cette image montre le {{L|pointfile}} chargé dans l'exemple précédent. Remarquez que la ligne rouge apparait à la fois dans la vue 3D et la vue 2D, et affiche une trace depuis l'entité à travers la brèche.


Using this visual aid, you can find the source of the leak by following the red line to the outside of the level. It's best to start at the entity specified by {{L|VBSP}}, and then follow the line until you find the gap in the geometry. Close the gap and recompile the level to see if you have fixed the leak.{{clr}}
En utilisant cette aide visuelle, vous pouvez trouver l'origine d'une fuite en suivant la ligne rouge jusqu'à l'extérieur du niveau. Le mieux est de démarrer depuis l'entité spécifiée par {{L|VBSP}}, et de suivre la ligne jusqu'à trouver la brèche dans la géométrie. Comblez la brèche et recompilez le niveau si vous avez résolu la fuite.{{clr}}


=== Finding the endpoint ===
=== Trouver l'extrémité ===


If you're having trouble locating the start entity, you can use the {{L|Hammer_View_Menu#Go_to_Coordinates...|Go to Coordinates}} command on the '''View''' menu to find the entity and the start of the pointfile line. Simply enter the coordinates given by {{L|VBSP}} for the entity location, and the 2D and 3D views will be centered on that location. Follow the line to find your leak.
Si vous avez des difficultés à trouver l'entité de départ, vous pouvez utiliser la commande {{L|Hammer_View_Menu#Go_to_Coordinates...|Go to Coordinates}} du menu ''View'' pour trouver l'entité et le début de ligne {{L|pointfile}}. Entrez juste les coordonnées fournies par l'entité, et les vues 2D et 3D seront centrées sur celles-ci. Suivez ensuite la ligne jusqu'à la fuite.


Another method to find the source of the leak is to zoom out in one or more of the 2D views. After loading the pointfile, zoom out until you see the red line. Follow the line until you reach the entity at the one of the endpoints. Then select the entity, and choose {{L|Hammer_View_Menu#Center_Views_on_Selection_.3CCtrl.2BE.3E|Center 3D Views on Selection}} from the '''View''' menu. Now you can follow the pointfile line to find the leak.
Une autre méthode consite à trouver la source de la fuite en dézoomant dans une des vues 2D. Après avoir chargé le {{L|pointfile}}, dézoomez jusqu'à voir la ligne rouge. Suivez la ligne jusqu'à atteindre l'entité à son extrémité. Sélectionnez l'entité et utilisez {{L|Hammer_View_Menu#Center_Views_on_Selection_.3CCtrl.2BE.3E|Center 3D Views on Selection}} du menu ''View''. Désormais vous pouvez suivre la ligne jusqu'à la fuite.


== Other causes of leaks ==
== Autres causes de fuites ==


Besides gaps in outside geometry, there are other map errors that can cause {{L|VBSP}} to generate a leak error.
En dehors des brèches qui donnent vers l'extérieur de la géométrie, il y a d'autres erreurs de carte qui peuvent faire que {{L|VBSP}} génère une erreur de fuite.


=== Entities outside the level ===
=== Entités en dehors du niveau ===
[[File:hammer_leaks2.jpg||thumb|300px|right|Placing any entity in the {{L|void}} will cause a leak.]]
[[File:hammer_leaks2.jpg||thumb|300px|right|Positionner une entité dans le vide ({{L|void}}) provoquera une fuite.]]
All entities need to be inside the playable level space or skybox. VBSP treats all brush entities as if they are not there, so attempting to seal a map with a brush entity, such as a {{L|func_door}}, will create the same condition as if there were a gap in their place.{{clr}}
Toutes les entités doivent se situer à l'intérieur d'un espace jouable ou une {{L|Skybox}}. {{L|VBSP}} traite toutes les entités brush comme si elles n'étaient pas présentes, ainsi en fermant la carte une entité brush, comme la {{L|func_door}}, provoquera la même situation qu'une brèche.{{clr}}


=== Improperly constructed areaportals ===
=== Areaportals mal positionnés ===
[[File:hammer_leaks3.jpg||thumb|300px|right|Areaportals that do not seal areas will cause leaks.]]
[[File:hammer_leaks3.jpg||thumb|300px|right|Areaportals qui ne ferment pas bien les zones provoqueront des fuites.]]
Leak error messages can also be generated when an {{L|areaportal}} does not properly seal the two areas it connects. Find leaks with areaportals using the same methods as geometry gap leaks.{{clr}}
Les messages d'erreur de fuite peuvent aussi être générées par un {{L|areaportal}} qui ne sépare pas correctement 2 zones. Utilisez la même méthode que pour les brèches de géométrie pour identifier les fuites.{{clr}}


=== Special geometry does not seal the world ===
=== Les géométries spéciales ne ferment pas le monde ===
[[File:hammer_leaks4.jpg||thumb|300px|right|Seal areas behind non-solid geometry to prevent leaks.]]
[[File:hammer_leaks4.jpg||thumb|300px|right|Fermez les zones derrière des géométries non solides pour éviter les fuites.]]


{{L|Displacements}} and {{L|water}} also do not seal maps and will cause leaks. You can fix this type of leak by adding a solid brush behind them to seal the map. Using a brush with the <code>tools/toolsnodraw</code> material will seal the map, but not add any additional rendering cost, so it's a great way to seal the map behind displacements. Water should be sealed off with whatever is sealing off the area above it (probably <code>tools/toolsskybox</code> or another typical texture, such as bricks.) Do not use nodraw to seal off water, as this will cause a weird trailing effect.{{clr}}
{{L|Displacements}} et {{L|water}} ne ferment pas les cartes provoqueront des fuites. Vous pouvez résoudre ce type de fuite en ajoutant un brush juste derrière elles pour fermer la carte. En utilisant le brush avec le matériau <code>tools/toolsnodraw</code> fermera la carte, mais généra pas de calcul de rendu supplémentaire, ce qui est une bonne solution pour les displacements.
{{L|water}} devrait être fermée avec ce qui ferme la zone au dessus (problablement <code>tools/toolsskybox</code> ou une autre texture classique comme des briques). N'utilisez pas {{L|nodraw}} pour fermer l'eau, ce qui provoquera un effet de trainée bizarre.


=== Mismatched entity origins ===
=== Origines d'entités décalées ===
[[File:hammer_origin_leak.jpg|thumb|300px|right|An origin helper separated from its parent entity and moved outside the level will cause a leak.]]
[[File:hammer_origin_leak.jpg|thumb|300px|right|Une origine séparée de son entité parent et se trouvant en dehors du niveau, provoquera une fuite.]]


A more subtle cause of leaks can be with any entities that have origin helpers, such as {{L|func_door_rotating}} or {{L|func_rot_button}}. While the entity itself may be inside the world, if the origin helper is outside the map, the entity will cause a leak. If you find a pointfile heading to a empty spot outside of the map, and there is no entity there, an origin helper is a good thing to look for.
Une autre cause subtile de fuite peut provenir d'entités qui ont des origines, comme les {{L|func_door_rotating}} ou les {{L|func_rot_button}}. Lorsque l'entité elle-même est dans le monde, si son origine est en dehors de la carte, l'entité provoquera une fuite. Si vous trouvez un {{L|pointfile}} pointant vers une zone en dehors de la carte, et qu'il n'y a aucune entité, il faudra rechercher plutôt une origine d'entité.


One way to quickly tell if an entity origin is causing the leak is to:
Pour savoir si la cause est l'origine d'une entité :
# Load the pointfile.
# Charger le pointfile.
# Find the endpoint(s) of the pointfile.
# Trouver l'extrémité du pointfile.
# Choose '''Select All''' from the '''Edit Menu'''.
# Choisissez '''Select All''' du menu '''Edit'''.
# Make sure '''{{L|Hammer_View_Menu#Show Helpers|Show Helpers}}''' is checked on the '''View Menu'''.
# Assurez vous que la case '''{{L|Hammer_View_Menu#Show Helpers|Show Helpers}}''' est cochée dans le menu '''View'''.
# If you see an origin helper appear at the pointfile, you know that's the problem.
# Si vous voyez une origine apparaitre, vous saurez qu'il s'agit de ce problème.


If you have an origin helper causing a leak, you can select the object and manually move the origin back into the world, use the {{L|Hammer_Tools_Menu#Center_Origins|Center Origins}} command from the '''Tools Menu''', or simply right-click on the origin helper and select '''Center on entity'''.
Si vous avez un problème d'origine, vous pouvez sélectionner l'objet et déplacer manuellement l'origine pour le placer dans le monde, utiliser la commande {{L|Hammer_Tools_Menu#Center_Origins|Center Origins}} du menu '''Tools''', ou simplement cliquer droit sur l'origine et choisir '''Center on entity'''.


Mismatched entity origins usually occur when a brush entity with one of these helpers is moved while in {{L|Hammer_Selection_Modes_Toolbar|Solids}} mode. Moving a brush entity in solids mode does not move the entity's origin helper.{{clr}}
Les décalages d'origine des entités arrivent généralement lorsqu'une entité brush avec une de ses origines est déplacée en étant dans le mode {{L|Hammer_Selection_Modes_Toolbar|Solids}}. Déplacer une entité brush en mode solide ne déplace pas son origine.{{clr}}


=== Translucent geometry ===
=== Géométrie translucide ===
Brushes with translucent materials, like glass, can cause leaks in one circumstance. That being, when a brush with a translucent texture is facing the void. It doesn't matter on which side the translucent texture is, as having at least one side translucent makes the brush incapable of sealing the level.  
Les Brushes avec matériaux translucides, comme le verre, peuvent provoquer des fuites dans un cas. Cela arrive lorsque le brush avec texture translucide fait face au vide. Cela importe peu de quel côté se situe la texture translucide, à partir du moment où un côté est translucide fera que le brush ne fermera pas le niveau.  


In this case your pointfile will go straight through a brush into the nearest entity. Check if it's possible to see out into the void and vice versa through any of the 6 faces of the brush that the pointfile is passing through.
Dans ce cas votre pointfile ira directement à travers votre brush jusqu'à l'entité la plus proche. Contrôlez s'il est possible de voir dans le vide et inversement à travers les 6 faces du brush pour lequel le pointfile passe à travers.
Alternatively, this can be easily fixed with the ''Apply current texture'' tool with the ''tools/nodraw'' texture and then texturing the visible sides with the texture they originally were.
Par ailleurs, cela peut être facilement corrigé en faisant un ''Apply current texture'' avec la texture ''tools/nodraw'', et en appliquant une texture sur les faces visibles.


=== Func_viscluster ===
=== Func_viscluster ===


{{ent|func_viscluster}} can also cause leaks when they cross {{L|Water (shader)|water material}} or {{L|areaportal}} surfaces, or are too close to them, so simply avoid {{code|func_viscluster}} from crossing the areaportal surfaces.
{{L|func_viscluster}} peut aussi provoquer des fuites lorsqu'ils croisent des {{L|Water (shader)|matériaux d'eau}} ou des {{L|areaportal}}, ou sont trop prêts d'eux, donc évitez de croiser {{L|func_viscluster}} avec des areaportals.


If it really does need to be used over water, bring the brush level with the surface of the water on one side, and then create a second, separate {{code|func_viscluster}} on the other side. Never allow a func_viscluster brush to cross a water plane, or ''very'' strange things happen.
Si cela nécessite réellement d'être utilisé sur l'eau, mettez le brush pour la surface de l'eau d'un côté, et ensuite créez un second, séparé {{L|func_viscluster}} de l'autre coté. Ne croisez jamais un {{L|func_viscluster}} avec plan d'eau, ou des choses ''étranges'' se produiront.


As a last resort, if it still cause the leak, try to remove or move viscluster far away from areaportals, then compiling it again see if it fixes the issue.
En dernier recours, si cela génère toujours une fuite, essayez de supprimer ou déplacer le viscluster loin des areaportals. Compilez ensuite et voyez si cela corrige le problème.


=== False leaks ===
=== Fausses fuites ===


Although very rare, it is possible VBSP reports false leaks in your level. If you are sure that there should not be a leak reported by VBSP, copy your map and paste it into a fresh new map file. If it compiles fine, then your old file could have been corrupted.
Bien que très rare, il est possible que VBSP remonte de fausses fuites sur votre niveau. Si vous êtes sur qu'il ne devrait pas y en avoir, copiez votre carte et collez la dans un nouveau fichier. Si cela compile bien, votre ancien fichier était certainement corrompu.


=== Not having any entities inside the level ===
=== Aucune entité dans le niveau ===


Not having any type of entity inside the level will cause a leak. This is why pointfiles originate at an entity, because VBSP uses entities as a reference point for what ''is'' the inside of a map. Your map should always at least have a {{LCategory|Player spawn entities|spawn entity}} in it.
Ne pas voir d'entité dans le niveau provoquera une fuite. Ceci s'explique par le fait que les pointfiles partent d'une entité, car VBSP utilise les entités comme point de référence sur ce qui se trouve à l'intérieur d'une carte. Votre carte devrait toujours avoir au moins un {{LCategory|Player spawn entities|spawn entity}} à l'intérieur.


=== func_detail non couverts===
Ne pas recouvrir {{L|func_detail}} avec des solid brushes, peut aussi provoquer des fuites qui peuvent être difficiles à identifier si une personne ne réalise pas que cela est causé par un {{L|func_detail}}.


=== Uncovered func_detail ===
== Situations qui ne provoquent pas de fuites ==
Not covering {{L|func_detail}} with solid brushes, can also cause leaks which can be hard to find if someone doesn't realise that it's caused through a func_detail.


== Situations that do not leak ==
Il y a beaucoup de situations qui ne génèrent pas de fuite, même si une entité est positionnée en dehors de la carte.
 
There are a number of situations which in fact do not cause a leak, even though it appears an entity is positioned outside the map.


=== Instances ===
=== Instances ===


Instances are not entities - during loading, their contents are merged into the map. This means brushes inside an instance can seal a map, and the location of the actual {{L|func_instance}} entity is not important, as long as any entities in the instance get placed inside the map.
Les instances ne sont pas des entités - lors du chargement, leur contenu est fusionné dans la carte. Cela signigie que les brushes à l'intérieur des instances peuvent fermer la carte, et la position du {{L|func_instance}} importe peu, à partir du moment où les entités des instances sont placées à l'intérieur de la carte.


=== Only the origin matters ===
=== Seule l'origine compte ===


Only the origin of the entity is considered when looking for leaks. The actual geometry of a brush or model can be partially or entirely inside the void, as long as the origin point is inside the map. Of course no lights are able to reach the void, so these entities should probably be unlit or invisible.
Seule l'origine des entités est prise en compte lors de la recherche de fuites. La géométrie d'un brush ou modèle peut être partiellement ou entièrement dans le vide, à partir du moment où l'origine est à l'intérieur de la carte. Évidemment aucune lumière n'est capable d'atteindre le vide, donc ces entités ne seraient pas éclairés ou invisibles.


=== Entities at the origin and inside brushes ===
=== Entités à l'origine et à l'intérieur de brushes ===


Entities with their origin at exactly <code>0 0 0</code>, or with their origin inside a solid brush do not leak. They are effectively ignored when determining the inside and outside of the level.
Les entités avec leur origine aux coordonnées exactes <code>0 0 0</code>, ou dont l'origine est à l'intérieur d'un brush solide ne provoque pas de fuite. Ils sont effectivement ignorés lors de l'évaluation des zones intérieur/extérieur.


== Conclusion: An ounce of prevention ==
== Conclusion: un peu de prévention ==


Using the pointfile tools makes finding leaks relatively painless, but one of the most important ways to fix leaks is by preventing them in the first place. Taking your time when building, and making sure brushes are snapped properly to the grid can go a long way towards eliminating leaks before they occur. The cleaner and more organized your geometry, the more likely you are to be able to spot leaks when they occur, or even prevent them from happening in the first place. You can also help prevent lots of extra work by compiling your level as you go along, instead of building your whole level before trying to compile it. Finding one leak at a time while the map is only partially complete is a lot easier and faster than finding leaks in a complete map that is full of geometry.
Utiliser les outils du pointfile rend les recherches de fuite moins difficiles, mais la chose la plus importante pour résoudre les fuites est de s'en prémunir. Prenez votre temps lors de la construction, en faisant attention à ce que les brushes soient bien alignés proprement sur la grille. Cela peut vous éviter des fuites. Plus la géométrie est propre et organisée, plus vous serez capable d'identifier les fuites si elles arrivent, ou du moins s'en prémunir dans un premier temps. Vous pouvez aussi limiter du travail supplémentaire en compilant votre niveau au fur et à mesure de son avancée, au lieu de construire complètement le niveau et essayer de compiler le tout à la fin. Trouver une fuite lorsque la carte est partiellement terminée est bien plus efficace que de trouver des fuites sur carte remplie d'éléments.


== What about Source 2? ==
== A propos de Source 2? ==
In {{Src2|4}}, since BSP geometry has been replaced with {{L|Mesh}} geometry, Source 2 maps are no longer required to be sealed off to prevent leaks. However it will still be beneficial to do so to help the {{L|VIS}} calculation processes during compile.
Dans {{Src2|4}}, étant donné que la géométrie BSP a été remplacée par la géométrie {{L|Mesh}}, les cartes Source 2 n'ont plus besoin d'être fermées pour éviter les fuites. Cependant il sera toujours bénéfique de faire de la même manière pour aider au calcul de {{L|VIS}} lors de la compilation.


{{GoldSrc topicon}}
{{GoldSrc topicon}}

Latest revision as of 02:59, 27 August 2025

English (en)Deutsch (de)Español (es)Français (fr)Русский (ru)中文 (zh)Translate (Translate)

Les cartes .bsp(en) (Dans GoldSrc GoldSrc et Source Source) doivent être complètement fermées. Aucun élément intérieur du niveau, du monde, ne doit donner sur l'extérieur, le vide(en). Le ciel doit également être contenu dans un bloc utilisant la texture tools/toolsskybox (cf. skybox(en)). Dès qu'il existe une légère ouverture sur le vide, une fuite(en) (leak en anglais) est générée lorsque la carte est compilée via QBSP2(en)/HLBSP(en) ou VBSP(en). Lorsqu'une fuite apparaît, le compilateur BSP ne peut pas savoir quel élément est à l'intérieur ou à l'extérieur, ce qui fait que cela ne fonctionnera pas correctement.

Dans cet exemple, on constate un trou béant dans la géométrie débouchant sur le vide. Ceci provoquera une message d'erreur de fuite lors de la compilation.

Un trou dans la géométrie, qui débouche sur le vide, provoquera une fuite.

Lors de la compilation d'une carte comme celle-ci, avec une ouverture sur le vide, VBSP générera une erreur similaire à la trace ci-dessous :

ProcessBlock_Thread: 0...1...2...3...4...5...6...7...8...9...10 (0)
**** leaked ****
Entity light (-1607.69 -1094.12 -183.00) leaked!

Dans HLBSP(en) (ZHLT(en)/VHLT(en)), cela générera l'erreur suivante:

Warning: === LEAK in hull 0 ===
Entity info_player_start @ (  -0, 832, 128)
Error: 
  A LEAK is a hole in the map, where the inside of it is exposed to the
(unwanted) outside region.  The entity listed in the error is just a helpful
indication of where the beginning of the leak pointfile starts, so the
beginning of the line can be quickly found and traced to until reaching the
outside. Unless this entity is accidentally on the outside of the map, it
probably should not be deleted.  Some complex rotating objects entities need
their origins outside the map.  To deal with these, just enclose the origin
brush with a solid world brush

Leak pointfile generated

Avec ce message d'erreur, VBSP vous indique qu'il existe une fuite sur le niveau, ainsi que la première entité trouvée débouchant sur le vide (dans notre exemple, l'entité de lumière). Cela vous renseigne sur l'emplacement de cette entité, exprimée en coordonnées sur le monde (x, y, z).

Note.pngNote:La plupart du temps l'entité mentionnée n'est pas la cause de la fuite, il s'agit plutôt de l'objet qui déclenche la fuite. Supprimer cet objet ne fera que reporter une nouvelle erreur à partir d'un autre objet, cela ne resoudra pas votre problème ! Il existe un cas de figure qui supprimera la fuite: lorsque l'objet est situé en dehors de la zone jouable. Ce sujet sera abordé plus tard.
Note.pngNote:Si vous n'avez aucune entité point sur votre carte au moment de la compilation, VBSP VBSP indiquera une fuite, car il n'y a aucun moyen de savoir, entre l'intérieur et l'extérieur, laquelle est la zone jouable.
Note.pngNote:VVIS VVIS ne pourra pas s'exécuter s'il existe une fuite; (depuis Alien Swarm Alien Swarm) ainsi que Hammer++, cela arrêtera le processus de compilation. Cela n'apparaîtra pas lors de la prévisualisation des cartes dans Portal 2 Puzzle Maker(en), sans raison particulière.
Note.pngNote:ZHLT(en) & VHLT(en) - HLVIS(en) et HLRAD(en) refusera de démarrer s'il existe une fuite.
Note.pngNote:Dans Portal 2 Portal 2, Counter-Strike: Global Offensive Counter-Strike: Global Offensive et Alien Swarm Alien Swarm, si vous avez une fuite et que vous passez outre VVIS VVIS, la carte ne compilera pas le ciel.[Clarify]
Note.pngNote:Si l'eau(en) apparaît comme non dessinée, cela est probablement du à une fuite.

Conséquences des fuites

Une fuite dans un niveau a des effets négatifs. VBSP(en) indiquera la fuite et cela généra un fichier portail incorrect (mapname.prt(en)), voir aucun fichier. Le fichier portail est utilisé par VVIS(en) pour faire ses calculs de visibilité. Puisqu'il n'y a pas de fichier portail, VVIS(en) ne s'exécutera pas correctement voir pas du tout. Lorsque cela arrive, VRAD(en) ne fonctionnera pas non plus correctement, ou uniquement l'éclairage direct - sans rebonds de lumières.

Les cartes ne sont pas du tout jouables. VVIS(en) va demander au moteur de générer la carte en une seule fois, ce qui est trop mauvais pour la fréquence d'images, ou il y aura des zones complètement invisibles. Au pire des cas, une fuite peut faire que VRAD(en) généra une carte entièrement noire.

Perte de temps avec les fuites

VBSP(en) remontera toutes les fuites qu'il constate, mais passer des heures à faire des compilations et d'exécution en jeu pour se rendre compte que la carte est corrompie après compilation, n'est tout simplement très efficient. Assurez vous que votre carte n'a pas de fuite avant que vous vous préoccupiez de la visibilité et de l'éclairage. Si vous remarquez que VBSP(en) remonte une fuite pendant que la compilation s'exécute, appuyez sur Ctrl+C pour abandonner l'exécution.

Trouver les fuites

Parfois les coquilles ne sont pas aussi évidentes que dans l'exemple précédent. Ils peuvent être une petite fraction d'une unité de largeur et provoquer une fuite. VBSP(en) fournit un pointfile(en) pour vous aider à localiser la fuite. Il dessine une ligne à partir du vide de la carte jusqu'à l'entité qu'il a trouvé lors du contrôle de fuites. Après avoir reçu une erreur de fuite, un fichier mapname.lin(en) sera créé dans le même répertoire que votre fichier .vmf(en).

Charger un pointfile

Le pointfile(en) peut être chargé dans l'éditeur Hammer pour montrer précisément où se trouve la fuite dans le niveau. Pour charger un pointfile(en) du niveau, aller dans Load Pointfile(en) du menu Map.

La commande Load Pointfile affiche le chemin de la fuite dans les fenêtres d'affichage de Hammer.

Cette image montre le pointfile(en) chargé dans l'exemple précédent. Remarquez que la ligne rouge apparait à la fois dans la vue 3D et la vue 2D, et affiche une trace depuis l'entité à travers la brèche.

En utilisant cette aide visuelle, vous pouvez trouver l'origine d'une fuite en suivant la ligne rouge jusqu'à l'extérieur du niveau. Le mieux est de démarrer depuis l'entité spécifiée par VBSP(en), et de suivre la ligne jusqu'à trouver la brèche dans la géométrie. Comblez la brèche et recompilez le niveau si vous avez résolu la fuite.

Trouver l'extrémité

Si vous avez des difficultés à trouver l'entité de départ, vous pouvez utiliser la commande Go to Coordinates(en) du menu View pour trouver l'entité et le début de ligne pointfile(en). Entrez juste les coordonnées fournies par l'entité, et les vues 2D et 3D seront centrées sur celles-ci. Suivez ensuite la ligne jusqu'à la fuite.

Une autre méthode consite à trouver la source de la fuite en dézoomant dans une des vues 2D. Après avoir chargé le pointfile(en), dézoomez jusqu'à voir la ligne rouge. Suivez la ligne jusqu'à atteindre l'entité à son extrémité. Sélectionnez l'entité et utilisez Center 3D Views on Selection(en) du menu View. Désormais vous pouvez suivre la ligne jusqu'à la fuite.

Autres causes de fuites

En dehors des brèches qui donnent vers l'extérieur de la géométrie, il y a d'autres erreurs de carte qui peuvent faire que VBSP(en) génère une erreur de fuite.

Entités en dehors du niveau

Positionner une entité dans le vide (void(en)) provoquera une fuite.

Toutes les entités doivent se situer à l'intérieur d'un espace jouable ou une Skybox(en). VBSP(en) traite toutes les entités brush comme si elles n'étaient pas présentes, ainsi en fermant la carte une entité brush, comme la func_door(en), provoquera la même situation qu'une brèche.

Areaportals mal positionnés

Areaportals qui ne ferment pas bien les zones provoqueront des fuites.

Les messages d'erreur de fuite peuvent aussi être générées par un areaportal(en) qui ne sépare pas correctement 2 zones. Utilisez la même méthode que pour les brèches de géométrie pour identifier les fuites.

Les géométries spéciales ne ferment pas le monde

Fermez les zones derrière des géométries non solides pour éviter les fuites.

Displacements(en) et water(en) ne ferment pas les cartes provoqueront des fuites. Vous pouvez résoudre ce type de fuite en ajoutant un brush juste derrière elles pour fermer la carte. En utilisant le brush avec le matériau tools/toolsnodraw fermera la carte, mais généra pas de calcul de rendu supplémentaire, ce qui est une bonne solution pour les displacements. water(en) devrait être fermée avec ce qui ferme la zone au dessus (problablement tools/toolsskybox ou une autre texture classique comme des briques). N'utilisez pas nodraw(en) pour fermer l'eau, ce qui provoquera un effet de trainée bizarre.

Origines d'entités décalées

Une origine séparée de son entité parent et se trouvant en dehors du niveau, provoquera une fuite.

Une autre cause subtile de fuite peut provenir d'entités qui ont des origines, comme les func_door_rotating(en) ou les func_rot_button(en). Lorsque l'entité elle-même est dans le monde, si son origine est en dehors de la carte, l'entité provoquera une fuite. Si vous trouvez un pointfile(en) pointant vers une zone en dehors de la carte, et qu'il n'y a aucune entité, il faudra rechercher plutôt une origine d'entité.

Pour savoir si la cause est l'origine d'une entité :

  1. Charger le pointfile.
  2. Trouver l'extrémité du pointfile.
  3. Choisissez Select All du menu Edit.
  4. Assurez vous que la case Show Helpers(en) est cochée dans le menu View.
  5. Si vous voyez une origine apparaitre, vous saurez qu'il s'agit de ce problème.

Si vous avez un problème d'origine, vous pouvez sélectionner l'objet et déplacer manuellement l'origine pour le placer dans le monde, utiliser la commande Center Origins(en) du menu Tools, ou simplement cliquer droit sur l'origine et choisir Center on entity.

Les décalages d'origine des entités arrivent généralement lorsqu'une entité brush avec une de ses origines est déplacée en étant dans le mode Solids(en). Déplacer une entité brush en mode solide ne déplace pas son origine.

Géométrie translucide

Les Brushes avec matériaux translucides, comme le verre, peuvent provoquer des fuites dans un cas. Cela arrive lorsque le brush avec texture translucide fait face au vide. Cela importe peu de quel côté se situe la texture translucide, à partir du moment où un côté est translucide fera que le brush ne fermera pas le niveau.

Dans ce cas votre pointfile ira directement à travers votre brush jusqu'à l'entité la plus proche. Contrôlez s'il est possible de voir dans le vide et inversement à travers les 6 faces du brush pour lequel le pointfile passe à travers. Par ailleurs, cela peut être facilement corrigé en faisant un Apply current texture avec la texture tools/nodraw, et en appliquant une texture sur les faces visibles.

Func_viscluster

func_viscluster(en) peut aussi provoquer des fuites lorsqu'ils croisent des matériaux d'eau(en) ou des areaportal(en), ou sont trop prêts d'eux, donc évitez de croiser func_viscluster(en) avec des areaportals.

Si cela nécessite réellement d'être utilisé sur l'eau, mettez le brush pour la surface de l'eau d'un côté, et ensuite créez un second, séparé func_viscluster(en) de l'autre coté. Ne croisez jamais un func_viscluster(en) avec plan d'eau, ou des choses étranges se produiront.

En dernier recours, si cela génère toujours une fuite, essayez de supprimer ou déplacer le viscluster loin des areaportals. Compilez ensuite et voyez si cela corrige le problème.

Fausses fuites

Bien que très rare, il est possible que VBSP remonte de fausses fuites sur votre niveau. Si vous êtes sur qu'il ne devrait pas y en avoir, copiez votre carte et collez la dans un nouveau fichier. Si cela compile bien, votre ancien fichier était certainement corrompu.

Aucune entité dans le niveau

Ne pas voir d'entité dans le niveau provoquera une fuite. Ceci s'explique par le fait que les pointfiles partent d'une entité, car VBSP utilise les entités comme point de référence sur ce qui se trouve à l'intérieur d'une carte. Votre carte devrait toujours avoir au moins un spawn entity(en) à l'intérieur.

func_detail non couverts

Ne pas recouvrir func_detail(en) avec des solid brushes, peut aussi provoquer des fuites qui peuvent être difficiles à identifier si une personne ne réalise pas que cela est causé par un func_detail(en).

Situations qui ne provoquent pas de fuites

Il y a beaucoup de situations qui ne génèrent pas de fuite, même si une entité est positionnée en dehors de la carte.

Instances

Les instances ne sont pas des entités - lors du chargement, leur contenu est fusionné dans la carte. Cela signigie que les brushes à l'intérieur des instances peuvent fermer la carte, et la position du func_instance(en) importe peu, à partir du moment où les entités des instances sont placées à l'intérieur de la carte.

Seule l'origine compte

Seule l'origine des entités est prise en compte lors de la recherche de fuites. La géométrie d'un brush ou modèle peut être partiellement ou entièrement dans le vide, à partir du moment où l'origine est à l'intérieur de la carte. Évidemment aucune lumière n'est capable d'atteindre le vide, donc ces entités ne seraient pas éclairés ou invisibles.

Entités à l'origine et à l'intérieur de brushes

Les entités avec leur origine aux coordonnées exactes 0 0 0, ou dont l'origine est à l'intérieur d'un brush solide ne provoque pas de fuite. Ils sont effectivement ignorés lors de l'évaluation des zones intérieur/extérieur.

Conclusion: un peu de prévention

Utiliser les outils du pointfile rend les recherches de fuite moins difficiles, mais la chose la plus importante pour résoudre les fuites est de s'en prémunir. Prenez votre temps lors de la construction, en faisant attention à ce que les brushes soient bien alignés proprement sur la grille. Cela peut vous éviter des fuites. Plus la géométrie est propre et organisée, plus vous serez capable d'identifier les fuites si elles arrivent, ou du moins s'en prémunir dans un premier temps. Vous pouvez aussi limiter du travail supplémentaire en compilant votre niveau au fur et à mesure de son avancée, au lieu de construire complètement le niveau et essayer de compiler le tout à la fin. Trouver une fuite lorsque la carte est partiellement terminée est bien plus efficace que de trouver des fuites sur carte remplie d'éléments.

A propos de Source 2?

Dans Source 2 Source 2, étant donné que la géométrie BSP a été remplacée par la géométrie Mesh(en), les cartes Source 2 n'ont plus besoin d'être fermées pour éviter les fuites. Cependant il sera toujours bénéfique de faire de la même manière pour aider au calcul de VIS(en) lors de la compilation.