• 4Minuten
blank

Shader ermöglichen es uns, weit über die Grenzen zweidimensionaler Effekte hinauszugehen. Ein zeitloser Klassiker in der Shader-Kunst ist das 3D-Gitter, dessen Oberfläche von eleganten Linien und Knotenpunkten durchzogen ist, die ein faszinierendes Gefühl von Geometrie und Struktur vermitteln. Diese Linien scheinen in der Tiefe zu pulsieren und zu leuchten, was den Eindruck von räumlicher Dynamik verstärkt. Je nach Wunsch rotiert das Gitter automatisch oder reagiert auf die Mausbewegungen des Benutzers, wodurch ein immersives Erlebnis entsteht. Die Farben des Gitters wechseln dynamisch, was lebendige und hypnotisierende Farbverläufe erzeugt, die den Betrachter fesseln. Diese harmonische Verbindung von Bewegung und Farbwechsel erschafft ein visuell ansprechendes und künstlerisches Erlebnis.

Und so sieht der Effekt aus:

Wie bereits angedeutet, machen wir zwei Version in einer. Du wirst später selbst entscheiden können, ob es sich, wie im Video, automatisch drehen soll, oder ob Du die Bewegung mit der Maus durchführen möchtest.

Das kann sehr nützlich sein. Etwa, wenn Du es als Hintergrund für ein Menü nutzt. Wenn der Spieler nichts macht, dreht es sich automatisch. Sobald sich der Mauszeiger bewegt, folgt das Gitter dieser Bewegung.

Wir beginnen zunächst mit dem Code, die Erklärungen folgen darauf.

Objekt

Wie immer erstellen wir zunächst ein Objekt. Bei mir heißt es schlicht o_3d_grid.

Event Create

Genau genommen wird es so sein, dass 0 für die Maussteuerung steht und irgendein anderer Wert, also alles andere als 0, für die automatische Drehung steht.

Event Draw

Wie immer geben wir unsere Variablen an den Shader weiter. Der Shader selbst heißt bei mir sh_3d_grid.

Shader

Du kannst einige Dinge nach deinen Wünschen anpassen, wie etwa die Farben oder die Geschwindigkeit, aber auch den Weichzeichner.

Erklärungen

Rotationsfunktion

Diese Funktion rotiert einen 3D-Vektor v um die X- und Y-Achsen.

rxmat ist die Rotationsmatrix für die Rotation um die X-Achse, die die Y- und Z-Koordinaten beeinflusst. rymat ist die Rotationsmatrix für die Rotation um die Y-Achse, die die X- und Z-Koordinaten beeinflusst.

Die Rotation wird durch die Matrixmultiplikation der beiden Matrizen erreicht. Zuerst wird v mit rxmat multipliziert und dann mit rymat.

Normalisierungsfunktion

Diese Funktion normalisiert einen 3D-Vektor v, um sicherzustellen, dass die Längen der Vektoren, die auf die Oberflächen des Würfels zeigen, gleich sind.

Das Dot-Produkt wird verwendet, um zu bestimmen, wie weit v von jeder der 6 Würfelseiten entfernt ist. Das Ergebnis wird mit 3 multipliziert, um die Abstände zu betonen. Die kleinste dieser Abstände (Minimierung) wird verwendet, um v entsprechend zu skalieren, sodass der Vektor auf die nächstgelegene Fläche des Würfels projiziert wird.

Gittermusterfunktion

Diese Funktion erzeugt ein Gittermuster basierend auf dem 3D-Vektor v.

mod wird verwendet, um die Koordinaten zu wiederholen und ein Gitter zu erstellen. Hier wird der Wert 0.25 verwendet, um die Dichte des Gitters zu kontrollieren. Das Gittermuster wird erstellt, indem der maximalen Distanzwert für alle drei Dimensionen (X, Y, Z) verwendet wird. Smoothstep erzeugt einen sanften Übergang zwischen den Gitterlinien, um ein angenehmeres visuelles Ergebnis zu erzielen.

Hauptfunktion

Diese Funktion ist natürlich der Einstiegspunkt des Shaders, wo die Berechnungen stattfinden.

p wird aus den Pixelkoordinaten berechnet, um den Gitterbereich zu definieren. rotate wird auf p angewendet, um die Position des Gitters zu bestimmen, und norm wird verwendet, um sicherzustellen, dass die Vektoren auf die Würfelflächen projiziert werden.

Der Farbverlauf wird basierend auf der 3D-Position und der Zeit erstellt, um dynamische Farben zu erzeugen.

Weiterführende Links

Shader-Programmierung 1: Grundlagen und Sprites
Shader-Effekt: Tunnel mit Maussteuerung
Shader-Effekt: CRT
Bildeinblendung per Shader
GameMaker Quicktipp: Probleme mit Shaderunterstützung

 

Autor

Abonnieren
Benachrichtige mich bei
guest

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