Mapping & Hammer

Skybox, Nebel und Color Correction in GMod-Maps einstellen

Skybox, Nebel und Color Correction einstellen: 2D-Himmel und eigene Sky-Texturen, env_fog_controller mit Far Z, color_correction und HDR-Belichtung.

Den Himmel einer Map legst du über zwei Dinge fest: Flächen mit dem Material tools/toolsskybox und den Sky-Namen unter Map > Map Properties. Nebel kommt aus einem env_fog_controller, die Farbstimmung aus einem color_correction mit einer .raw-Datei, und die HDR-Belichtung begrenzt ein env_tonemap_controller. Nebelfarbe, Sonnenlicht und Farbkorrektur müssen dabei zum Himmelsbild passen.

So funktioniert die 2D-Skybox

Flächen mit tools/toolsskybox sind Fenster zum Himmel. Die Engine zeichnet dort einen Würfel aus sechs Bildern, der immer um die Kamera liegt und deshalb unendlich weit entfernt wirkt. Welche Bilder das sind, bestimmt das Feld „SkyBox Texture Name“ (skyname) in den Map Properties. Der Standardwert ist sky_day01_01.

Du trägst nur den Grundnamen ein, ohne skybox/ und ohne Endung. Die Engine hängt für jede Würfelseite ein Kürzel an und sucht das Material unter materials/skybox/:

KürzelSeiteBeispiel
upobenmaterials/skybox/sky_day01_01up.vmt
dnuntenmaterials/skybox/sky_day01_01dn.vmt
lf, rtlinks, rechtssky_day01_01lf.vmt, sky_day01_01rt.vmt
ft, bkvorn, hintensky_day01_01ft.vmt, sky_day01_01bk.vmt

Die meisten Himmel von Half-Life 2 liegen zusätzlich als Satz für HDR vor, bei dem _hdr vor dem Kürzel steht, zum Beispiel sky_day01_01_hdrup. Im Spiel zeigt sv_skyname den aktuellen Namen. Eine ferne Kulisse aus Geometrie baust du mit der 3D-Skybox, die vor diesem Bild gezeichnet wird.

Vorhandenen Himmel nutzen oder eigenen einbauen

GMod bringt die Himmel aus Half-Life 2 mit (sky_day01_01 bis sky_day03_06, sky_borealis01, sky_wasteland02) und einen einstellbaren: Mit dem Sky-Namen painted und dem Entity env_skypaint stellst du die Himmelsfarben direkt ein. Für diese Himmel musst du nichts packen.

Ein eigener Himmel besteht aus sechs VTF-Dateien und sechs VMT-Dateien in materials/skybox/. Die VMT eines mitgelieferten Himmels ist die beste Vorlage:

"UnlitGeneric"
{
	"$basetexture" "skybox/mymap_skyup"
	"$nofog" "1"
	"$ignorez" "1"
}
  • $nofog nimmt den Himmel vom Nebel aus, $ignorez zeichnet ihn ohne Tiefentest, sodass er hinter aller Geometrie bleibt.
  • Die mitgelieferten Sky-Texturen tragen die VTF-Flags Clamp S, Clamp T, No Mipmap und No LOD. Ohne Clamp können an den Würfelkanten Nähte sichtbar werden.
  • Der HDR-Satz der Vorlagen nutzt den Shader sky mit $hdrcompressedtexture. Einen eigenen Himmel ohne HDR-Satz solltest du in einer HDR-Map gezielt testen.

Alle zwölf Dateien gehören in die BSP, siehe Custom Content in BSP packen. Wie VTF und VMT entstehen, steht in Eigene Texturen mit VTF und VMT.

Licht an den Himmel anpassen

Der Himmel ist nur ein Bild, das Licht kommt vom light_environment. Pitch und Yaw müssen zum Sonnenstand im Bild passen, „Brightness and Color“ hat die Farbe des Sonnenlichts und „Ambient Color and Brightness“ die Farbe des Himmels. Für die Himmel von Valve führt die Valve Developer Community eine Sky List mit Werten aus den offiziellen Maps. Die Entities selbst erklärt der Artikel zur Beleuchtung in der Source Engine.

Nebel mit env_fog_controller

KeyvalueStandardWirkung
Fog Enable (fogenable)Noschaltet den Nebel ein, ein neues Entity zeigt sonst nichts
Fog Start (fogstart)500Entfernung, ab der der Nebel beginnt
Fog End (fogend)2000Entfernung, ab der die größte Dichte erreicht ist
Fog Max Density (fogmaxdensity)1größte Dichte von 0 bis 1
Primary Fog Color (fogcolor)255 255 255Nebelfarbe
Far Z Clip Plane (farz)-1Entfernung, hinter der nichts mehr gezeichnet wird. -1 bedeutet aus

Nebel allein spart keine Leistung, er färbt entfernte Flächen nur ein. Den Gewinn bringt Far Z: Was dahinter liegt, wird nicht gezeichnet, und VVIS liest den Wert aus dem env_fog_controller und begrenzt damit die Sichtbarkeit schon beim Compile. Laut FGD soll Far Z größer sein als Fog End, und Fog Max Density soll auf 1 stehen, weil sonst die Leere dahinter sichtbar wird. Weitere Stellschrauben stehen in GMod-Map optimieren.

Weil der Himmel vom Nebel ausgenommen ist, heben sich voll eingenebelte Gebäude als einfarbige Flächen von ihm ab. Wähle die Nebelfarbe deshalb passend zum Horizont.

Die 3D-Skybox hat eigenen Nebel in der sky_camera, mit den gleichen Feldern für Farbe, Start, Ende und Dichte. Die Engine rechnet Start und Ende dort selbst auf den Maßstab der Skybox um, du trägst also dieselben Zahlen ein wie im env_fog_controller. Gibt es mehrere Controller, hat laut FGD der mit dem Flag „Master“ Vorrang. Unterschiedlichen Nebel pro Bereich schaltet in GMod ein fog_volume.

Farbstimmung mit color_correction

Eine Color Correction ist eine Nachschlagetabelle, die jede Farbe des fertigen Bilds durch eine andere ersetzt. Sie liegt als .raw-Datei vor, rund 96 KB groß, und entsteht im Spiel:

  1. Setze ein color_correction in die Map und lass „Lookup Table Filename“ zunächst leer.
  2. Lade die Map, aktiviere sv_cheats 1 und gib colorcorrectionui ein.
  3. Lege im Werkzeugfenster Filter an und stelle sie ein. Bleib dabei in Reichweite des Entity.
  4. Speichere das Ergebnis als .raw und lege die Datei unter materials/colorcorrection/ ab.
  5. Trage den Pfad im Entity ein, kompiliere neu und packe die Datei in die BSP.

Der Dateiname (filename) ist relativ zum Spielordner und enthält die Endung, zum Beispiel materials/colorcorrection/mymap.raw. Die Whitelist von gmad lässt .raw-Dateien nur unter materials/colorcorrection/ zu.

„Lookup Falloff Start Distance“ steht standardmäßig auf 0 und „Lookup Falloff End Distance“ auf 200. Die Korrektur wirkt damit nur im Umkreis von 200 Units um das Entity und nimmt nach außen ab. Für die ganze Map trägst du in beiden Feldern -1 ein. „Maximum Weight“ regelt die Stärke, und mit Enable und Disable schaltest du zwischen Stimmungen um.

HDR-Belichtung mit env_tonemap_controller

In einer HDR-Map passt die Engine die Belichtung laufend an: Helle Szenen dunkelt sie ab, dunkle hellt sie auf. Das env_tonemap_controller setzt dafür Grenzen. In der FGD von GMod hat es dafür keine Keyvalues, du steuerst es über Inputs, am einfachsten aus einem logic_auto:

My Output    Target Entity   Target Input         Parameter
OnMapSpawn   tonemap         SetAutoExposureMin   0.8
OnMapSpawn   tonemap         SetAutoExposureMax   1.6
OnMapSpawn   tonemap         SetBloomScale        0.5

Die Zahlen sind Beispielwerte. SetAutoExposureMin begrenzt, wie stark eine helle Szene abgedunkelt wird, SetAutoExposureMax, wie stark eine dunkle aufgehellt wird. Im Source SDK sind die Ausgangswerte 0.5 und 2. SetBloomScale regelt das Überstrahlen heller Flächen. SetTonemapRate soll das Tempo der Anpassung setzen, wirkte laut Valve Developer Community in Engine-Zweigen vor CS:GO aber nur im Einzelspieler. Prüfe es deshalb auf einem Server. Die Inputs SetTonemapScale und BlendTonemapScale sind in der FGD von GMod auskommentiert, mit dem Hinweis, dass sie nie funktioniert haben. Den Aufbau von Outputs zeigt Hammer Inputs und Outputs.

Typische Probleme

SymptomUrsacheLösung
Himmel schwarz oder mit pink-schwarzem KaromusterName vertippt, Dateien nicht gepackt oder Kürzel falschKonsole auf Unable to load sky prüfen, sv_skyname kontrollieren, packen
Himmel passt nicht zur 3D-SkyboxNebel der sky_camera weicht vom env_fog_controller abFarbe, Start, Ende und Dichte angleichen
Geometrie wird in der Ferne sichtbar abgeschnittenFar Z kleiner als Fog End, Dichte unter 1 oder Nebel ausFar Z über Fog End, Dichte auf 1, „Fog Enable“ auf Yes
Color Correction wirkt nur an einer StelleFalloff steht noch auf 0 und 200beide Werte auf -1 setzen
Color Correction fehlt bei Spielern.raw nicht gepackt, Pfad ohne Endung, oder beim Spieler abgeschaltetPfad prüfen, packen, mit mat_colorcorrection 0 und 1 gegentesten

Color Correction und HDR sind Grafikoptionen, und ein Server kann Color Correction über sv_allow_color_correction sperren. Die Map muss also auch ohne beides lesbar sein. Ob Sky-Materialien und .raw im Pakfile liegen, siehst du im Map Scanner, der die eingebetteten Dateien auflistet.

Häufige Fragen

Kann eine Map mehrere Himmel haben?

Nein. Der Sky-Name ist eine Eigenschaft der ganzen Map und gilt überall, wo tools/toolsskybox sichtbar ist. Unterschiedliche Stimmungen pro Bereich erreichst du über Nebel, Color Correction und Licht.

Wie groß sollten Sky-Texturen sein?

Der Standardhimmel sky_day01_01 nutzt 512 × 512 Pixel für die Oberseite und 512 × 256 für die Seiten. Größere Texturen sind schärfer, zählen bei sechs Seiten aber sechsfach für die Dateigröße der Map.

Warum sieht meine Map bei anderen Spielern anders aus?

Meist wegen der Grafikoptionen. Mit HDR greifen HDR-Lightmaps, Tonemapping und der HDR-Himmel, ohne HDR die LDR-Fassung. Ist Color Correction abgeschaltet, fehlt deine Farbstimmung. Teste beide Varianten, bevor du veröffentlichst.