Particle systems (2D)

Wstęp

A simple (but flexible enough for most uses) particle system is provided. Particle systems are used to simulate complex physical effects, such as sparks, fire, magic particles, smoke, mist, etc.

The idea is that a "particle" is emitted at a fixed interval and with a fixed lifetime. During its lifetime, every particle will have the same base behavior. What makes each particle different from the rest and provides a more organic look is the "randomness" associated with each parameter. In essence, creating a particle system means setting base physics parameters and then adding randomness to them.

Particle nodes

Godot provides two different nodes for 2D particles, Particles2D and CPUParticles2D. Particles2D is more advanced and uses the GPU to process particle effects, but that limits it to higher end graphics API, and in our case to the GLES3 renderer. For projects using the GLES2 backend, CPUParticles2D is a CPU-driven option with near feature parity with Particles2D, but lesser performance. While Particles2D is configured via a ParticlesMaterial (and optionally with a custom shader), the matching options are provided via node properties in CPUParticles2D (with the exception of the trail settings). You can convert a Particles2D node into a CPUParticles2D node by clicking on the node in the inspector, and selecting "Convert to CPUParticles2D" in the "Particles" menu of the toolbar.

../../_images/particles_convert.png

The rest of this tutorial is going to use the Particles2D node. First, add a Particles2D 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 Particles2D node in the inspector. This is because the node needs a ParticlesMaterial to function.

ParticlesMaterial

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 ParticlesMaterial.

../../_images/particles_material.png

Węzeł Particles2D powinien emitować białe punkty w dół.

../../_images/particles1.png

Tekstura

System cząsteczek wykorzystuje jedną teksturę (w przyszłości może ona zostać rozszerzona na tekstury animowane za pomocą arkusza spritesheet). Ustawienie tekstury następuje poprzez odpowiednią właściwość tekstury:

../../_images/particles2.png

Time parameters

LifeTime

Czas w sekundach, w którym każda cząsteczka pozostanie przy życiu. Po zakończeniu żywotności tworzona jest nowa cząstka, która ma ją zastąpić.

Lifetime: 0.5

../../_images/paranim14.gif

Lifetime: 4.0

../../_images/paranim15.gif

One Shot

Kiedy włączony, węzeł Particles2D wyemituje wszystkie swoje cząstki tylko jednokrotnie.

Preprocess

Particle systems begin with zero particles emitted, then start emitting. This can be an inconvenience when loading a scene and systems like a torch, mist, etc. begin emitting the moment you enter. Preprocess is used to let the system process a given number of seconds before it is actually drawn the first time.

Skala prędkości

Skala prędkości ma domyślną wartość 1 i jest używana do regulacji prędkości cząsteczek. Obniżenie tej wartości spowoduje spowolnienie cząsteczek, a zwiększenie tej wartości znacznie przyspieszenie.

Explosiveness

Jeśli czas życia wynosi 1 i istnieje 10 cząstek, oznacza to, że cząstka będzie emitowana co 0.1 sekundy. Zmienia to parametr explosiveness i wymusza na cząsteczkach emitowanie razem. Zakresami są:

  • 0: Emitują cząstki stałe w regularnych odstępach czasu (wartość domyślna).
  • 1: Jednocześnie emitować wszystkie cząstki.

Dozwolone są również wartości środkowe. Funkcja ta jest przydatna do tworzenia eksplozji lub nagłych wybuchów cząstek:

../../_images/paranim18.gif

Randomness

Wszystkie parametry fizyki mogą być losowane. Wartości losowe wahają się od 0 do 1. Wzór do losowania parametru to:

initial_value = param_value + param_value * randomness

Zablokowana wartość FPS

Ustawienie to można wykorzystać do ustawienia systemu cząsteczek na stałą ilość klatek na sekundę. Na przykład, zmiana wartości na 2 spowoduje, że cząstki będą renderować z szybkością 2 klatek na sekundę. Należy pamiętać, że nie zwalnia to samego systemu cząsteczek.

Fraktal Delty

Służy do włączania i wyłączania Fract Delta.

Drawing parameters

Visibility Rect

The visibility rectangle controls the visibility of the particles on screen. If this rectangle is outside of the viewport, the engine will not render the particles on screen.

The rectangle's W and H properties respectively control its Width and its Height. The X and Y properties control the position of the upper-left corner of the rectangle, relative to the particle emitter.

You can have Godot generate a Visibility Rect automatically using the toolbar above the 2d view. To do so, select the Particles2D 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.

You can control the emit duration with the Generation Time (sec) option. The maximum value is 25 seconds. If you need more time for your particles to move around, you can temporarily change the preprocess duration on the Particles2D node.

Lokalne koordynaty

Domyślnie opcja jest zaznaczona, co oznacza, że przestrzeń, do której emitowane są cząstki, jest ustawiona względem węzła. Jeśli węzeł jest przenoszony, to wszystkie cząsteczki są przemieszczane razem z nim:

../../_images/paranim20.gif

W przypadku wyłączenia, cząstki będą emitowane względem świata, co oznacza, że jeśli węzeł zostanie przesunięty, nie będzie to miało wpływu na już wyemitowane cząsteczki:

../../_images/paranim21.gif

Rysowanie zamówień

Kontroluje kolejność, w jakiej poszczególne cząsteczki są rysowane. Index oznacza, że cząstki są rysowane zgodnie z kolejnością emisji (domyślnie). Lifetime oznacza, że zostały one narysowane odpowiednio od czasu ich stworzenia.

Ustawienia ParticlesMaterial

Rozpiętość

This parameter is the angle in degrees which will be randomly added in either direction to the base Direction. A spread of 180 will emit in all directions (+/- 180). For spread to do anything the "Initial Velocity" parameter must be greater than 0.

../../_images/paranim3.gif

Grawitacja

Grawitacja oddziałuje na każdą cząsteczkę.

../../_images/paranim7.gif

Prędkość początkowa

Initial velocity is the speed at which particles will be emitted (in pixels/sec). Speed might later be modified by gravity or other accelerations (as described further below).

../../_images/paranim4.gif

Prędkość kątowa

Prędkość kątowa to początkowa prędkość kątowa przyłożona do cząstek.

Prędkość obrotu

Prędkość obrotu to prędkość, z jaką cząstki obracają się wokół własnego środka (w stopniach/sekundę).

../../_images/paranim5.gif

Orbit Velocity

Orbit velocity is used to make particles turn around their center.

../../_images/paranim6.gif

Przyspieszenie liniowe

Przyspieszenie liniowe oddziałuje na każdą cząsteczkę.

Radial Acceleration

If this acceleration is positive, particles are accelerated away from the center. If negative, they are absorbed towards it.

../../_images/paranim8.gif

Przyspieszenie styczne

This acceleration will use the tangent vector to the center. Combining with radial acceleration can do nice effects.

../../_images/paranim9.gif

Tłumienie

Damping applies friction to the particles, forcing them to stop. It is especially useful for sparks or explosions, which usually begin with a high linear velocity and then stop as they fade.

../../_images/paranim10.gif

Kąt

Determines the initial angle of the particle (in degrees). This parameter is mostly useful randomized.

../../_images/paranim11.gif

Skala

Określa początkową skalę/wielkość cząstek.

../../_images/paranim12.gif

Kolor

Służy do zmiany koloru emitowanych cząstek.

Zróżnicowanie odcieni barw

The Variation value sets the initial hue variation applied to each particle. The Variation Random value controls the hue variation randomness ratio.

Emission Shapes

ParticlesMaterials allow you to set an Emission Mask, which dictates the area and direction in which particles are emitted. These can be generated from textures in your project.

Ensure that a ParticlesMaterial is set, and the Particles2D node is selected. A "Particles" menu should appear in the Toolbar:

../../_images/emission_shapes1.png

Open it and select "Load Emission Mask":

../../_images/emission_shapes2.png

Then select which texture you want to use as your mask:

../../_images/emission_shapes3.png

A dialog box with several settings will appear.

Maska emisji

Three types of emission masks can be generated from a texture:

  • Solid Pixels: Particles will spawn from any area of the texture, excluding transparent areas.
../../_images/emission_mask_solid.gif
  • Border Pixels: Particles will spawn from the outer edges of the texture.
../../_images/emission_mask_border.gif
  • Directed Border Pixels: Similar to Border Pixels, but adds extra information to the mask to give particles the ability to emit away from the borders. Note that an Initial Velocity will need to be set in order to utilize this.
../../_images/emission_mask_directed_border.gif

Kolory emisji

Capture from Pixel will cause the particles to inherit the color of the mask at their spawn points.

Once you click "OK", the mask will be generated and set to the ParticlesMaterial, under the Emission Shape section:

../../_images/emission_shapes4.png

All of the values within this section have been automatically generated by the "Load Emission Mask" menu, so they should generally be left alone.

Informacja

An image should not be added to Point Texture or Color Texture directly. The "Load Emission Mask" menu should always be used instead.