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.

Shaders de partículas

Shaders de partículas são um tipo especial de shader que roda antes que o objeto seja desenhado. Eles são usados para calcular propriedades de material, como cor, posição e rotação. Eles podem ser desenhados com qualquer material comum para CanvasItem ou Spatial, dependendo se são 2D ou 3D.

Shaders de partículas são únicos porque não são usados para desenhar o objeto em si; eles são usados para calcular as propriedades das partículas, que são então utilizadas por um shader de CanvasItem ou Espacial (Spatial). Eles contêm duas funções processadoras: start() e process().

Diferente de outros tipos de shader, os shaders de partículas mantêm os dados que foram gerados no quadro anterior. Portanto, shaders de partículas podem ser usados para efeitos complexos que ocorrem ao longo de múltiplos quadros.

Nota

Shaders de partículas estão disponíveis apenas com nós de partículas baseados em GPU (GPUParticles2D e GPUParticles3D).

Nós de partículas baseados em CPU (CPUParticles2D e CPUParticles3D) são renderizados na GPU (o que significa que podem usar shaders personalizados de CanvasItem ou Spatial), mas seu movimento é simulado na CPU.

Modos de renderização

Modo de renderização

Descrição

keep_data

Não limpa os dados anteriores ao reiniciar.

disable_force

Desativa a força do atrator.

disable_velocity

Ignora o valor de VELOCITY.

collision_use_scale

Escala o tamanho da partícula para colisões.

Embutidos

Valores marcados como in são somente leitura. Valores marcados como out podem opcionalmente ser gravados e não conterão necessariamente valores sensíveis. Valores marcados como inout fornecem um valor padrão sensível e podem opcionalmente ser gravados. Samplers não podem ser gravados, portanto não são marcados.

Built-ins globais

As funções integradas globais estão disponíveis em todos os lugares, incluindo em funções personalizadas.

Integrado

Descrição

in float TIME

Tempo global desde que o motor foi iniciado, em segundos. Ele se repete a cada 3.600 segundos (o que pode ser alterado com a configuração rollover). É afetado pelo time_scale, mas não pelo congelamento (pausa). Se você precisar de uma variável TIME que não seja afetada pela escala de tempo, adicione seu próprio uniform global de shader e atualize-o a cada quadro.

in float PI

Uma constante PI (3.141592). A razão entre a circunferência de um círculo e seu diâmetro e o número de radianos em uma meia volta.

in float TAU

Uma constante TAU (6.283185). Equivalente a PI * 2 e o número de radianos em uma volta completa.

in float E

Uma constante E (2.718281). O número de Euler, a base do logaritmo natural.

Nativos de Start e Process

Estas propriedades podem ser acessadas tanto das funções start() quanto process().

When using the built-in ParticleProcessMaterial, USERDATA1 is defined with the following value in the built-in:

  • w: Accumulated angle from angular velocity in radians, as applied by the angular velocity texture.

Função

Descrição

in float LIFETIME

Tempo de vida da partícula.

in float DELTA

Tempo de processamento delta.

in uint NUMBER

Número exclusivo desde o início da emissão.

in uint INDEX

Índice da partícula (em relação ao total de partículas).

in mat4 EMISSION_TRANSFORM

Transformação do emissor (usada para sistemas não locais).

in uint RANDOM_SEED

Random seed used as a base for randomness.

inout bool ACTIVE

true quando a partícula está ativa, pode ser definida como false.

inout vec4 COLOR

Cor da partícula, pode ser gravada e acessada na função de vértice da malha.

inout vec3 VELOCITY

Velocidade da partícula, pode ser modificada.

inout mat4 TRANSFORM

Transformação de partícula.

inout vec4 CUSTOM

Dados personalizados da partícula. Acessível a partir do shader da malha como INSTANCE_CUSTOM.

inout float MASS

Massa da partícula, destinada a ser usada com atratores. 1.0 por padrão.

in vec4 USERDATAX

Vetor que permite a integração de dados suplementares definidos pelo usuário no shader de processo da partícula. USERDATAX são seis elementos integrados identificados por número, onde X pode ser números entre 1 e 6, por exemplo USERDATA3.

in uint FLAG_EMIT_POSITION

Uma flag para o último argumento da função emit_subparticle() para atribuir uma posição à transformação de uma nova partícula.

in uint FLAG_EMIT_ROT_SCALE

Uma flag para o último argumento da função emit_subparticle() para atribuir uma rotação e escala à transformação de uma nova partícula.

in uint FLAG_EMIT_VELOCITY

Uma flag para o último argumento da função emit_subparticle() para atribuir uma velocidade a uma nova partícula.

in uint FLAG_EMIT_COLOR

Uma flag para o último argumento da função emit_subparticle() para atribuir uma cor a uma nova partícula.

in uint FLAG_EMIT_CUSTOM

Uma flag para o último argumento da função emit_subparticle() para atribuir um vetor de dados personalizados a uma nova partícula.

in vec3 EMITTER_VELOCITY

Velocidade do nó Particles2D (3D).

in float INTERPOLATE_TO_END

Valor da propriedade interp_to_end (3D) do nó de Partículas.

in uint AMOUNT_RATIO

Valor da propriedade amount_ratio (3D) do nó de Partículas.

Nota

Para usar a variável COLOR em um StandardMaterial3D, defina vertex_color_use_as_albedo como true. Em um ShaderMaterial, acesse-a com a variável COLOR.

Nativos de Start

Integrado

Descrição

in bool RESTART_POSITION

true se a partícula for reiniciada ou emitida sem uma posição personalizada (ou seja, esta partícula foi criada por emit_subparticle() sem a flag FLAG_EMIT_POSITION).

in bool RESTART_ROT_SCALE

true se a partícula for reiniciada ou emitida sem uma rotação ou escala personalizada (ou seja, esta partícula foi criada por emit_subparticle() sem a flag FLAG_EMIT_ROT_SCALE).

in bool RESTART_VELOCITY

true se a partícula for reiniciada ou emitida sem uma velocidade personalizada (ou seja, esta partícula foi criada por emit_subparticle() sem a flag FLAG_EMIT_VELOCITY).

in bool RESTART_COLOR

true se a partícula for reiniciada ou emitida sem uma cor personalizada (ou seja, esta partícula foi criada por emit_subparticle() sem a flag FLAG_EMIT_COLOR).

in bool RESTART_CUSTOM

true se a partícula for reiniciada ou emitida sem uma propriedade personalizada (ou seja, esta partícula foi criada por emit_subparticle() sem a flag FLAG_EMIT_CUSTOM).

Nativos de Process

Integrado

Descrição

in bool RESTART

true se o quadro de processo atual for o primeiro para a partícula.

in bool COLLIDED

true quando a partícula colidiu com um colisor de partículas.

in vec3 COLLISION_NORMAL

Uma normal da última colisão. Se nenhuma colisão for detectada, é igual a (0.0, 0.0, 0.0).

in float COLLISION_DEPTH

O comprimento da normal da última colisão. Se nenhuma colisão for detectada, é igual a 0.0.

in vec3 ATTRACTOR_FORCE

Uma força combinada dos atratores no momento sobre aquela partícula.

Funções de Process

emit_subparticle() é atualmente a única função personalizada suportada por shaders de partículas. Ela permite aos usuários adicionar uma nova partícula com parâmetros especificados a partir de um subemissor. A partícula recém-criada usará apenas as propriedades que correspondem ao parâmetro flags. Por exemplo, o seguinte código emitirá uma partícula com uma posição, velocidade e cor especificadas, mas rotação, escala e valor personalizado não especificados:

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

Função

Descrição

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

Emite uma partícula a partir de um subemissor.