• 11Minuten
blank

Shader werden, vor allem bei 2D-Spielen, überwiegend für Post-Processing-Effekte eingesetzt. Im zweiten Teil gibt es mehrere Praxisbeispiele dafür und es wird gezeigt, wie man es in GameMaker Studio 2 implementiert. Doch vorher müssen wir ein paar Umwege gehen.

Was versteht man unter Post-Processing?

Post-Processing-Effekte werden normalerweise final über den ganzen Bildschirm gelegt. Das heißt, alles, was der Betrachter sehen kann, wird vor der Ausgabe auf irgendeine Weise manipuliert. Diese Manipulation wird normaler eingesetzt, um das gesamte Aussehen in eine bestimmte, optische Richtung zu verschieben. Die Art, wie man das machen kann, ist sehr vielfältig. Dabei kann es sein, dass solche Effekte permanent über das Spiel gelegt werden, oder nur für eine bestimmte Zeit sowie nur in bestimmten Räumen. Außerdem kann ein Post-Processing-Effekt sowohl statisch wie auch dynamisch sein.

Beispiele für Post-Processing-Effekte:

  • Intensivere oder schwächere Farben
  • Scharfzeichnung oder Weichzeichnung
  • Bewegungsunschärfe
  • Grundlegende Farbmanipulation, etwa eine andere Farbpalette
  • Änderung von Helligkeitswerten
  • Wettereffekte über dem Bildschirm
  • CRT-Effekt
  • chromatische Aberration
  • Bildstörungen
  • Bildschirm verwackeln
  • Textur-Überlagerung
  • Belichtung
  • Einfärben
  • verpixeln
  • u. v. m.

Anmerkung: Für die Beispiele habe ich zwei Sets gebastelt, weil die Shader, je nach Grafiken, unterschiedlich gut wirken. Das eine Set erinnert an ganz alte Sierra On-Line Spiele wie Police Quest I, sind aber selbst erstellte Grafiken. Die Links zu den Grafiken des zweiten Sets befinden sich am Ende des Tutorials.

Praktische Beispiele für Post-Processing-Effekte

Wenn man nicht so im Thema ist, fragt man sich natürlich, ob man die meisten Effekte nicht einfach so einspart, indem man entsprechende Grafiken erstellt. Oder anders gefragt: Warum macht man es nicht gleich richtig?

So simpel ist das leider nicht. Einerseits lassen sich bestimmte Effekte auf der Sprite-Ebene nur schwer oder überhaupt nicht umsetzen, andererseits spielt die Dynamik eine wichtige Rolle. D. h. es wäre bspw. schön, wenn der Spieler selbst einige Entscheidungen treffen könnte.

In AAA-Spielen werden Post-Processing-Shader gerne kontinental eingesetzt, etwa was den Farbraum bzw. die Farbintensität betrifft. Spiele in den USA haben meist knalligere Farben, in Europa hingegen sind sie etwas dezenter. Der Spieler kann diese Einstellungen i. d. R. ändern.

Ähnliches gilt für CRT- und Verpixelungseffekte. Es wäre schön, wenn der Spieler selbst entscheiden könnte, wie „retro“ das Resultat aussehen soll. Ein gutes Beispiel hierfür ist die GOG-Version von METAL SLUG.

Metal Slug Optionen
In METAL SLUG kann man in den Optionen bestimmen, wie viel Retro man haben möchte

Ein weiteres Beispiel wären Spielelemente. Die Spielfigur geht in einen dunklen Raum. Sie schaltet das Licht an. Das Licht ist rot. Später kann die Spielfigur die Glühbirne gegen eine andere Farbe austauschen. Für solche Effekte sind Shader ideal.

GameMaker Filter und Effekte

„Ja aber… GMS hat doch mittlerweile Filter und Effekte, die genau das tun? Warum sollte mich das interessieren?“

Oh, stimmt eigentlich. Das Tutorial ist hiermit zu Ende.

Natürlich nicht. Es ist richtig, dass es in GameMaker Studio mittlerweile tolle Post-Processing-Effekte gibt. Diese sind mehr als nur eine nette Spielerei. Man kann einige Parameter verstellen und sogar auf verschiedenen Ebenen diverse Effekte anwenden. So kann man etwa auf dem Hintergrund einen Wassereffekt anzeigen, während im Vordergrund etwas ganz anderes passiert.

GameMaker Studio Filter und Effekte
In GameMaker Studio gibt es mittlerweile umfangreiche Einstellungen für Filter und Effekte

Das Problem ist hier, dass man nur das nehmen kann, was angeboten wird und man es nur so verstellen darf, wie vorgegeben. Es fehlt also die Kontrolle. Und auch wenn die Liste dieser Effekte immer länger wird, kann man nicht erwarten, dass irgendwann genau der Shader erscheint, den man sich wünscht.

Bevor wir nun eigene Shader-Effekte umsetzen, muss ich noch zwei Themen ansprechen.

Die Kamera

Nur in den wenigsten Spielen basiert das ganze Level oder die ganze Spielwelt auf einen Raum, der lediglich so groß ist wie der Bildschirm. Dies trifft auf einfache Platformer, viele Rätselspiele und alte Adventure zu. Meistens jedoch scrollt der Bildschirm, etwa bei Shootern, Autorennen, Platformern, Beat ‚em up u. s. w.

Hierfür braucht man eine Kamera, die dem Spieler folgt. Zu dem Thema gibt es sehr viele gute Tutorials, etwa dieses hier: CAMERAS AND VIEWS

Oberflächen

Noch wesentlich wichtiger als das Kamera-Thema sind – bezogen auf Shader und Post-Processing – Oberflächen. Das englische Wort dafür sind „Surfaces“. Auch das ist ein Thema für ein großes Tutorial, aber ich werde versuchen, die wesentlichen Fakten kompakt zu vermitteln.

Im Prinzip basiert alles im GameMaker auf Oberflächen. Normalerweise bekommen wir das aber nicht mit. Die globale Variable lautet application_surface. Auf dieser Fläche wird das ganze Spiel gezeichnet. Wir können die application_surface aber manipulieren oder eigene Oberflächen erschaffen, um darauf zu zeichnen.

Shader Tutorial 2 Set 1 Ausgangsposition
Set 1 Ausgangsposition, bevor wir Post-Processing Shader einsetzen. Man erkennt, dass zwei der drei Figuren noch die Shader aus dem ersten Tutorial besitzen

Das ist sehr praktisch, gerade bei Post-Processing-Effekten. Wir erzeugen eine neue Oberfläche und manipulieren sie nach belieben. Allerdings gibt es ein paar Dinge zu beachten. So muss man wissen, dass Oberflächen flüchtig sind. Das bedeutet, dass sie aus dem Speicher verschwinden, wenn das Fenster geschlossen und anschließend wieder geöffnet wird.

Es gibt einige praktische Anwendungen für Oberflächen. Am häufigsten werden sie verwendet, um bestimmte Effekte zu erzeugen, bei denen der Spieler oft nicht einmal merkt, dass es ein Effekt ist. Zum Beispiel kann man darauf Blut oder tote Feinde zeichnen, indem man nur das Sprite ohne Objekt nutzt. Das hat den Vorteil, dass man viel Speicher spart, da Objekte zahlreiche Variablen besitzen, die meistens nicht gebraucht werden.

Shader Tutorial 2 Set 2 Ausgangsposition
Set 2 Ausgangsposition, ebenfalls mit drei Figuren und den entsprechenden Shadern

Der Nachteil an Oberflächen ist, dass sie Videospeicher verbrauchen. Wenn man sorglos damit umgeht oder schlecht programmiert, kann es zu einem Speicherüberlauf kommen, wodurch der Computer abstürzen kann.

Draw-GUI für Post-Processing

Wie eingangs beschrieben, wird bei Post-Processing-Effekten alles manipuliert. Aber was bedeutet „alles“? Nehmen wir an, wir hätten einen riesigen Raum von 300.000 x 300.000 Pixeln. Würden wir alles manipulieren, hätten wir sehr schnell ein Problem mit der Performance und/oder dem Videospeicher.

Zum Glück gibt es neben dem Draw- auch das Draw-GUI-Event. Das beschränkt sich auf die Bildschirmgröße. Wenn unser Spiel eine Auflösung von 1920×1080 Pixeln hat, dann wird im Draw-GUI-Event nur dieser Bereich berechnet, gezeichnet und angezeigt, unabhängig von der Raumgröße. Das ist sehr praktisch, schließlich behandelt Draw-GUI damit genau die Fläche, die wir für Post-Processing brauchen. Der Rest kann ignoriert werden.

Autor

Abonnieren
Benachrichtige mich bei
guest

0 Comments
Älteste
Neueste Meistgewählt
Inline Feedbacks
Alle Kommentare anzeigen