Fehler beheben

Map-Leak-Fehler beheben: „leaked“ beim Compile in Hammer

Map-Leak beheben: Was die VBSP-Meldung „leaked“ bedeutet, wie du mit dem Pointfile die Lücke findest und warum eine Riesen-Skybox keine Lösung ist.

Die Meldung **** leaked **** bedeutet, dass das Innere deiner Map nicht dicht gegen das Void abgeschlossen ist: Von einer Entity aus führt ein Weg nach draußen. Lade in Hammer über Map → Load Pointfile das Pointfile, folge der roten Linie bis zur Lücke und schließe sie mit einem soliden Welt-Brush.

Was ein Leak in der Map-Geometrie ist

VBSP muss wissen, was innen und was außen ist. Dazu füllt das Tool die Map gedanklich von den Entities aus mit Luft. Alles, was diese Füllung erreicht, gilt als Innenraum. Der Rest ist Void und wird verworfen. Erreicht die Füllung das Void, gibt es kein eindeutiges Innen mehr, und im Log steht zum Beispiel:

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

Die genannte Entity ist meist nicht die Ursache, außer sie liegt selbst außerhalb der Map. Sie ist nur der Startpunkt, von dem aus VBSP den Weg nach draußen gefunden hat.

Die Folgen reichen weit über die eine Zeile hinaus. VBSP schreibt keine Portal-Datei, deshalb kann VVIS keine Sichtbarkeit berechnen. VRAD arbeitet ohne Sichtbarkeitsdaten nur mit direktem Licht. Die Map lässt sich oft trotzdem laden, läuft aber schlecht und ist falsch beleuchtet. Wie die drei Tools zusammenhängen, erklärt der Artikel VBSP, VVIS und VRAD.

Leak finden: Pointfile laden und der roten Linie folgen

  1. Kompiliere die Map. Bei einem Leak legt VBSP neben der VMF eine Datei mit der Endung .lin an, das Pointfile.
  2. Wähle in Hammer Map → Load Pointfile und bestätige die vorgeschlagene Datei.
  3. In den 2D-Ansichten und in der 3D-Ansicht erscheint eine rote Linie. Sie beginnt an der Entity aus dem Log und endet im Void.
  4. Folge der Linie in der 3D-Ansicht bis zu der Stelle, an der sie die Außenhülle durchquert. Dort ist die Lücke.
  5. Schließe die Lücke, entferne die Linie über Map → Unload Pointfile und kompiliere erneut.

VBSP meldet immer nur einen Weg. Hat die Map mehrere undichte Stellen, wiederholst du den Ablauf, bis die Meldung verschwindet. Die Koordinaten aus dem Log kannst du über View → Go to Coordinates direkt anspringen.

Typische Ursachen

UrsacheWoran du sie erkennstLösung
Lücke zwischen zwei BrushesDie Linie führt durch einen schmalen Spalt, oft an Ecken oder schrägen WändenBrushes am Raster ausrichten, bis sie bündig schließen
Außenwand ist func_detail oder eine andere Brush-EntityDie Linie geht mitten durch eine Wand, die geschlossen aussiehtBrush markieren und mit Strg+Umschalt+W zurück zur Welt verschieben
Displacement als AußengrenzeDie Linie führt durch das Gelände nach unten oder zur SeiteEinen soliden Welt-Brush mit tools/toolsnodraw dahinter setzen
Entity außerhalb der MapDas Log nennt eine Entity mit Koordinaten im VoidEntity löschen oder in die Map verschieben
Defekter BrushMap → Check for Problems (Alt+P) meldet einen ungültigen SolidBrush korrigieren oder neu bauen

Zwei Punkte werden oft übersehen. Erstens dichten nur Welt-Brushes ab. Alles, was an eine Entity gebunden ist, etwa func_detail, func_brush oder eine Tür, ist für VBSP an dieser Stelle durchlässig. Dasselbe gilt für Displacements und Models. Zweitens zählt bei Entities der Ursprung. Ein Prop kann vollständig sichtbar in der Map stehen, während sein Ursprung hinter der Wand im Void liegt.

Warum eine Riesen-Skybox um die Map keine Lösung ist

Ein großer hohler Kasten um die gesamte Map lässt die Meldung verschwinden, weil der Weg nach draußen jetzt an der Kastenwand endet. Das eigentliche Problem bleibt bestehen und kommt in anderer Form zurück:

  • Der gesamte Raum zwischen Map und Kasten gilt als Innenraum. VBSP zerlegt ihn in Visleafs, und VVIS muss sie alle berechnen. Die Compile-Zeit steigt stark.
  • VBSP entfernt normalerweise alle Flächen, die ins Void zeigen. Mit dem Kasten bleiben die Außenseiten und Rückseiten deiner Geometrie erhalten, werden beleuchtet und im Spiel gerendert.
  • Die Sichtbarkeitsberechnung bringt viel weniger, weil sich über den Außenraum Bereiche sehen können, die sonst voneinander getrennt wären. Die Bildrate sinkt.

Setze Skybox-Brushes deshalb nur dort, wo tatsächlich Himmel zu sehen ist, und führe sie eng an der Map entlang.

Leaks von Anfang an vermeiden

  • Baue die Außenhülle aus einfachen, großen Welt-Brushes am Raster. Details kommen als func_detail davor.
  • Lege unter und hinter jedes Displacement einen soliden Brush mit tools/toolsnodraw.
  • Kompiliere häufig. Ein Leak, der direkt nach einer Änderung auftaucht, ist schnell eingegrenzt.
  • Nutze bei großen Maps das Cordon-Werkzeug, um nur einen Teil zu kompilieren und den Bereich einzugrenzen.

Wenn im Log neben dem Leak weitere Meldungen stehen, sind das oft Folgefehler. Im Map Scanner kannst du ein Compile-Log einfügen. Er erkennt in VBSP-, VVIS- und VRAD-Logs Ursachen, Folgefehler und passende Lösungswege. Einzelne Meldungen kannst du außerdem in der Fehlerdatenbank nachschlagen. Wie du ein Log selbst liest, zeigt der Artikel Compile-Log lesen.

Häufige Fragen

Was bedeutet „leaked“ beim Kompilieren?

Das Innere der Map ist nicht vollständig von soliden Welt-Brushes umschlossen. VBSP hat von einer Entity aus einen Weg ins Void gefunden. Solange das so ist, fehlen Sichtbarkeitsdaten und vollständiges Licht.

Wo finde ich das Pointfile in Hammer?

Im Menü Map unter Load Pointfile. Die Datei mit der Endung .lin liegt im selben Ordner wie deine VMF und trägt denselben Namen. Sie entsteht nur, wenn VBSP tatsächlich einen Leak gefunden hat.

Kann ich eine Map mit Leak trotzdem spielen?

Oft ja, aber nicht sinnvoll. Ohne Sichtbarkeitsdaten rendert die Engine viel mehr als nötig, und das Licht besteht nur aus direkter Beleuchtung. Für einen Release ist eine Map mit Leak ungeeignet.

Dichtet func_detail eine Map ab?

Nein. func_detail ist eine Brush-Entity und wird beim Abdichten ignoriert. Wände, Böden und Decken, die die Map nach außen abschließen, müssen normale Welt-Brushes sein.