Quake 3 Radiant – Shader mit Q3ASE: Interface
Last Updated on 31. January 2023 by Victor Karp
In diesem Tutorial zeige ich euch, wie ihr mit dem Tool Q3ASE (Quake 3 Arena Shader Editor) bestehende Shader öffnen, bearbeiten und betrachten und neue Shader anlegen und speichern könnt. Ihr erhaltet außerdem einen sehr kurzen Überblick über viele Shaderfunktionen.
Bevor es überhaupt losgeht, braucht ihr das Tool. Ihr könnt es von Fileplanet herunterladen.
Sollte der Link offline sein oder das Programm beschwert sich über eine fehlende DLL, könnt ihr beides auch von meiner Website herunterladen (Link defekt, wird in Kürze behoben).
Entpackt den Inhalt der ZIP Archive in einen Ordner. Ich habe ihn “q3ase” genannt und in mein Quake III Verzeichnis verschoben. Ihr könnt den Ordner aber auch an einen beliebigen anderen Ort verschieben. Führt dann die q3ase.exe darin aus.
Q3ASE – Konfiguration und Aufbau
Das Programm wird fragen, ob es 32bit Farbtiefe benutzen soll. Das bestätigt ihr. Als nächstes sollt ihr alle pk3 Dateien angeben, die nach Texturen und Shadern durchsucht werden. Navigiert in das baseq3 Verzeichnis eurer Quake III Installation und markiert mit gehaltener [Strg]-Taste nacheinander die Dateien pak0.pk3, pak2.pk3, mapmedia.pk3, common-spog.pk3 und common-q3map2.pk3. Zusätzlich könnt ihr alle eigenen pk3s auswählen (sofern vorhanden), auf deren Texturen oder Shader ihr zugreifen wollt. Klickt unten auf Öffnen, um eure Wahl zu bestätigen.
Die anderen nummerierten pk3 Dateien benötigen wir nicht, weil sie keine neuen Texturen oder Scripts enthalten.
HINWEIS: Sollten einige dieser Dateien fehlen, lest euch Tutorial 2 durch und installiert die dort aufgelisteten Patches sowie die Quake 3 Extras.
Außerdem sollten wir zusätzlich angeben, dass das baseq3 Verzeichnis durchsucht wird. Klickt dazu im Hauptfenster des Programms oben links auf File -> Edit Pakfiles -> Add Directory, sucht den baseq3 Ordner und schließt alle Fenster mit OK.
HINWEIS: Der baseq3 Ordner muss zusätzlich zu den pk3 Dateien angegeben werden, da sich in dessen Unterordnern textures und scripts ebenfalls Spieldateien befinden, die sonst vom Programm nicht gefunden werden würden.
Jetzt solltet ihr noch oben auf Options klicken und das Häkchen vor Strict .shader syntax entfernen. Dadurch kann Q3ASE auch Shader mit neueren Shaderbefehlen laden, die das Programm nicht kennt.
Wir brauchen außerdem ein Hintergrundbild für die Texturvorschau, da sonst in den meisten Fällen keine richtige Vorschau möglich ist. Klickt deshalb auf Preview, dann auf Background. Klickt auf den Select Button neben Image. Ich benutze immer die Textur base_wall/concrete_dark.jpg. Wenn ihr nach Texturen suchen wollt, gebt unten in das Feld Prefix zuerst das Hauptverzeichnis an, in dem ihr suchen wollt. In fast allen Fällen ist das textures. Mit einem Klick auf Filter werden alle Texturen gesucht, die mit der angegebenen Zeichenfolge beginnen. Filtert ihr also beispielsweise mit dem Suchbegriff textures/base_w, werden alle base_wall texturen herausgesucht. Für eine Vorschau der Textur solltet ihr unbedingt das Feld Preview ankreuzen. Nachdem ihr eure Wahl getroffen habt, schließt ihr das Fenster mit dem OK Button.
Ihr seht jetzt zwei Fenster. Ein kleines quadratisches, das ist die Texturvorschau, und das Hauptfenster, in dem lediglich File: <unsaved> zu lesen ist. Klickt auf das kleine [+] davor. Der Eintrag erweitert sich. Ihr seht ein zweites [+], das ihr ebenfalls aufblättern solltet.
Beim obersten Eintrag, dem türkisen Icon, handelt es sich um den Namen der Shaderdatei. Eine Shaderdatei ist, wie bereits in Tutorial 41 erklärt, nichts anderes als ein Textdokument mit der Endung .shader. Eine Shaderdatei kann beliebig viele Shader beinhalten, die alle für eine einzelne Textur stehen. Ein einzelner Shader wird durch ein dunkelblaues Icon symbolisiert. Um es symbolisch zu vereinfachen: Eine Shaderdatei ist wie ein Kochbuch mit vielen Rezepten (Shadern), die alle einen einzigartigen Namen haben und andere Zutaten (Inhalt des Shaders) besitzen.
Jeder Shader besteht aus zwei Bereichen. Den General Keywords (grünes Icon) und den Texturebenen (rotes Icon). Im ersten Bereich werden allgemeine Informationen angegeben (z.B. Kollision, Wasser, Lava, Leuchtstärke usw.). Im zweiten Bereich, den Texturebenen, wird das Aussehen der Textur definiert.
Einen Shader öffnen
Lasst und den Shader öffnen, den ich im vorigen Tutorial als Beispiel verwendet habe. Klickt oben auf File -> Open und öffnet scripts/base_support.shader. Klappt zuerst die Shaderdatei selbst mit dem [+] auf und danach den Shader x_support2. Die leere Shaderdatei, den wir eben aufgeklappt haben, könnt ihr wieder zumachen.
Was ihr jetzt seht, entspricht dem Shader aus Tutorial 41. Allerdings gibt es drei Unterschiede:
- die unnötige Zeile “blendFunc GL_ONE GL_ZERO” wurde vom Programm automatisch entfernt
- in der Lightmap Stage wurde die Zeile “tcGen lightmap” hinzugefügt. Das ist eigentlich unnötig, weil dieser Befehl nur in speziellen Fällen eine Funktion hat – ansonsten tut er nichts. Man kann ihn also löschen, wenn man ihn nicht benötigt, er kann aber auch nichts kaputt machen, wenn er stehen bleibt. Er wird jedoch so oder so immer wieder vom Programm in den Lightmap Stages hinzugefügt, wenn man einen Shader öffnet
- in den General Keywords steht statt “cull none” jetzt “cull disable”. Bei diesem Befehl sind beide Schreibweisen gültig, sie bewirken dasselbe
Die Texturvorschau
Das Vorschaufenster ist eins der nützlichsten Features von Q3ASE, denn es erlaubt euch, eure Änderungen an einem Shader in Echtzeit sehen zu können.
Damit ihr im Vorschaufenster etwas sehen könnt, müsst ihr in der Liste rechts einen Shader angeklickt haben. Wenn ihr alles wie oben beschrieben gemacht habt, dürftet ihr bereits die graue Metallgittertextur sehen.
Drückt ihr [Strg]+[A], seht ihr die einzelnen Ebenen einer Textur schräg von der Seite. Die Ebenen funktionieren wie in Photoshop. Sie überdecken oder manipulieren sich, abhängig von ihrer Reihenfolge. Je weiter links im Bild eine Ebene ist, desto weiter oben ist sie in der Hierarchie. In dem großen Hauptfenster von Q3ASE ist die Darstellung genau andersherum. Dort ist die hierarchisch unterste Ebene ganz oben in der Liste, die oberste Schicht kommt zuletzt.
Mit [Strg]+[F] könnt ihr wieder zur flachen Texturdarstellung zurückschalten.
Das Vorschaufenster lässt sich durch ziehen an den Rändern auch in seiner Größe anpassen. Habt ihr eine nicht quadratische Textur geladen, solltet ihr einmal oben auf Preview -> Autosize klicken, um die Seitenverhältnisse automatisch richtig einstellen zu lassen.
Klickt ihr auf Preview -> Geometry -> Object, könnt ihr eine Vorschauform auswählen, auf die die Textur projiziert werden soll. Mit der linken Maustaste lässt sich die Ansicht verschieben, die rechte Maustaste dreht sie, mit [Strg] + linke Maustaster lässt sich zoomen.
Die General Keywords
Klickt mit der rechten Maustaste im Hauptfenster auf General Keywords. Es erscheint ein Klappmenü, das eine Fülle an Optionen bietet. Ich habe bisher nur einen gewissen Teil davon jemals davon brauchen können und führe daher nur die wichtigsten Einträge auf.
- General
- DeformVertexes
Dieser Unterpunkt beherbergt Shaderbefehle, mit denen Verformungen von Oberflächen möglich sind. Damit lassen sich z.B. Wasserwellen realisieren - cull
Bereits oben erklärt. Definiert, von welchen Seiten (Vorderseite / Rückseite / beide) eine Textur sichtbar ist - tessSize
Damit können Oberflächen regelmäßig untereilt werden. Kann man gut bei Wasserwellen gebrauchen - sort
Braucht man selten bis nie. Ist manchmal nützlich, wenn Texturen in der falschen Reihenfolge dargestellt werden (z.B. ein Objekt, das klar zu erkennen ist, obwohl es hinter einer dreckigen Glasscheibe ist) - fogparms
Hiermit lässt sich Nebel konfigurieren - skyparms
Ist für Skyboxen relevant. Die Skyboxbilder und Wolkenhöhe (falls vorhanden) können angegeben werden - Set nopicmip
Sollte man angeben, wenn eine Textur unabhängig von den Textureinstellungen im Spiel immer mit maximalen Details angezeigt werden soll. Braucht man oft bei Texturen mit Transparenz, wie etwa dem Metallgitter, das wir bereits geladen haben - Toggle polygonoffset
Braucht man für Decals, verhindert z-Fighting - Toggle portal
Wird bei Spiegeln und Portalen verwendet
- DeformVertexes
- qer_
- editorimage
Gibt an, welches Bild die Textur im Editor verwenden soll - Toggle qer_nocarve
Wird dieser Befehl benutzt, werden Brushes nicht von der CSG Subtract Funktion im Editor beeinflusst. Weil man diese Funktion sowieso nicht unüberlegt benutzen sollte und nur selten braucht, wird man diesen Befehl vermutlich nie verwenden - qer_trans
Wird benötigt, wenn man möchte, dass die Textur im Editor mit einem gewählten Transparenzgrad angezeigt wird. Viele common Texturen benutzen diesen Befehl
- editorimage
- q3map_
- lightimage
Das Bild, dessen Durchschnittsfarbe als Lichtfarbe verwendet werden soll, wenn die Textur leuchtet - lightsubdivide
Licht abgebende Texturen leuchten nicht an jedem Punkt ihrer Oberfläche, sondern in regelmäßigen Abständen. Dieser Befehl gibt die Distanz zwischen diesen Punkten in Units an - surfacelight
Gibt an, wie viel Licht eine Textur ausstrahlt
- lightimage
- Edit SurfaceParm
Hier lassen sich viele Angaben zur Beschaffenheit der Textur machen
Die Texture Stages
Ihr könnt auf zwei Arten mit ihnen interagieren. Doppelklick und Rechtsklick. Fangen wir mit dem Doppelklick an. Es öffnet sich ein Menü.
Klickt ihr auf den Texture Button, könnt ihr die Textur auswählen, die diese Stage verwenden soll. Der Filter funktioniert wie weiter oben schon beschrieben – benutzt ihn, das spart enorm viel Zeit. Mit einem Häkchen in der Box mit dem Titel Clamp könnt ihr dafür sorgen, dass eine Textur nur ein einziges Mal dargestellt und nicht wiederholt wird. Das braucht man manchmal bei Texturen, die sich drehen oder ihre Größe verändern.
Bei einem Rechtsklick auf eine Texturestage gibt es wieder eine Reihe von Optionen, hier die Wichtigsten:
- Hide in preview
Blendet die Texture Stage im Vorschaufenster komplett aus - Cut
Schneidet die Stage aus und legt sie in den Zwischenspeicher. Gibt es nur noch eine Stage und man klickt auf Cut, bleibt immer eine komplett leere Texture Stage als Basis erhalten - Copy
Kopiert eine Stage - Paste (before this / after this)
Fügt eine Stage aus dem Zwischenspeicher vor/hinter der gewählten Stage ein - New Stage (before this /after this)
Erzeugt eine neue, leere Stage vor/hinter der gewählten Stage - Move Stage (Up / Down)
Verschiebt die Stage in ihrer Reihenfolge. Dabei ist unbedingt der Hinweis aus dem Absatz über die Texturvorschau zu beachten: Listenreihenfolge und tatsächliche Reihenfolge der Stages sind umgekehrt! - Edit Texture Source
Öffnet das gleiche Fenster wie ein Doppelklick auf die Stage - Edit RGB Source
Bietet Zugriff auf diverse Farbwerteinstellungen für die Stage. Über das Feld waveform etwa lassen sich flackernde oder pulsierende Lampentexturen realisieren - Edit Alpha Source
Hier lassen sich Einstellungen vornehmen, die den Alphakanal einer Textur betreffen - Add tcMod
Beinhaltet eine große Auswahl an Funktionen, mit denen sich Texturen in Bewegung versetzen oder verformen lassen - blendfunc
Blendingoptionen - alphafunc
Verschiedene Optionen, wie mit dem Alphakanal einer Textur umzugehen ist - tcGen
- lightmap
Macht eine Stage zu einer Lightmap Stage - environment
Macht eine Stage zu einer Environment Stage. Solche Stages braucht man für Fake-Reflexionen für Oberflächen wie Metall und Wasser
- lightmap
- Misc
- toggle detail
Macht eine Stage zu einer Detailstage. Wird für spezielle Detailtexturen benötigt
- toggle detail
- Edit unparsed data
Lässt euch Shaderbefehle bearbeiten, die q3ase im Shader gefunden hat, aber nicht kennt
Shader, Shaderdateien und Tipps zur Handhabung
Noch mal zur Erinnerung: bei den General Keywords und den Texture Stages handelt es sich um Komponenten eines einzelnen Shaders, der wiederum für eine Textur steht. Der Name des Shaders (dunkelblaues Icon) ist gleichzeitig Pfad und Name der Textur, die im Editor ankommt. Klickt ihr mit der rechten Maustaste auf einen Shader, werdet ihr Optionen sehen, die denen der Texture Stage ähneln.
Wollt ihr euren Shader speichern, müsst ihr mit der rechten Maustaste auf die Shaderdatei (türkises Icon) klicken und Save As wählen. Gebt einen Namen an und speichert die Datei in euer baseq3/scripts Verzeichnis. Wie bereits in Tutorial 41 erwähnt, muss der Name eures Shaders in die shaderlist.txt im selben Ordner eingetragen werden.
Für das Arbeiten mit Q3ASE empfiehlt es sich sehr, die Shaderdatei, die man bearbeiten möchte, im Scripts Verzeichnis abzulegen und sie nicht aus einer pk3 Datei zu laden. Denn das Programm kann zwar pk3 Dateien öffnen und auf deren Inhalt zugreifen, aber keine Dateien in ihnen speichern. Verschiebt eure .shader Datei also erst in eine pk3, wenn ihr eure Map und alle benutzten Dateien bündeln wollt, um sie z.B. jemand anderem zum Testen zu schicken oder sie zu releasen. Ansonsten müsst ihr nach jeder Änderung im Shader erstmal Dateien hin- und her kopieren.
Besuche die Quake 3 Mapping Tutorial Hauptseite für weitere Tutorials.