Work in progress

The content of this page was not yet updated for Godot 4.5 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

2D particle systems

Introdução

Particle systems are used to simulate complex physical effects, such as sparks, fire, magic particles, smoke, mist, etc.

A ideia é que uma "partícula" seja emitida em um intervalo fixo e com um tempo de vida fixo. Durante sua vida útil, cada partícula terá o mesmo comportamento de base. O que torna cada partícula diferente do resto e proporciona uma aparência mais orgânica é a "aleatoriedade" associada a cada parâmetro. Em essência, criar um sistema de partículas significa definir parâmetros físicos básicos e, em seguida, adicionar aleatoriedade a eles.

Nós de partículas

Godot provides two different nodes for 2D particles, GPUParticles2D and CPUParticles2D. GPUParticles2D is more advanced and uses the GPU to process particle effects. CPUParticles2D is a CPU-driven option with near-feature parity with GPUParticles2D, but lower performance when using large amounts of particles. On the other hand, CPUParticles2D may perform better on low-end systems or in GPU-bottlenecked situations.

Enquanto o GPUParticles2D é configurado por meio de um ParticleProcessMaterial (e, opcionalmente, com um sombreador personalizado), as opções correspondentes são fornecidas por meio de propriedades de nó em CPUParticles2D (com exceção das configurações de trilha).

Going forward there are no plans to add new features to CPUParticles2D, though pull requests to add features already in GPUParticles2D will be accepted. For that reason we recommend using GPUParticles2D unless you have an explicit reason not to.

Você pode converter um nó CPUParticles2D em um nó GPUParticles2D clicando no nó na árvore da cena, selecionando o espaço de trabalho 2D e selecionando CPUParticles2D > Converter para GPUParticles2D na barra de ferramentas.

../../_images/particles_convert.webp

Também é possível converter um nó GPUParticles2D em um nó CPUParticles2D, mas pode haver problemas se você usar recursos somente de GPU.

The rest of this tutorial is going to use the GPUParticles2D node. First, add a GPUParticles2D node to your scene. After creating that node you will notice that only a white dot was created, and that there is a warning icon next to your GPUParticles2D node in the scene dock. This is because the node needs a ParticleProcessMaterial to function.

ParticleProcessMaterial

To add a process material to your particles node, go to Process Material in your inspector panel. Click on the box next to Material, and from the dropdown menu select New ParticleProcessMaterial.

../../_images/particles_material.webp

Your GPUParticles2D node should now be emitting white points downward.

../../_images/particles1.png

Textura

Um sistema de partículas pode usar uma única textura ou um flipbook de animação. Um flipbook é uma textura que contém vários quadros de animação que podem ser reproduzidos ou escolhidos aleatoriamente durante a emissão. Isso é equivalente a um spritesheet para partículas.

A textura é definida por meio da propriedade Textura:

../../_images/particles2.webp

Using an animation flipbook

Os flipbooks de partículas são adequados para reproduzir efeitos complexos, como fumaça, fogo e explosões. Eles também podem ser usados para introduzir variações aleatórias de textura, fazendo com que cada partícula use uma textura diferente. Você pode encontrar imagens existentes de flipbooks de partículas on-line ou pré-renderizá-las usando ferramentas externas, como o Blender ou o EmberGen.

Exemplo de um sistema de partículas que usa uma textura de flipbook

Exemplo de um sistema de partículas que usa uma textura de flipbook

O uso de um flipbook de animação requer configuração adicional em comparação com uma única textura. Para fins de demonstração, usaremos essa textura com 5 colunas e 7 linhas (clique com o botão direito do mouse e escolha Salvar como...):

Particle flipbook texture example

Créditos: JoesAlotofthings (CC BY 4.0)

Para usar um flipbook de animação, é necessário criar um novo CanvasItemMaterial na seção Material do nó GPUParticles2D (ou CPUParticles2D):

Criando um CanvasItemMaterial na parte inferior do Inspetor de nós de partículas

Criando um CanvasItemMaterial na parte inferior do Inspetor de nós de partículas

Neste CanvasItemMaterial, habilite Animação de Partículas e defina Quadros H e Quadros V para o número de colunas e linhas presentes na textura do seu flipbook:

Configurando o CanvasItemMaterial para a textura do flipbook de exemplo

Configurando o CanvasItemMaterial para a textura do flipbook de exemplo

Uma vez feito isso, a seção "Animação" em ParticleProcessMaterial (para GPUParticles2D) ou no Inspetor do CPUParticles2D será efetivada.

Dica

Se a sua textura flipbook tiver um fundo preto em vez de um fundo transparente, você também precisará definir o modo de mesclagem como Adicionar em vez de Misturar para exibição correta. Alternativamente, você pode modificar a textura para ter um fundo transparente em um editor de imagem. No GIMP, isso pode ser feito usando o menu Cor > Cor para Alfa.

Parâmetros de tempo

Tempo de Duração

O tempo em segundos em que cada partícula permanecerá viva. Quando a vida útil termina, uma nova partícula é criada para substituí-la.

Tempo de vida: 0.5

../../_images/paranim14.gif

Tempo de vida: 4.0

../../_images/paranim15.gif

Disparo Único

When enabled, a GPUParticles2D node will emit all of its particles once and then never again.

Pré processamento

Os sistemas de partículas começam com zero partículas emitidas, depois começam a emitir. Isso pode ser um inconveniente ao carregar uma cena e sistemas como uma tocha, névoa, etc. começar a emitir só no momento em que entrar. O pré-processamento é usado para permitir que o sistema processe um determinado número de segundos antes de ser realmente desenhado pela primeira vez.

Escalonamento da Velocidade

A escala de velocidade tem um valor padrão de 1 e é usada para ajustar a velocidade de um sistema de partículas. Diminuir o valor tornará as partículas mais lentas, enquanto aumentar o valor tornará as partículas muito mais rápidas.

Explosividade

Se o tempo de vida for 1 e houver 10 partículas, isso significa que uma partícula será emitida a cada 0,1 segundos. O parâmetro de explosividade altera isso e força as partículas a serem emitidas todas juntas. Os intervalos são:

  • 0: Emite partículas em intervalos regulares (valor padrão).

  • 1: Emite todas as partículas simultaneamente.

Valores no meio também são permitidos. Esse recurso é útil para criar explosões ou explosões repentinas de partículas:

../../_images/paranim18.gif

Aleatoriedade

Todos os parâmetros físicos podem ser randomizados. Os valores aleatórios variam de 0 a 1. A fórmula para randomizar um parâmetro é:

initial_value = param_value + param_value * randomness

FPS Fixado

Essa configuração pode ser usada para definir o sistema de partículas para renderizar em um FPS fixo. Por exemplo, alterar o valor para 2 fará com que as partículas sejam renderizadas a 2 quadros por segundo. Observe que isso não desacelera o próprio sistema de partículas.

Nota

Godot 4.3 atualmente não oferece suporte à interpolação de física para partículas 2D. Como solução alternativa, desative a interpolação de física para o nó de partículas definindo Nó > Interpolação de Física > Modo na parte inferior do Inspetor.

Delta Fractal

Definir Fract Delta como true resulta em um cálculo de delta fracionário, proporcionando um efeito visual mais suave para as partículas. Essa suavidade aumentada vem de uma maior precisão. A diferença é mais perceptível em sistemas com alta aleatoriedade ou partículas em movimento rápido. Isso ajuda a manter a consistência visual do sistema de partículas, garantindo que o movimento de cada partícula esteja alinhado com sua vida útil real. Sem isso, as partículas podem parecer pular ou se mover mais do que deveriam em um único quadro se forem emitidas em um ponto intermediário do quadro. A maior precisão tem um custo de desempenho, especialmente em sistemas com uma quantidade maior de partículas.

Parâmetros de desenho

Visibility Rect (Retângulo de Visibilidade)

O retângulo de visibilidade controla a visibilidade das partículas na tela. Se esse retângulo estiver fora da janela de exibição, o mecanismo não renderizará as partículas na tela.

As propriedades W e H do retângulo controlam respectivamente sua Largura e sua Altura. As propriedades X e Y controlam a posição do canto superior esquerdo do retângulo, em relação ao emissor de partículas.

You can have Godot generate a Visibility Rect automatically using the toolbar above the 2d view. To do so, select the GPUParticles2D node and Click Particles > Generate Visibility Rect. Godot will simulate the Particles2D node emitting particles for a few seconds and set the rectangle to fit the surface the particles take.

Você pode controlar a duração da emissão com a opção Tempo de geração (seg). O valor máximo é de 25 segundos. Se você precisar de mais tempo para suas partículas se moverem, você pode alterar temporariamente a duração do pré-processamento no nó Particles2D.

Coordenadas Locais

Por padrão, esta opção está ativada e significa que o espaço para o qual as partículas são emitidas é relativo ao nó. Se o nó for movido, todas as partículas são movidas com ele:

../../_images/paranim20.gif

Se desativado, as partículas serão emitidas para o espaço global, o que significa que, se o nó for movido, as partículas já emitidas não serão afetadas:

../../_images/paranim21.gif

Ordem de Desenho

Isso controla a ordem na qual as partículas individuais são desenhadas. Índice significa que as partículas são desenhadas de acordo com sua ordem de emissão (padrão). Lifetime significa que eles são desenhados em ordem de vida restante.

Particle Process Material Settings

Para obter informações sobre as configurações no ParticleProcessMaterial, consulte esta página.