Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Shader di particelle

Particle shaders are a special type of shader that runs before the object is drawn. They are used for calculating material properties such as color, position, and rotation. They can be drawn with any regular material for CanvasItem or Spatial, depending on whether they are 2D or 3D.

Gli shader di particelle sono unici perché non sono utilizzati per disegnare l'oggetto stesso, ma per calcolare le proprietà delle particelle, che sono poi utilizzate da uno shader CanvasItem o Spatial. Contengono due funzioni di elaborazione: start() e process().

A differenza degli altri tipi di shader, gli shader di particelle mantengono i dati prodotti nel frame precedente. Pertanto, essi si possono utilizzare per effetti complessi che avvengono su più frame.

Nota

Gli shader di particelle sono disponibili solo con nodi di particelle basati sulla GPU (GPUParticles2D e GPUParticles3D).

I nodi di particelle basati sulla CPU (CPUParticles2D e CPUParticles3D) sono renderizzati sulla GPU (il che significa che possono utilizzare shader CanvasItem o Spatial personalizzati), ma il loro movimento è simulato sulla CPU.

Modalità di rendering

Modalità di rendering

Descrizione

keep_data

Non cancellare i dati precedenti al riavvio.

disable_force

Disabilita la forza di attrattori.

disable_velocity

Ignora il valore di VELOCITY.

collision_use_scale

Adatta le dimensioni delle particelle per le collisioni.

Variabili integrate

I valori marcati come in sono di sola lettura. I valori marcati come out sono scrivibili facoltativamente e non contengono necessariamente valori sensati. I valori marcati come inout forniscono un valore predefinito sensato e sono scrivibili facoltativamente. I campionatori non sono scrivibili, quindi non sono marcati.

Variabili integrate globali

Le variabili integrate globali sono disponibili ovunque, comprese le funzioni personalizzate.

Integrato

Descrizione

in float TIME

Tempo globale dall'avvio del motore, in secondi. Si ripete ogni 3.600 secondi (che si può cambiare con l'impostazione rollover). È influenzato da time_scale ma non dalla pausa. Se è necessaria una variabile TIME che non sia influenzata dalla scala temporale, aggiungere il proprio uniforme di shader globale e aggiornarlo a ogni frame.

in float PI

Una costante PI (3.141592). Il rapporto tra la circonferenza di un cerchio e il suo diametro, e il numero di radianti in mezzo giro.

in float TAU

Una costante TAU (6.283185). Equivalente a PI * 2 e al numero di radianti in un giro completo.

in float E

Una costante E (2.718281). Numero di Eulero, la base del logaritmo naturale.

Variabili integrate di inizio ed elaborazione

È possibile accedere a queste proprietà dalle funzioni start() e process().

Funzione

Descrizione

in float LIFETIME

Tempo di vita delle particelle.

in float DELTA

Tempo delta di elaborazione.

in uint NUMBER

Numero univoco dall'inizio dell'emissione.

in uint INDEX

Indice della particella (sul numero totale di particelle).

in mat4 EMISSION_TRANSFORM

Trasformazione dell'emettitore (utilizzata per i sistemi non locali).

in uint RANDOM_SEED

Seed casuale utilizzato come base per la casualità.

inout bool ACTIVE

true quando la particella è attiva, può essere impostato su false.

inout vec4 COLOR

Il colore della particella, è scrivibile e accessibile nella funzione vertice della mesh.

inout vec3 VELOCITY

La velocità della particella, può essere modificata.

inout mat4 TRANSFORM

Trasformazione della particella.

inout vec4 CUSTOM

Dati personalizzati di particella. Accessibili dallo shader della mesh come INSTANCE_CUSTOM.

inout float MASS

Massa delle particelle, da utilizzare con gli attrattori. Predefinito a 1.0.

in vec4 USERDATAX

Vettore che consente l'integrazione di dati supplementari definiti dall'utente nello shader di processo di particelle. USERDATAX sono sei valori integrati identificati da un numero, X può essere un numero compreso tra 1 e 6, ad esempio USERDATA3.

in uint FLAG_EMIT_POSITION

Un flag da utilizzare sull'ultimo argomento della funzione emit_subparticle() per assegnare una posizione alla trasformazione di una nuova particella.

in uint FLAG_EMIT_ROT_SCALE

Un flag da utilizzare sull'ultimo argomento della funzione emit_subparticle() per assegnare la rotazione e la scala alla trasformazione di una nuova particella.

in uint FLAG_EMIT_VELOCITY

Un flag da utilizzare sull'ultimo argomento della funzione emit_subparticle() per assegnare una velocità a una nuova particella.

in uint FLAG_EMIT_COLOR

Un flag da utilizzare sull'ultimo argomento della funzione emit_subparticle() per assegnare un colore a una nuova particella.

in uint FLAG_EMIT_CUSTOM

Un flag da utilizzare sull'ultimo argomento della funzione emit_subparticle() per assegnare un vettore di dati personalizzati a una nuova particella.

in vec3 EMITTER_VELOCITY

Velocità del nodo Particles2D (3D).

in float INTERPOLATE_TO_END

Valore della proprietà interp_to_end (3D) del nodo di particelle.

in uint AMOUNT_RATIO

Valore della proprietà amount_ratio (3D) del nodo di particelle.

Nota

Per utilizzare la variabile COLOR in uno StandardMaterial3D, impostare vertex_color_use_as_albedo su true. In uno ShaderMaterial, accedervi tramite variabile COLOR.

Variabili integrate di inizio

Integrato

Descrizione

in bool RESTART_POSITION

true se la particella è riavviata o emessa senza una posizione personalizzata (vale a dire, questa particella è stata creata da emit_subparticle() senza il flag FLAG_EMIT_POSITION).

in bool RESTART_ROT_SCALE

true se la particella è riavviata o emessa senza una rotazione o scala personalizzata (vale a dire, questa particella è stata creata da emit_subparticle() senza il flag FLAG_EMIT_ROT_SCALE).

in bool RESTART_VELOCITY

true se la particella è riavviata o emessa senza una velocità personalizzata (vale a dire, questa particella è stata creata da emit_subparticle() senza il flag FLAG_EMIT_VELOCITY).

in bool RESTART_COLOR

true se la particella è riavviata o emessa senza un colore personalizzato (vale a dire, questa particella è stata creata da emit_subparticle() senza il flag FLAG_EMIT_COLOR).

in bool RESTART_CUSTOM

true se la particella è riavviata o emessa senza una proprietà personalizzata (vale a dire, questa particella è stata creata da emit_subparticle() senza il flag FLAG_EMIT_CUSTOM).

Variabili integrate di elaborazione

Integrato

Descrizione

in bool RESTART

true se il frame di elaborazione attuale è il primo per la particella.

in bool COLLIDED

vero quando la particella si è scontrata con un collisore di particelle.

in vec3 COLLISION_NORMAL

Una normale dell'ultima collisione. Se non viene rilevata alcuna collisione, è uguale a (0.0, 0.0, 0.0).

in float COLLISION_DEPTH

Lunghezza della normale dell'ultima collisione. Se nessuna collisione è rilevata, è uguale a 0.0.

in vec3 ATTRACTOR_FORCE

Una forza combinata degli attrattori che agiscono in quel momento su quella particella.

Funzioni di elaborazione

emit_subparticle() is currently the only custom function supported by particle shaders. It allows users to add a new particle with specified parameters from a sub-emitter. The newly created particle will only use the properties that match the flags parameter. For example, the following code will emit a particle with a specified position, velocity, and color, but unspecified rotation, scale, and custom value:

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);

Funzione

Descrizione

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

Emette una particella da un sotto-emettitore.