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.
Checking the stable version of the documentation...
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 |
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 |
in float PI |
Uma constante |
in float TAU |
Uma constante |
in float E |
Uma constante |
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 |
|
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 |
inout float MASS |
Massa da partícula, destinada a ser usada com atratores. |
in vec4 USERDATAX |
Vetor que permite a integração de dados suplementares definidos pelo usuário no shader de processo da partícula. |
in uint FLAG_EMIT_POSITION |
Uma flag para o último argumento da função |
in uint FLAG_EMIT_ROT_SCALE |
Uma flag para o último argumento da função |
in uint FLAG_EMIT_VELOCITY |
Uma flag para o último argumento da função |
in uint FLAG_EMIT_COLOR |
Uma flag para o último argumento da função |
in uint FLAG_EMIT_CUSTOM |
Uma flag para o último argumento da função |
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 |
|
in bool RESTART_ROT_SCALE |
|
in bool RESTART_VELOCITY |
|
in bool RESTART_COLOR |
|
in bool RESTART_CUSTOM |
|
Nativos de Process
Integrado |
Descrição |
|---|---|
in bool RESTART |
|
in bool COLLIDED |
|
in vec3 COLLISION_NORMAL |
Uma normal da última colisão. Se nenhuma colisão for detectada, é igual a |
in float COLLISION_DEPTH |
O comprimento da normal da última colisão. Se nenhuma colisão for detectada, é igual a |
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. |