Work in progress
The content of this page was not yet updated for Godot
4.2
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¶
Wstęp¶
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, 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.
While GPUParticles2D is configured via a ParticleProcessMaterial (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 GPUParticles2D node into a CPUParticles2D node by clicking on the node in the inspector, selecting the 2D viewport, and selecting GPUParticles2D > Convert to CPUParticles2D in the viewport toolbar.
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
.
Your GPUParticles2D node should now be emitting white points downward.
Tekstura¶
A particle system can use a single texture or an animation flipbook. A flipbook is a texture that contains several frames of animation that can be played back, or chosen at random during emission. This is equivalent to a spritesheet for particles.
The texture is set via the Texture property:
Using an animation flipbook¶
Particle flipbooks are suited to reproduce complex effects such as smoke, fire, explosions. They can also be used to introduce random texture variation, by making every particle use a different texture. You can find existing particle flipbook images online, or pre-render them using external tools such as Blender or EmberGen.
Using an animation flipbook requires additional configuration compared to a single texture. For demonstration purposes, we'll use this texture with 5 columns and 7 rows (right-click and choose Save as…):
To use an animation flipbook, you must create a new CanvasItemMaterial in the Material section of the GPUParticles2D (or CPUParticles2D) node:
In this CanvasItemMaterial, enable Particle Animation and set H Frames and V Frames to the number of columns and rows present in your flipbook texture:
Once this is done, the Animation section in ParticleProcessMaterial (for GPUParticles2D) or in the CPUParticles2D inspector will be effective.
Wskazówka
If your flipbook texture has a black background instead of a transparent background, you will also need to set the blend mode to Add instead of Mix for correct display. Alternatively, you can modify the texture to have a transparent background in an image editor. In GIMP, this can be done using the Color > Color to Alpha menu.
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
Lifetime: 4.0
Wyemituj raz¶
When enabled, a GPUParticles2D node will emit all of its particles once and then never again.
Przetwarzanie wstępne¶
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.
Wybuchowość¶
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:
Losowość¶
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¶
Prostokąt widoczności¶
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 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.
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:
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:
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.
ParticleProcessMaterial settings¶
Direction¶
This is the base direction at which particles emit. The default is
Vector3(1, 0, 0)
which makes particles emit to the right. However,
with the default gravity settings, particles will go straight down.
For this property to be noticeable, you need an initial velocity greater than 0. Here, we set the initial velocity to 40. You'll notice that particles emit toward the right, then go down because of gravity.
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.
Flatness¶
This property is only useful for 3D particles.
Grawitacja¶
Grawitacja oddziałuje na każdą cząsteczkę.
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).
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ę).
Orbit Velocity¶
Orbit velocity is used to make particles turn around their center.
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.
Przyspieszenie styczne¶
This acceleration will use the tangent vector to the center. Combining with radial acceleration can do nice effects.
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.
Kąt¶
Determines the initial angle of the particle (in degrees). This parameter is mostly useful randomized.
Skala¶
Określa początkową skalę/wielkość cząstek.
Kolor¶
Służy do zmiany koloru emitowanych cząstek.
Hue Variation¶
The Variation
value sets the initial hue variation applied to each
particle. The Variation Random
value controls the hue variation
randomness ratio.
Animacja¶
Informacja
Particle flipbook animation is only effective if the CanvasItemMaterial used on the GPUParticles2D or CPUParticles2D node has been configured accordingly.
To set up the particle flipbook for linear playback, set the Speed Min and Speed Max values to 1:
By default, looping is disabled. If the particle is done playing before its lifetime ends, the particle will keep using the flipbook's last frame (which may be fully transparent depending on how the flipbook texture is designed). If looping is enabled, the animation will loop back to the first frame and resume playing.
Depending on how many images your sprite sheet contains and for how long your particle is alive, the animation might not look smooth. The relationship between particle lifetime, animation speed, and number of images in the sprite sheet is this:
Informacja
At an animation speed of 1.0
, the animation will reach the last image
in the sequence just as the particle's lifetime ends.
If you wish the particle flipbook to be used as a source of random particle textures for every particle, keep the speed values at 0 and set Offset Max to 1 instead:
Note that the GPUParticles2D node's Fixed FPS also affects animation playback. For smooth animation playback, it's recommended to set it to 0 so that the particle is simulated on every rendered frame. If this is not an option for your use case, set Fixed FPS to be equal to the effective framerate used by the flipbook animation (see above for the formula).
Emission Shapes¶
ParticleProcessMaterials 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 ParticleProcessMaterial is set, and the GPUParticles2D node is selected. A "Particles" menu should appear in the Toolbar:
Open it and select "Load Emission Mask":
Then select which texture you want to use as your mask:
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.
Border Pixels: Particles will spawn from the outer edges of the texture.
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.
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 ParticleProcessMaterial, under the Emission Shape
section:
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.