• 3Minuten
blank

Plasma-Effekte

Ein Plasma-Effekt erzeugt ein fließendes, wellenartiges Muster, das oft aus verschiedenen Farben besteht und den Eindruck von sich bewegendem Plasma vermittelt. Die Definition eines Plasma-Effekts kann je nach Umsetzung variieren, aber im Allgemeinen basiert er auf der Verwendung von Mathematik und Farbmanipulation, um das gewünschte visuelle Ergebnis zu erzielen. Im Beispiel zeige ich zwei Varianten.

Klassischer Plasma-Effekt

Hierbei wird eine Sinus-Funktion verwendet, um Wellenmuster und Farbverschiebungen zu erzeugen. Er sieht so aus:

Create-Event

Draw-Event

Fragment-Shader

Die ursprünglichen Texturkoordinaten v_vTexcoord werden mit einem Zoom-Faktor multipliziert und um einen Offset-Wert verschoben. Dadurch kann der Effekt gezoomt und verschoben werden.

Die x-Komponente der verschobenen Texturkoordinaten wird modifiziert, indem eine Sinus-Funktion auf den y-Komponentenwert und die vergangene Zeit (elapsedTime) angewendet wird. Dadurch entsteht eine wellenartige Bewegung entlang der x-Achse. Die Farbe jedes Pixels wird basierend auf den modifizierten Texturkoordinaten berechnet. Es werden Sinus-Funktionen auf den x- und y-Komponentenwerten angewendet, und das Ergebnis wird mit einem Skalierungsfaktor (spectrum) und einem Wertebereich (4.0) multipliziert. Dadurch entsteht ein Farbwert, der zwischen -spectrum/4.0 und spectrum/4.0 liegt.

Der berechnete Farbwert (color) wird mit einem Verschiebungsfaktor (paletteShift) addiert und dann mit dem Spektrum-Wert (spectrum) modulo gerechnet. Dadurch entsteht eine Verschiebung in der Farbpalette. asierend auf dem verschobenen und modulierten Farbwert werden Sinus-Funktionen auf den einzelnen RGB-Komponenten angewendet, um die finale Farbe (finalColour) zu berechnen. Die Sinus-Funktionen verwenden verschiedene Perioden (PI / 128.0, PI / 64.0, PI / 32.0), um unterschiedliche Farbmuster zu erzeugen.

Die rote und blaue Komponente der finalen Farbe werden jeweils mit 0,5 multipliziert, um ihre Intensität zu verringern. Die finale Farbe (finalColour) wird dem aktuellen Pixel (gl_FragColor) zugewiesen, um es zu rendern.

Dank der Variable zoom im Create-Event kann man das Ganze auch vergrößern. So sieht es aus, wenn man statt 0.75 0.25 verwendet:

 

Realcolor Plasma

Der Effekt verwendet das Prinzip des Fractional Brownian Motion (fbm) mit mehreren Oktaven, um ein detailreiches und sich veränderndes Muster zu erzeugen. Der Shader nutzt Noise-Funktionen, Rotationen und Transformationen, um die Formen zu generieren. Je nach Farbwahl können somit Feuer, Nebel oder andere, sehr kreative Muster erzeugt werden. Mit der Variable time_add im Create-Event können wir die Geschwindigkeit steuern. Setzt man sie auf 0, erhält man ein Standbild.

Create-Event

Draw-Event

Fragment-Shader

Der Shader verwendet eine fbm-Funktion, um den komplexen, sich verändernden Mustern zu erzeugen. Die Funktion fbm nimmt eine Position (pos) und verwendet mehrere Oktaven von Noise, um einen Wert zu berechnen. Dieser Wert wird dann aufaddiert und skaliert, um den Gesamteffekt zu erzeugen.

Die Funktion noise wird verwendet, um zufällige Werte basierend auf einer Position zu generieren. Diese Werte werden für die Berechnung des fbm und für die Variation der Flammenformen genutzt. Es werden die Funktionen rotX und rotY verwendet, um Matrizen für die Rotationen zu erstellen.

Die Farben der Flammen werden basierend auf den erzeugten Werten berechnet. Es werden Farbmischungen (Mixing) verwendet, um verschiedene Farben basierend auf den Werten zu mischen. Zum Beispiel werden Rottöne, Orange und Gelbtöne verwendet, um die Farben der Flammen darzustellen.

Außerdem erzeugt der Shader einen Flickereffekt, indem er den Wert f quadriert und dann als Faktor für die Farbmischungen verwendet. Dadurch entsteht ein flackernder Effekt, der die Flammen darstellt.

Autor

Abonnieren
Benachrichtige mich bei
guest

0 Comments
Inline Feedbacks
Alle Kommentare anzeigen