Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Partikel-Shader

Partikel-Shader sind eine spezielle Art von Shader, die ausgeführt werden, bevor das Objekt gezeichnet wird. Sie werden für die Berechnung von Materialeigenschaften wie Farbe, Position und Rotation verwendet. Sie werden mit jedem regulären Material für CanvasItem oder Spatial gezeichnet, je nachdem, ob sie 2D oder 3D sind.

Partikel-Shader sind einzigartig, weil sie nicht zum Zeichnen des Objekts selbst verwendet werden, sondern zur Berechnung von Partikeleigenschaften, die dann von einem CanvasItem- oder Spatial-Shader verwendet werden. Sie enthalten zwei Prozessor-Funktionen: Start() und Process().

Im Gegensatz zu anderen Shader-Typen behalten Partikel-Shader die Daten, die im vorherigen Frame ausgegeben wurden. Daher können Partikel-Shader für komplexe Effekte verwendet werden, die sich über mehrere Frames erstrecken.

Bemerkung

Partikel-Shader sind nur bei GPU-basierten Nodes (GPUParticles2D und GPUParticles3D) verfügbar.

CPU-basierte Partikel-Nodes (CPUParticles2D und CPUParticles3D) werden auf der GPU gerendert (d.h. sie können benutzerdefinierte CanvasItem- oder Spatial-Shader verwenden), aber ihre Bewegung wird auf der CPU simuliert.

Render-Modi

Rendermodus

Beschreibung

keep_data

Beim Neustart keine vorherigen Daten löschen.

disable_force

Attraktor-Kraft deaktivieren.

disable_velocity

Ignorieren des VELOCITY-Wertes.

collision_use_scale

Skalierung der Partikelgröße für Kollisionen.

Built-ins

Mit "in" gekennzeichnete Werte sind schreibgeschützt. Mit "out" gekennzeichnete Werte dienen zum optionalen Schreiben und enthalten nicht unbedingt sinnvolle Werte. Als "inout" gekennzeichnete Werte stellen einen sinnvollen Default-Wert dar und können optional beschrieben werden. Sampler sind nicht Gegenstand des Schreibens und werden nicht markiert.

Globale Built-ins

Globale Built-ins sind überall verfügbar, einschließlich benutzerdefinierter Funktionen.

Built-in

Beschreibung

in float TIME

Globale Zeit in Sekunden.

in float PI

Eine PI-Konstante (3,141592). Das Verhältnis des Kreisumfangs zu seinem Durchmesser und die Anzahl der Bogenmaßeinheiten in einer halben Umdrehung.

in float TAU

Eine TAU-Konstante (6.283185). Ein Äquivalent von PI * 2 und die Anzahl der Bogenmaßeinheiten in einer vollen Umdrehung.

in float E

Eine E-Konstante (2,718281). Eulersche Zahl und eine Basis des natürlichen Logarithmus.

Start- und Prozess-Built-ins

Auf diese Propertys kann sowohl von den start() als auch von den process()-Funktionen zugegriffen werden.

Funktion

Beschreibung

in float LIFETIME

Partikel-Lebensdauer.

in float DELTA

Delta-Ausführungszeit.

in uint NUMBER

Eindeutige Nummer seit Emissionsbeginn.

in uint INDEX

Partikelindex (von Gesamtpartikeln).

in mat4 EMISSION_TRANSFORM

Emitter-Transformation (wird für nicht-lokale Systeme verwendet).

in uint RANDOM_SEED

Zufälliger Seed, der als Basis für random verwendet wird.

inout bool ACTIVE

true, wenn der Partikel aktiv ist, kann false gesetzt werden.

inout vec4 COLOR

Partikelfarbe, kann in die Vertexfunktion des Mesh geschrieben und darauf zugegriffen werden.

inout vec3 VELOCITY

Partikelgeschwindigkeit, kann geändert werden.

inout mat4 TRANSFORM

Partikeltransformation.

inout vec4 CUSTOM

Benutzerdefinierte Partikeldaten. Zugänglich vom Shader des Mesh als INSTANCE_CUSTOM.

inout float MASS

Partikelmasse, vorgesehen für die Verwendung mit Attraktoren. Entspricht standardmäßig 1.0.

in vec4 USERDATAX

Vektor, der die Integration von zusätzlichen benutzerdefinierten Daten in den Partikelprozess-Shader ermöglicht. USERDATAX sind sechs Built-Ins, die durch eine Zahl identifiziert werden, wobei X Zahlen zwischen 1 und 6 sein können.

in uint FLAG_EMIT_POSITION

Ein Flag, das im letzten Argument der Funktion emit_subparticle verwendet wird, um der Transformation eines neuen Partikels eine Position zuzuweisen.

in uint FLAG_EMIT_ROT_SCALE

Ein Flag, das im letzten Argument der Funktion emit_subparticle verwendet wird, um die Rotation und den Maßstab der Transformation eines neuen Partikels zuzuweisen.

in uint FLAG_EMIT_VELOCITY

Ein Flag, das im letzten Argument der Funktion emit_subparticle verwendet wird, um einem neuen Partikel eine Geschwindigkeit zuzuweisen.

in uint FLAG_EMIT_COLOR

Ein Flag, das im letzten Argument der Funktion emit_subparticle verwendet wird, um einem neuen Partikel eine Farbe zuzuweisen.

in uint FLAG_EMIT_CUSTOM

Ein Flag das im letzten Argument der Funktion emit_subparticle verwendet wird, um einem neuen Partikel einen eigenen Datenvektor zuzuweisen.

in vec3 EMITTER_VELOCITY

Geschwindigkeit des Particles-Nodes.

in float INTERPOLATE_TO_END

Wert der Property interp_to_end des Particles-Nodes.

in uint AMOUNT_RATIO

Wert der Property amount_ratio des Particles-Nodes.

Bemerkung

Um die COLOR Variable in einem StandardMaterial3D zu benutzen, setzen Sie vertex_color_use_as_albedo auf true. In einem ShaderMaterial greifen Sie mit der Variable COLOR darauf zu.

Start-Built-ins

Built-in

Beschreibung

in bool RESTART_POSITION

true, wenn der Partikel neu gestartet wurde, oder ohne eigene Position emittiert wurde (d.h. dieser Partikel wurde mit emit_subparticle() ohne das FLAG_EMIT_POSITION Flag erzeugt).

in bool RESTART_ROT_SCALE

true, wenn der Partikel neu gestartet oder ohne eigene Rotation oder Skalierung emittiert wurde (d.h. dieser Partikel wurde mit emit_subparticle() ohne das FLAG_EMIT_ROT_SCALE Flag erzeugt).

in bool RESTART_VELOCITY

true, wenn der Partikel neu gestartet oder ohne eigene Geschwindigkeit emittiert wurde (d.h. dieser Partikel wurde mit emit_subparticle() ohne das FLAG_EMIT_VELOCITY-Flag erzeugt).

in bool RESTART_COLOR

true, wenn der Partikel neu gestartet oder ohne eigene Farbe emittiert wurde (d.h. dieser Partikel wurde mit emit_subparticle() ohne das FLAG_EMIT_COLOR-Flag erzeugt).

in bool RESTART_CUSTOM

true, wenn der Partikel neu gestartet wurde oder ohne eine eigene Property emittiert wurde (d.h. dieser Partikel wurde mit emit_subparticle() ohne das FLAG_EMIT_CUSTOM-Flag erzeugt).

Prozess-Built-ins

Built-in

Beschreibung

in bool RESTART

true, wenn der aktuelle Prozessframe der erste für das Partikel ist.

in bool COLLIDED

true, wenn das Partikel mit einem Partikel-Collider zusammengestoßen ist.

in vec3 COLLISION_NORMAL

Eine Normale der letzten Kollision. Wenn keine Kollision festgestellt wird, ist sie gleich vec3(0.0).

in float COLLISION_DEPTH

Eine Länge der Normalen der letzten Kollision. Wenn keine Kollision festgestellt wird, ist sie gleich 0.0.

in vec3 ATTRACTOR_FORCE

Eine kombinierte Kraft der Attraktoren im Moment auf dieses Teilchen.

Prozess-Funktionen

emit_subparticle ist derzeit die einzige benutzerdefinierte Funktion, die von Partikel-Shadern unterstützt wird. Sie erlaubt es dem Benutzer, ein neues Partikel mit bestimmten Parametern von einem Sub-Emitter hinzuzufügen. Das neu erstellte Partikel wird nur die Propertys verwenden, die mit dem Parameter flags übereinstimmen. Zum Beispiel wird der folgende Code ein Partikel mit einer spezifizierten Position, Geschwindigkeit und Farbe emittieren, aber ohne spezifizierte Rotation, Skalierung und benutzerdefinierten Wert:

mat4 custom_transform = mat4(1.0);
custom_transform[3].xyz = vec3(10.5, 0.0, 4.0);
emit_subparticle(custom_transform, vec3(1.0, 0.5, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(1.0), FLAG_EMIT_POSITION | FLAG_EMIT_VELOCITY | FLAG_EMIT_COLOR);

Funktion

Beschreibung

bool emit_subparticle (mat4 xform, vec3 velocity, vec4 color, vec4 custom, uint flags)

Sendet ein Partikel von einem Sub-Emitter aus.