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 |
in float TAU |
Eine |
in float E |
Eine |
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 |
|
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 |
in vec4 USERDATAX |
Vektor, der die Integration von zusätzlichen benutzerdefinierten Daten in den Partikelprozess-Shader ermöglicht. |
in uint FLAG_EMIT_POSITION |
Ein Flag, das im letzten Argument der Funktion |
in uint FLAG_EMIT_ROT_SCALE |
Ein Flag, das im letzten Argument der Funktion |
in uint FLAG_EMIT_VELOCITY |
Ein Flag, das im letzten Argument der Funktion |
in uint FLAG_EMIT_COLOR |
Ein Flag, das im letzten Argument der Funktion |
in uint FLAG_EMIT_CUSTOM |
Ein Flag das im letzten Argument der Funktion |
in vec3 EMITTER_VELOCITY |
Geschwindigkeit des Particles-Nodes. |
in float INTERPOLATE_TO_END |
Wert der Property |
in uint AMOUNT_RATIO |
Wert der Property |
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 |
|
in bool RESTART_ROT_SCALE |
|
in bool RESTART_VELOCITY |
|
in bool RESTART_COLOR |
|
in bool RESTART_CUSTOM |
|
Prozess-Built-ins¶
Built-in |
Beschreibung |
---|---|
in bool RESTART |
|
in bool COLLIDED |
|
in vec3 COLLISION_NORMAL |
Eine Normale der letzten Kollision. Wenn keine Kollision festgestellt wird, ist sie gleich |
in float COLLISION_DEPTH |
Eine Länge der Normalen der letzten Kollision. Wenn keine Kollision festgestellt wird, ist sie gleich |
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. |