Cubemaps in GMod: lila-schwarze Reflexionen beheben
Lila-schwarze oder falsche Reflexionen in deiner GMod-Map? So platzierst du env_cubemap, baust Cubemaps für LDR und HDR und behältst sie beim Packen.
Lila-schwarz karierte oder falsche Reflexionen entstehen, wenn spiegelnde Materialien keine passenden Cubemaps finden. Entweder wurden sie nie gebaut, nur für einen der beiden Beleuchtungsmodi gebaut, oder sie sind nach einer Änderung an der BSP verloren gegangen. Platziere env_cubemap-Entities, lade die Map im Spiel und führe buildcubemaps getrennt für LDR und HDR aus. Danach lädst du die Map neu.
Was Cubemaps sind und warum sie fehlen können
Eine Cubemap besteht aus sechs Bildern der Umgebung, aufgenommen von einem festen Punkt. Materialien mit Spiegelanteil nutzen sie als vorberechnete Reflexion. Das ist keine Echtzeitspiegelung. Beim Kompilieren weist VBSP jeder spiegelnden Brush-Fläche eine env_cubemap zu, standardmäßig die nächstgelegene. Models nutzen die Cubemap, die ihnen am nächsten liegt.
Beim Kompilieren entstehen nur Platzhalter. Die eigentlichen Bilder nimmst du anschließend im Spiel auf, und die Engine schreibt sie in das Pakfile der BSP. Solange das nicht passiert ist, spiegeln die Flächen ersatzweise den Himmel. In Innenräumen wirkt das zu hell und oft bläulich. Wird auch dieser Ersatz nicht gefunden, erscheint das lila-schwarze Schachbrett in der Spiegelung. Gibt es die Cubemaps nur für einen der beiden Modi, sind die Reflexionen im anderen laut Valve Developer Community zu hell oder leer.
Mit fehlenden Materialien hat das nichts zu tun. Die Fläche selbst ist korrekt texturiert, nur die Reflexion ist kaputt. Für echte pink-schwarze Flächen und ERROR-Models gibt es den Artikel Fehlende Texturen und ERROR-Models beheben.
env_cubemap richtig platzieren
- Eine pro Raum oder Lichtstimmung. Jeder Bereich mit eigener Beleuchtung oder eigener Wandfarbe braucht mindestens eine
env_cubemap. In langen Fluren setzt du mehrere, vor allem an Übergängen. - Auf Augenhöhe. Die Reflexion soll zu dem passen, was ein Spieler sieht. Setze die Entity deshalb ungefähr in Kopfhöhe über dem Boden.
- Mit Abstand zu Wänden. Eine
env_cubemapin einem Brush oder direkt an einer Wand nimmt ein unbrauchbares Bild auf. - Flächen gezielt zuweisen. Über die Eigenschaft „Brush faces“ legst du fest, welche Flächen genau diese Cubemap verwenden. Das hilft bei spiegelnden Böden und Glas.
- Nicht übertreiben. Jede Cubemap vergrößert die BSP, bei HDR-Maps zusätzlich um die Bilder für den zweiten Modus. Viele Entities auf engem Raum bringen keinen sichtbaren Gewinn.
Wie stark eine Fläche spiegelt, bestimmt ihr Material. Die Grundlagen zu Licht und HDR stehen im Artikel zur Beleuchtung in der Source Engine.
Cubemaps bauen: LDR und HDR getrennt
Zwei Voraussetzungen: Die BSP stammt aus dem endgültigen Compile, und sie liegt als normale, beschreibbare Datei im Ordner garrysmod/maps. Für eine nicht beschreibbare BSP kennt die Engine eine eigene Konsolenmeldung (is not writable). Eine Map, die nur in einem Addon-Archiv steckt, ist ebenfalls keine solche normale Datei.
Ist die Map mit HDR kompiliert, brauchst du zwei Durchgänge:
- Starte das Spiel und lade die Map.
- Gib
mat_specular 0ein. So landen keine vorhandenen, fehlerhaften Reflexionen in den neuen Bildern. - Gib
mat_hdr_level 0ein und lade die Map neu, zum Beispiel mitmap <mapname>. - Gib
buildcubemapsein und warte, bis der Vorgang abgeschlossen ist. Das Bild springt dabei kurz durch alle Aufnahmepositionen. - Gib
mat_hdr_level 2ein und lade die Map erneut. Für den HDR-Durchgang empfiehlt die Valve Developer Community zusätzlichbuilding_cubemaps 1, damit die Belichtung für alle Bilder gleich bleibt. - Gib noch einmal
buildcubemapsein. - Stelle
mat_specular 1wieder ein, lade die Map neu und prüfe die Reflexionen.
Bei einer Map ohne HDR reicht ein Durchgang. Die Schritte 5 und 6 entfallen dann.
Bekannte Stolpersteine
| Symptom | Ursache | Lösung |
|---|---|---|
| Nach dem Bauen sieht alles aus wie vorher | Die Map wurde nicht neu geladen | Map neu laden oder das Spiel neu starten |
| Reflexionen stimmen in einem Modus, im anderen sind sie zu hell oder leer | Cubemaps wurden nur für LDR oder nur für HDR gebaut | Den fehlenden Durchgang nachholen |
| Nach dem Umbenennen der BSP fehlen die Cubemap-Reflexionen auf Models, Props und Waffen | Für sie sucht die Engine die Cubemaps im Pakfile in einem Ordner mit dem Dateinamen der BSP; Brush-Flächen behalten ihre Reflexionen | Unter dem endgültigen Namen kompilieren und dort bauen |
| Innenflächen spiegeln den Himmel | Cubemaps nie gebaut oder durch einen neuen Compile verworfen | Nach jedem endgültigen Compile neu bauen |
| Reflexion zeigt Farben eines anderen Raums | Die Fläche nutzt eine env_cubemap hinter der Wand | Eigene Entity im Raum setzen oder Flächen zuweisen |
buildcubemaps läuft, aber nichts bleibt erhalten | Die BSP ist schreibgeschützt oder liegt nicht als lose Datei in garrysmod/maps | Schreibschutz entfernen und die BSP nach garrysmod/maps legen |
| In den neuen Reflexionen sind der Platzhalter oder alte Spiegelungen zu sehen | Beim Bauen waren die Spiegelungen noch eingeschaltet | Mit mat_specular 0 neu bauen |
Was nach dem Packen zu beachten ist
Die Cubemaps liegen als Dateien im Pakfile der BSP, in einem Ordner unterhalb von materials/maps/, der den Namen der Map trägt. Daraus ergeben sich drei Regeln.
Jeder neue Compile verwirft sie. VBSP schreibt die BSP komplett neu. Cubemaps baust du deshalb immer am Ende und nach jedem endgültigen Compile erneut.
Der Name muss stehen. Lege den endgültigen Dateinamen fest, bevor du Cubemaps baust. Benennst du die BSP nachträglich um, zeigt die Engine laut Valve Developer Community auf Models, Props und Waffen keine Cubemaps mehr an, weil sie sie in einem Ordner mit dem Dateinamen der BSP sucht. Die Brush-Flächen der Map sind nicht betroffen.
Nach jeder Bearbeitung der BSP prüfen. Baue Cubemaps erst nach dem endgültigen Compile und komprimiere die BSP erst ganz am Schluss, denn laut Valve Developer Community stürzt das Spiel bei buildcubemaps auf einer komprimierten BSP ab. Ob du Custom Content vor oder nach den Cubemaps packst, ist weniger wichtig als die Kontrolle danach. Jedes Werkzeug, das das Pakfile neu schreibt, kann Einträge verändern. Lade die fertige Datei deshalb noch einmal im Spiel und prüfe die Reflexionen in beiden Modi.
Der Map Scanner listet eingebettete Lua- und Asset-Dateien im Pakfile auf. Ob die Reflexionen wirklich stimmen, siehst du aber nur im Spiel. Der Blick auf die Spiegelungen gehört deshalb zur Prüfung vor dem Release.
Häufige Fragen
Warum sind die Reflexionen auf meiner Map lila-schwarz?
Die spiegelnden Materialien finden keine passende Cubemap. Eine typische Ursache sind Cubemaps, die ein Werkzeug aus dem Pakfile entfernt hat, sodass nicht einmal der Ersatz gefunden wird. Eine BSP, die nach dem Bauen umbenannt wurde, ist ein anderer Fall: Laut Valve Developer Community fehlen dann die Cubemap-Reflexionen auf Models, Props und Waffen, während Brush-Flächen ihre behalten. Baue die Cubemaps unter dem endgültigen Mapnamen für LDR und HDR neu.
Muss ich Cubemaps nach jedem Compile neu bauen?
Ja. Jeder Compile erzeugt eine neue BSP ohne aufgenommene Cubemaps. Während der Arbeit kannst du darauf verzichten, vor einem Release ist es Pflicht.
Wie viele env_cubemap braucht eine Map?
So viele, dass jeder Raum und jede deutlich andere Lichtstimmung eine eigene hat. Eine feste Zahl gibt es nicht. Mehr Entities bedeuten eine größere Datei, deshalb lohnt sich ein sparsamer, gezielter Einsatz.
Was kann ich als Spieler gegen lila-schwarze Reflexionen tun?
Auf einer fremden Map kannst du die Cubemaps nicht reparieren. Mit mat_specular 0 schaltest du die Spiegelungen ab, wodurch auch das Schachbrett verschwindet. Die saubere Lösung ist eine korrigierte Version der Map.