Fehler beheben

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_cubemap in 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:

  1. Starte das Spiel und lade die Map.
  2. Gib mat_specular 0 ein. So landen keine vorhandenen, fehlerhaften Reflexionen in den neuen Bildern.
  3. Gib mat_hdr_level 0 ein und lade die Map neu, zum Beispiel mit map <mapname>.
  4. Gib buildcubemaps ein und warte, bis der Vorgang abgeschlossen ist. Das Bild springt dabei kurz durch alle Aufnahmepositionen.
  5. Gib mat_hdr_level 2 ein und lade die Map erneut. Für den HDR-Durchgang empfiehlt die Valve Developer Community zusätzlich building_cubemaps 1, damit die Belichtung für alle Bilder gleich bleibt.
  6. Gib noch einmal buildcubemaps ein.
  7. Stelle mat_specular 1 wieder 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

SymptomUrsacheLösung
Nach dem Bauen sieht alles aus wie vorherDie Map wurde nicht neu geladenMap neu laden oder das Spiel neu starten
Reflexionen stimmen in einem Modus, im anderen sind sie zu hell oder leerCubemaps wurden nur für LDR oder nur für HDR gebautDen fehlenden Durchgang nachholen
Nach dem Umbenennen der BSP fehlen die Cubemap-Reflexionen auf Models, Props und WaffenFür sie sucht die Engine die Cubemaps im Pakfile in einem Ordner mit dem Dateinamen der BSP; Brush-Flächen behalten ihre ReflexionenUnter dem endgültigen Namen kompilieren und dort bauen
Innenflächen spiegeln den HimmelCubemaps nie gebaut oder durch einen neuen Compile verworfenNach jedem endgültigen Compile neu bauen
Reflexion zeigt Farben eines anderen RaumsDie Fläche nutzt eine env_cubemap hinter der WandEigene Entity im Raum setzen oder Flächen zuweisen
buildcubemaps läuft, aber nichts bleibt erhaltenDie BSP ist schreibgeschützt oder liegt nicht als lose Datei in garrysmod/mapsSchreibschutz entfernen und die BSP nach garrysmod/maps legen
In den neuen Reflexionen sind der Platzhalter oder alte Spiegelungen zu sehenBeim Bauen waren die Spiegelungen noch eingeschaltetMit 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.