Work in progress
The content of this page was not yet updated for Godot
4.3
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
Introduction
Particle systems are used to simulate complex physical effects, such as sparks, fire, magic particles, smoke, mist, etc.
L'idée est qu'une "particule" soit émise à un intervalle fixe et avec une durée de vie fixe. Au cours de sa vie, chaque particule aura le même comportement de base. Ce qui rend chaque particule différente et donne un aspect plus organique, c'est le "caractère aléatoire" associé à chaque paramètre. En substance, créer un système de particules signifie définir les paramètres de base de la physique, puis leur ajouter un caractère aléatoire.
Nœuds de particules
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.
Bien que GPUParticles2D soit configuré via un ParticleProcessMaterial (et potentiellement avec un shader personnalisé), les options correspondantes sont fournies via des propriétés de nœud dans CPUParticles2D (à l'exception des paramètres de trainée).
Vous pouvez convertir un nœud GPUParticles2D en un nœud CPUParticles2D en cliquant sur le nœud de l'inspecteur, en sélectionnant la fenêtre d'affichage 2D et en sélectionnant GPUParticles2D > Convertir en CPUParticles2D dans la barre d'outils de la fenêtre d'affichage.
Le reste de ce tutoriel va utiliser le nœud GPUParticles2D. Tout d'abord, ajoutez un nœud GPUParticles2Dà votre scène. Après avoir créé ce nœud, vous remarquerez que seul un point blanc a été créé et qu'il y a une icône d'avertissement à côté de votre nœud GPUParticles2Ddans le dock de la scène. Cela est dû au fait que le nœud a besoin d'un ParticleProcessMaterial pour fonctionner.
ParticleProcessMaterial
Pour ajouter un matériau de processus à votre nœud de particules, accédez à Matériau de processus dans votre panneau d’inspecteur. Cliquez sur la case à côté de Matériau, puis sélectionnez Nouveau ParticleProcessMaterial dans le menu déroulant.
Votre nœud GPUParticles2D devrait maintenant émettre des points blancs vers le bas.
Texture
Un système de particules peut utiliser une seule texture ou un flipbook d'animation. Un flipbook est une texture qui contient plusieurs images d'animation pouvant être lues ou choisies au hasard lors de l'émission. Cela équivaut à une feuille de sprites pour les particules.
La texture est choisie via la propriété Texture :
Using an animation flipbook
Les Particle flipbooks sont adaptés pour reproduire des effets complexes tels que la fumée, le feu, les explosions. Ils peuvent également être utilisés pour introduire une variation aléatoire de texture, en faisant en sorte que chaque particule utilise une texture différente. Vous pouvez trouver des images de particle flipbooks existantes en ligne, ou les pré-rendre à l'aide d'outils externes tels que Blender ou EmberGen.
Exemple d'un système de particules utilisant une flipbook texture
L'utilisation d'un animation flipbook nécessite une configuration supplémentaire par rapport à une texture seule. À des fins de démonstration, nous allons utiliser cette texture avec 5 colonnes et 7 rangées (clic droit et choisissez Save as...) :
Crédit : JoesAlotofthings (CC BY 4.0)
Pour utiliser un animation flipbook, vous devez créer un nouveau CanvasItemMaterial dans la section Material du nœud GPUParticles2D (ou CPUParticles2D) :
Création d'une CanvasItemMaterial en bas de l'inspecteur du nœud de particules
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:
Configuration du CanvasItemMaterial pour la flipbook texture de l'exemple
Une fois cela fait, la section Animation dans ParticleProcessMaterial (pour GPUParticles2D) ou dans l'inspecteur CPUParticles2D sera effective.
Astuce
Si votre texture flipbook a un fond noir au lieu d'un fond transparent, vous devrez également définir le mode de fusion sur Add au lieu de Mix pour un affichage correct. Sinon, vous pouvez modifier la texture pour qu'elle ait un fond transparent dans un éditeur d'images. Dans GIMP (https://gimp.org), cela peut être fait en utilisant le menu Couleur > Couleur vers Alpha.
Paramètres de temps
Durée de vie
Le temps en secondes que chaque particule restera en vie. Lorsque la durée de vie est terminée, une nouvelle particule est créée pour la remplacer.
Durée de vie : 0.5
Durée de vie : 4.0
Jouer une fois
Lorsqu'il est activé, un nœud GPUParticles2D émettra toutes ses particules une fois, puis jamais plus.
Pré-traitement
Les systèmes de particules commencent avec zéro particule émise, puis commencent à émettre. Cela peut être un inconvénient lors du chargement d'une scène et des systèmes comme une torche, une brume, etc. commencent à émettre dès que vous entrez. Le prétraitement est utilisé pour permettre au système de traiter un nombre donné de secondes avant qu'il ne soit réellement dessiné la première fois.
Échelle de vitesse
L'échelle de vitesse a une valeur par défaut de 1 et est utilisée pour ajuster la vitesse d'un système de particules. Réduire la valeur ralentira les particules tandis que l'augmenter les rendra beaucoup plus rapides.
Explovisité
Si la durée de vie est 1 et qu'il y a 10 particules, cela signifie qu'une particule sera émise toutes les 0,1 secondes. Le paramètre d'explosivité change cela et oblige les particules à être émises toutes ensemble. Les gammes sont :
0 : émettre des particules à intervalles réguliers (valeur par défaut).
1 : Émettre toutes les particules simultanément.
Les valeurs au milieu sont également autorisées. Cette fonctionnalité est utile pour créer des explosions ou des explosions soudaines de particules :
Aléatoire
Tous les paramètres physiques peuvent être randomisés. Les valeurs aléatoires vont de 0 à 1. La formule pour randomiser un paramètre est la suivante :
initial_value = param_value + param_value * randomness
FPS fixes
Ce paramètre peut être utilisé pour configurer le système de particules pour qu'il rende à un FPS donné. Par exemple, si vous modifiez la valeur en 2, les particules seront rendues à 2 images par seconde. Notez que cela ne ralentit pas le système de particules lui-même.
Note
Godot 4.3 does not currently support physics interpolation for 2D particles. As a workaround, disable physics interpolation for the particles node by setting Node > Physics Interpolation > Mode at the bottom of the inspector.
Delta Fraction
Ceci peut être utilisé pour activer ou désactiver Fract Delta.
Paramètres de dessin
Zone de Visibilité
Le rectangle de visibilité contrôle la visibilité des particules à l'écran. Si ce rectangle est à l'extérieur de la fenêtre, le moteur ne rendra pas les particules à l'écran.
Les propriétés W et H du rectangle contrôlent respectivement sa Largeur et sa Hauteur. Les propriétés X et Y contrôlent la position du coin supérieur gauche du rectangle par rapport à l'émetteur de particules.
Vous pouvez demander à Godot de générer un rectangle de visibilité automatiquement à l’aide de la barre d’outils au-dessus de la vue 2d. Pour ce faire, sélectionnez le nœud GPUParticles2D et cliquez sur Particules > Générer un rectangle de visibilité. Godot va simuler le nœud GPUParticles2D émettant des particules pendant quelques secondes et réglera le rectangle pour s’adapter à la surface que prennent les particules.
Vous pouvez contrôler la durée d'émission avec l'option Generation Time (sec). La valeur maximale est de 25 secondes. Si vous avez besoin de plus de temps pour que vos particules se déplacent, vous pouvez changer temporairement la durée du preprocessus sur le nœud Particules2D.
Coordonnées locales
Par défaut, cette option est activée et cela signifie que l'espace dans lequel les particules sont émises est relatif au nœud. Si le nœud est déplacé, toutes les particules le sont également :
Si cette option est désactivée, les particules seront émises vers l'espace global, ce qui signifie que si le nœud est déplacé, les particules déjà émises ne sont pas affectées :
Ordre de rendu
Ceci contrôle l'ordre dans lequel les particules individuelles sont dessinées. Index signifie que les particules sont dessinées en fonction de leur ordre d'émission (valeur par défaut). Lifetime signifie qu'elles sont dessinées dans l'ordre de leur durée de vie restante.
ParticleProcessMaterial settings
Direction
C'est la direction de base dans laquelle les particules sont émises. La valeur par défaut est Vector3(1, 0, 0), ce qui fait que les particules émettent vers la droite. Cependant, avec les paramètres de gravité par défaut, les particules vont directement vers le bas.
Pour que cette propriété soit perceptible, il faut une vitesse initiale supérieure à 0. Ici, nous avons fixé la vitesse initiale à 40. Vous remarquerez que les particules sont émises vers la droite, puis descendent à cause de la gravité.
Propagation
Ce paramètre est l'angle en degrés qui sera ajouté aléatoirement dans l'une ou l'autre direction à la Direction de base. Une propagation de 180 émettra dans toutes les directions (+/- 180). Pour que la propagation fasse quoi que ce soit, le paramètre "Initial Velocity" doit être supérieur à 0.
Platitude
Cette propriété n'est utile que pour les particules 3D.
Gravité
La gravité appliquée à chaque particule.
Vélocité initiale
La vitesse initiale est la vitesse à laquelle les particules seront émises (en pixels/sec). La vitesse peut être modifiée ultérieurement par la gravité ou d'autres accélérations (comme décrit plus loin).
Vélocité angulaire
La vitesse angulaire est la vitesse angulaire initiale appliquée aux particules.
Vitesse de rotation
La vitesse de rotation est la vitesse à laquelle les particules tournent autour de leur centre (en degrés/s).
Vélocité d'orbite
La vitesse orbitale est utilisée pour faire tourner les particules autour de leur centre.
Accélération linéaire
L'accélération linéaire appliquée à chaque particule.
Accélération radiale
Si cette accélération est positive, les particules sont accélérées en s'éloignant du centre. Si négative, elles sont attirées vers lui.
Accélération Tangentielle
Cette accélération utilisera le vecteur tangent au centre. La combinaison avec une accélération radiale peut produire de beaux effets.
Amortissement
L'amortissement applique un frottement aux particules, les forçant à s'arrêter. Il est particulièrement utile pour les étincelles ou les explosions, qui commencent généralement avec une vitesse linéaire élevée et s'arrêtent ensuite lorsqu'elles s'estompent.
Angle
Détermine l'angle initial de la particule (en degrés). Ce paramètre est surtout utile randomisé.
Mode mise à l'échelle
Détermine l’échelle initiale des particules.
Couleur
Utilisé pour changer la couleur des particules émises.
Hue Variation
La valeur Variation définit la variation de teinte initiale appliquée à chaque particule. La valeur Variation Random contrôle le ratio de la variation aléatoire de teinte.
Animation
Note
L'animation flipbook de particules n'est effective que si le CanvasItemMaterial utilisé sur le nœud GPUParticles2D ou CPUParticles2D a été configured accordingly.
To set up the particle flipbook for linear playback, set the Speed Min and Speed Max values to 1:
Mise en place d'une animation de particules pour la lecture pendant la durée de vie de la particule
Par défaut, la boucle est désactivée. Si la particule a terminé de lire l'animation avant la fin de sa durée de vie, elle continuera d'utiliser le dernier frame du flipbook (qui peut être entièrement transparent selon la conception de la texture du flipbook). Si la boucle est activée, l'animation reviendra au premier frame et continuera de jouer.
En fonction du nombre d'images contenues dans votre feuille de sprites et de la durée de vie de la particule, l'animation pourrait ne pas sembler fluide. La relation entre la durée de vie de la particule, la vitesse de l'animation et le nombre d'images dans la feuille de sprites est la suivante :
Note
À une vitesse d'animation de 1.0, l'animation atteindra la dernière image de la séquence au moment où la temps de vie de la particule se finit.
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:
Configuration de l'animation des particules avec un décalage aléatoire lors de l'émission
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).
Formes d'émission
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.
Assurez-vous qu'un ParticleProcessMaterial est défini, et que le nœud GPUParticles2D est sélectionné. Un menu "Particules" devrait apparaître dans la barre d'outils :
Ouvrez-le et sélectionnez "Load Emission Mask" :
Sélectionnez ensuite la texture que vous voulez utiliser comme masque :
Une boîte de dialogue avec plusieurs paramètres apparaît.
Masque d'émission
Trois types de masques d'émission peuvent être générés à partir d'une texture :
Solid Pixels : les Particles apparaîtront dans n’importe quelle zone de la texture, à l’exclusion des zones transparentes.
Border Pixels (Bordure Pixels) : Les particules apparaîtront à partir des bords extérieurs de la texture.
Directed Border Pixels (Pixels de bordures dirigés) : Similaire aux pixels de bordures, mais ajoute des informations supplémentaires au masque pour permettre aux particules d'émettre loin des bordures. Notez qu’il faut définir une vitesse initiale
Initial Velocityafin de l'utiliser.
Couleurs d'émission
"Capture from Pixel" fera en sorte que les particules hériteront de la couleur du masque à leur point de naissance.
Once you click "OK", the mask will be generated and set to the ParticleProcessMaterial, under the Emission Shape section:
Toutes les valeurs de cette section ont été générées automatiquement par le menu "Load Emission Mask", ils devraient généralement être laissés seuls.
Note
Une image ne devrait pas être ajoutée directement à Point Texture ou Color Texture. Le menu "Load Emission Mask" devrait toujours être utilisé à la place.