Nachdem ich mittlerweile so viele Anfragen zu dem Thema bekommen habe, dass das Schreiben eines Tuts wohl weniger Arbeit macht als das beantworten der Fragen: Hier ist euer Overlaytextur-Tutorial, mit dem wir dann bald alle solch schöne Effekte hinbekommen wie unser Freund Relic25 in seinem Level ns_bast:
Unser Ziel ist es also, ähnlich schicke Computerkonsolen, Monitore und Lichter zu erstellen, die bei der „klassischen“ Methode mit Texlights bekanntermaßen komplett fullbright beleuchtet werden - was nicht gerade besonders gut aussieht, verglichen mit dem Bildchen da oben.
Wofür andere Engines Shader nutzen, muss der zurückgebliebene Mapper für Half-Life tricksen. Als Beispiel soll uns dieser Monitor aus Natural Selection dienen:
Prinzipiell funktioniert das ganze so: Es gibt von diesem Monitor (oder jedem anderen Objekt um das wir uns bemühen) zwei Texturen. Eine, die normale, seht ihr oben. Die zweite, die Overlay-Textur sieht ungefähr so aus:
Das geschulte Auge erkennt sofort: Die Overlaytextur unterscheidet sich von der normalen dadurch, dass alles, was man an so einem Bildschirm gerne am Leuchten hätte auch vorhanden ist, alles andere (Rahmen usw) jedoch ausgespart ist - an diesen Stellen ist nun nur noch Schwarz.
Und was soll das ganze? Nun, der Rendermode „Additive“, den HL uns (unter anderem) für Brushentities zur verfügung stellt funktioniert folgendermaßen: Wenn die Engine ein Frame rendert, wird der Farbwert eines additiv gerenderten Pixels auf den Farbwert des dahinter liegenden Pixels addiert. Wenn wir also jetzt einen große blauen Block hätten (Farbwert RGB: 0 0 255) und ihn additiv vor einem roten Hintergrund (Farbwert RGB: 255 0 0) rendern ließen, käme also durch die Farbaddition der Wert 255 0 255 raus. Demzufolge sind schwarze additiv gerenderte Pixel durchsichtig; Wenn man den Farbwert von Schwarz (RGB 0 0 0) auf irgend etwas anderes addiert passiert nicht viel.
Wir nutzen diesen Rendermode für unsere Effekte wie folgt: Vor unserem Beispielbrildschirm erstellen wir ein 1 Unit (Kleinstmögliche Größe) dickes Brushentity (Zu empfehlen wäre ein func_illusionary). Seiten- und Rückseite dieses Entities verpassen wir die Null-Textur, um Polygone zu sparen und die Seiten nebenher noch unsichtbar zu machen, während die Vorderseite die zum Hintergrund passende Overlay-textur bekommt. Das sieht dann ungefähr so aus:
Nun schieben wir das Entity so nah wie möglich an unseren Bildschirm heran. Nicht vergessen dem Entitie den Rendermode Additive zu verpassen, und mit dem FX Amount die Transparenz und damit die gewünschte Leuchtkraft zu regulieren. Kompilieren, fertig!
Wenn jetzt jemand in der kompilierten Map den Monitor betrachtet, wird er den Bildschirm durch das Overlay-Entitie hindurch sehen; Farbwerte der Pixel des Overlays werden auf die Werte der Pixel des Hintergrund-Bildschirms addiert. Da die schwarzen Flächen faktisch nicht sichtbar sind, ist das Ergebnis ein glaubwürdig leuchtender Monitor, bei dem wirklich nur das strahlt was auch soll… hässliche Fullbright-Textlights adé.
Abschließend noch ein paar Tipps: