263 lines
6.6 KiB
ReStructuredText
263 lines
6.6 KiB
ReStructuredText
Particle Systems (2D)
|
|
=====================
|
|
|
|
Intro
|
|
-----
|
|
|
|
A simple (but flexible enough for most uses) particle system is
|
|
provided. Particle systems are used to simulate complex physical effects
|
|
tsuch as sparks, fire, magic particles, smoke, mist, magic, etc.
|
|
|
|
The idea is that a "particle" is emitted at a fixed interval and with a
|
|
fixed lifetime. During his lifetime, every particle will have the same
|
|
base behavior. What makes every particle different and provides a more
|
|
organic look is the "randomness" associated to each parameter. In
|
|
essence, creating a particle system means setting base physics
|
|
parameters and then adding randomness to them.
|
|
|
|
Particles2D
|
|
~~~~~~~~~~~
|
|
|
|
Particle systems are added to the scene via the
|
|
`Particles2D <https://github.com/okamstudio/godot/wiki/class_particles2d>`__
|
|
node. They are enabled by default and start emitting white points
|
|
downwards (as affected by the gravity). This provides a reasonable
|
|
starting point to start adapting it to our needs.
|
|
|
|
.. image:: /img/particles1.png
|
|
|
|
Texture
|
|
~~~~~~~
|
|
|
|
A particle system uses a single texture (in the future this might be
|
|
extended to animated textures via spritesheet). The texture is set via
|
|
the relevant texture property:
|
|
|
|
.. image:: /img/particles2.png
|
|
|
|
Physics Variables
|
|
-----------------
|
|
|
|
Before taking a look at the global parameters for the particle system,
|
|
let's first see what happens when the physics variables are tweaked.
|
|
|
|
Direction
|
|
---------
|
|
|
|
This is the base angle at which particles emit. Default is 0 (down):
|
|
|
|
.. image:: /img/paranim1.gif
|
|
|
|
Changing it will change the emissor direction, but gravity will still
|
|
affect them:
|
|
|
|
.. image:: /img/paranim2.gif
|
|
|
|
This parameter is useful because, by rotating the node, gravity will
|
|
also be rotated. Changing direction keeps them separate.
|
|
|
|
Spread
|
|
------
|
|
|
|
Spread is the angle at which particles will randomly be emitted.
|
|
Increasing the spread will increase the angle. A spread of 180 will emit
|
|
in all directions.
|
|
|
|
.. image:: /img/paranim3.gif
|
|
|
|
Linear Velocity
|
|
---------------
|
|
|
|
Linear 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).
|
|
|
|
.. image:: /img/paranim4.gif
|
|
|
|
Spin Velocity
|
|
-------------
|
|
|
|
Spin Velocity is the speed at which particles turn around their center
|
|
(in degrees/sec).
|
|
|
|
.. image:: /img/paranim5.gif
|
|
|
|
Orbit Velocity
|
|
--------------
|
|
|
|
Orbit Velocity is used to make particles turn around their center.
|
|
|
|
.. image:: /img/paranim6.gif
|
|
|
|
Gravity Direction & Strength
|
|
----------------------------
|
|
|
|
Gravity can be modified as in direction and strength. Gravity affects
|
|
every particle currently alive.
|
|
|
|
.. image:: /img/paranim7.gif
|
|
|
|
Radial Acceleration
|
|
-------------------
|
|
|
|
If this acceleration is positive, particles are accelerated away from
|
|
the center. If negative, they are absorbed towards it.
|
|
|
|
.. image:: /img/paranim8.gif
|
|
|
|
Tangential Acceleration
|
|
-----------------------
|
|
|
|
This acceleration will use the tangent vector to the center. Combined
|
|
with Radial Acceleration can do nice effects.
|
|
|
|
.. image:: /img/paranim9.gif
|
|
|
|
Damping
|
|
-------
|
|
|
|
Damping applies friction to the particles, forcing them to stop. It is
|
|
specially useful for sparks or explosions, which usually begin with a
|
|
high linear velocity and then stop as they fade.
|
|
|
|
.. image:: /img/paranim10.gif
|
|
|
|
Initial Angle
|
|
-------------
|
|
|
|
Determines the intial angle of the particle (in degress). This parameter
|
|
is mostly useful randomized.
|
|
|
|
.. image:: /img/paranim11.gif
|
|
|
|
Initial & Final Size
|
|
--------------------
|
|
|
|
Determines the intial and final scales of the particle.
|
|
|
|
.. image:: /img/paranim12.gif
|
|
|
|
Color Phases
|
|
------------
|
|
|
|
| Particles can use up to 4 color phases. Each color phase can include
|
|
transparency.
|
|
| Phases must provide an offset value from 0 to 1, and alays in
|
|
ascending order. For example, a color will begin at offset 0 and end
|
|
in offset 1, but 4 colors might use diferent offsets, such as 0, 0.2,
|
|
0.8 and 1.0 for the different phases:
|
|
|
|
.. image:: /img/particlecolorphases.png
|
|
|
|
Will result in:
|
|
|
|
.. image:: /img/paranim13.gif
|
|
|
|
Global Parameters
|
|
-----------------
|
|
|
|
These parameters affect the behavior of the entire system.
|
|
|
|
Lifetime
|
|
--------
|
|
|
|
The time in seconds that every particle will stay alive. When lifetime
|
|
ends, a new particle is created to replace it.
|
|
|
|
Lifetime: 0.5
|
|
|
|
.. image:: /img/paranim14.gif
|
|
|
|
Lifetime: 4.0
|
|
|
|
.. image:: /img/paranim15.gif
|
|
|
|
Timescale
|
|
---------
|
|
|
|
It happens often that the effect achieved is perfect, except too fast or
|
|
too slow. Timescale helps adjust the overall speed.
|
|
|
|
Timescale everything 2x:
|
|
|
|
.. image:: /img/paranim16.gif
|
|
|
|
Preprocess
|
|
----------
|
|
|
|
Particle systems begin with 0 particles emitted, then start emitting.
|
|
This can be an inconvenience when just 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 amount of seconds before it is
|
|
actually shown the first time.
|
|
|
|
Emit Timeout
|
|
------------
|
|
|
|
This variable will switch emission off after given amount of seconds
|
|
being on. When zero, itś disabled.
|
|
|
|
Offset
|
|
------
|
|
|
|
Allows to move the emission center away from the center
|
|
|
|
Half Extents
|
|
------------
|
|
|
|
Makes the center (by default 1 pixel) wider, to the size in pixels
|
|
desired. Particles will emit randomly inside this area.
|
|
|
|
.. image:: /img/paranim17.gif
|
|
|
|
It is also possible to set an emission mask by using this value. Check
|
|
the "Particles" menu on the 2D scene editor viewport and select your
|
|
favorite texture. Opaque pixels will be used as potential emission
|
|
location, while transparent ones will be ignored:
|
|
|
|
.. image:: /img/paranim19.gif
|
|
|
|
Local Space
|
|
-----------
|
|
|
|
By default this option is on, and it means that the space that particles
|
|
are emitted to is contained within the node. If the node is moved, all
|
|
particles are moved with it:
|
|
|
|
.. image:: /img/paranim20.gif
|
|
|
|
If disabled, particles will emit to global space, meaning that if the
|
|
node is moved, the emissor is moved too:
|
|
|
|
.. image:: /img/paranim21.gif
|
|
|
|
Explosiveness
|
|
-------------
|
|
|
|
If lifetime is 1 and there are 10 particles, it means every particle
|
|
will be emitted every 0.1 seconds. The explosiveness parameter changes
|
|
this, and forces particles to be emitted all together. Ranges are:
|
|
|
|
- 0: Emit all particles together.
|
|
- 1: Emit particles at equal interval.
|
|
|
|
Values in the middle are also allowed. This feature is useful for
|
|
creating explosions or sudden bursts of particles:
|
|
|
|
.. image:: /img/paranim18.gif
|
|
|
|
Randomness
|
|
----------
|
|
|
|
All physics parameters can be randomiez. Random variables go from 0 to
|
|
1. the formula to randomize a parameter is:
|
|
|
|
::
|
|
|
|
initial_value = param_value + param_value*randomness
|
|
|
|
*Juan Linietsky, Ariel Manzur, Distributed under the terms of the `CC
|
|
By <https://creativecommons.org/licenses/by/3.0/legalcode>`__ license.*
|
|
|
|
|