Leaks

Ich nehme mal an, jeder Mapper hatte dieses Problem schon mal gehabt. Ihr habt Licht-Entities in der Map, aber es ist überall hell, obwohl ihr garnicht so viele Lichtquellen habt und die Map eigentlich eher dunkel sein sollte?

Dahinter steckt keine falsche Einstellung im Hammer, sondern ein Compile-Fehler. Es ist keine Licht-Berechnung (RAD) durchgelaufen, weil es in der Compile-Folge ein Fehler vorliegt. Das können natürlich viele Fehler sein, aber meißtens liegt es an einem Leak.

Leak? Was ist das?

Ein Leak ist ein „Loch“ in eurer Map, welches „Zugang“ ins void zulässt. Beim Erstellen einer Map muss also darauf geachtet werden, dass am Ende alles geschlossen ist, also keine Löcher zum „Ausgang“ der Map enstehen.

Weil Bsp keine Portal-Datei (<mapname>.prt) erstellt wird, kann VIS keine Berechnungen durchführen und wird somit übersprungen. Weil VIS aber für die Lichtberechnungen RAD erforderlich sind, wird auch RAD nicht korrekt ausgeführt.

Ingame wird durch die fehlenden Vis-Berechnungen das gesamte Level gerendert, was erhebliche Performanceeinbrüche zur Folge hat. Einige Abschnitte in der Map (Wasser o.ä) werden dadurch nicht berechnet.

Woran erkenne ich das Leak?

Man kann ganz einfach feststellen, ob man ein Leak in der Map hat, indem man einen kurzen Blick auf das Compile-Log wirft. Im Abschnitt von VBSP ist folgende Zeile zu finden:

**** LEAKED ****
Entity <Entityname> (X Y Z Koordinaten) leaked!

Das angegebene Entity ist nicht der Verursacher des Leaks, sondern das Entity, welches sich am Nächsten zu dem Leak befindet. Es besteht also keine Notwendigkeit, das Entity zu löschen o.ä

Neben dem Compile-Log kann man auch noch in der fertigen Map nachschauen. Sofern ihr sicher seid, dass ihr Lichtquellen gesetzt habt, aber trotzdem alles hell ist, könnt ihr von einem Leak ausgehen.

Wie finde & beseitige ich das Leak?

Nachdem festgestellt wurde, dass ein Leak vorhanden ist, kann man per Map > Load Pointfile seine Pointfile-Datei (*.pts / *.lin) laden. Sobald diese geladen wurde, erscheint eine rote Linie in den 2d/3d-Views. Dieser Linie muss man folgen, bis man auf die Stelle trifft, an der die Linie aus der Map rausgeht.
pointfile.jpg


pointfile2.jpg


Weil das light-Entity dem Leak am Nächsten ist, würde die Compile-Error Meldung folgendermaßen aussehen:

**** leaked ****
Entity light (X Y Z) leaked!

Ursachen für Leaks

Neben Löchern im Brushwork gibt es mehrere Ursachen, durch die Leaks entstehen.

Entities ausserhalb der Map

Ein bekannter Fehler ist das Setzen von Entities ausserhalb der eigentlichen Map. Die Enden der Maps müssen immer durch World-Brushes abgedeckt sein. Man kann keine Brush-Entities dafür verwenden.
leak_entities.jpg
Entities ausserhalb der Map

falsch gesetzte Areaportals

Areaportals müssen zwei Abschnitte immer komplett abtrennen. Es dürfen keine Lücken zwischen den beiden Abschnitten entstehen.
leak_areaportal.jpg
Falsch gesetzte Areaportals

Displacements

Nicht-Solide Map-Objekte decken die Map nicht ab. Dazu zählen Displacements, Wasser oder func_detail Brushes. Unter diesen Brushen muss sich ein solider Brush befinden. Am Besten benutzt man die tools/toolsnodraw-Textur dafür, weil diese keine weitere Performance verbraucht.
leak_disp.jpg
nicht-solide Map-Objekte mit Absicherung an der Unterseite.

Leaks vorbeugen

Dank der Pointfile ist das Finden von Leaks relativ einfach, aber die Beste Möglichkeit ist, Leaks ganz zu vermeiden. Nehmt euch viel Zeit wenn ihr baut, und baut die Brushes immer per Snap to Grid, um selbst kleinste Lücken zu vermeiden. Je sauberer und übersichtlicher ihr mappt, desto einfacher kann man Leaks finden und sogar vermeiden. Zwischenkompilieren, um nach Leaks zu suchen, ist einfacher und schneller, als erst die fertige Map auf Leaks zu untersuchen.

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life_2/tutorials/leaks.txt · Zuletzt geändert: 2009/11/22 16:41 von Adrian_Broher