SparkEmitter
Le SparkEmitter est un système de particules qui peut être utilisé dans un Emitter. Il se distingue des autres systèmes par son effet très simplifié : au lieu de projeter des sprites ou des static-meshes, il projette des "sparks", ou étincelles, formées de lignes sans épaisseur qui peuvent être divisées en segments articulés les uns aux autres pour former des courbes. Il est d'un intérêt moindre et se trouve donc limité aux étincelles ou aux petites gouttes d'eau, ce qui explique qu'il soit très rarement utilisé.
Création et activation
Comme tous les autres systèmes de particules, le SparkEmitter doit être ajouté à un Emitter.
Il possède la même liste de propriétés, mais l'onglet Sprite est remplacé par l'onglet Spark. De plus, lorsqu'un SparkEmitter est créé, il n'est pas instantanément actif car son paramétrage par défaut n'engendre pas d'effet visible, à l'inverse du SpriteEmiter qui émet par défaut des particules portant la texture de l'actor Emitter lui-même. En effet, les étincelles n'ont aucune longueur par défaut. De plus, les particules ne peuvent pas se déployer si elles ne se déplacent pas.
Après avoir ajouté un mouvement grâce aux onglets Velocity ou Acceleration du SparkEmitter, il faut se rendre dans l'onglet Spark et mettre une valeur supérieure à 0 dans TimeBetweenSegmentsRange, par exemple 0.5. L'Emitter commence alors à émettre des lignes multicolores.
L'aspect multicolore est dû à la texture par défaut, composée de cinq étoiles de couleurs différentes sur fond transparent. Les étincelles tirent en effet leur couleur de la texture utilisée dans l'onglet Texture du système de particules, mais ramenée à une ligne unique. Avec une autre texture, de couleur plus unie, on peut modifier l'aspect des étincelles.
L'onglet Spark gère la composition des étincelles. Il ne comprend que trois paramètres qui sont tous exprimés comme des intervalles (avec un minimum et un maximum, pour donner une variation aléatoire) dont l'un, TimeBeforeVisibleRange, n'a aucun effet et est décrit comme non fonctionnel même dans la documentation de l'UDN.
- LineSegmentsRange : Nombre de segments composant chaque étincelle.
- TimeBetweenSegmentsRange : Le temps s'écoulant entre la création de l'extrémité "avant" d'un segment et la création de son extrémité "arrière". Plus ce temps est court, moins chaque segment sera long.
Pour chaque segment, une extrémité "avant" est propulsée selon les paramètres de mouvement choisis et le segment s'étire entre ce point et le point de départ de la particule. Une fois le temps paramétré dans TimeBetweenSegmentsRange écoulé, l'Emitter ajoute son extrémité "arrière" et le segment se détache de son point de départ. Si LineSegmentsRange est supérieur à 1, le segment suivant est immédiatement commencé à son tour et suit la même logique.
La longueur de l'étincelle complète dépend de ces deux paramètres qui, ensemble, définissent sa structure : combien de sous-parties et de quelle longueur. Il ne s'agit cependant pas d'une simple multiplication, car la vitesse des particules a également une influence : plus une étincelle est rapide, plus elle sera longue (à TimeBetweenSegmentsRange égal) car son extrémité "avant" aura parcouru une plus grande distance avant que son extrémité "arrière" ne soit générée. De même, si la particule est soumise à une accélération, les segments peuvent s'allonger ou se contracter au fur et à mesure de la vie de l'étincelle et sa longueur peut donc changer.
Dans tous les cas, le produit de TimeBetweenSegmentsRange x LineSegmentsRange doit être inférieur à la durée de vie totale de la particule (Time → LifeTimeRange), sans quoi celle-ci n'aura pas le temps de se détacher de son point de départ, la particule expirant avant que la dernière extrémité du dernier segment ait pu être générée.
Lorsque les particules ont des trajectoires relativement rectilignes, utiliser un nombre réduit de segments de grande longueur permet de réduire le nombre de particules utilisées et donc d'éviter un ralentissemement du jeu. À l'inverse, si les particules décrivent des courbes marquées, multiplier le nombre de segments et réduire leur longueur permet d'augmenter la définition de la courbe.
En dehors du mouvement et de la taille des étincelles, la couleur est le principal élément affectant l'effet final. On peut par exemple simuler des étincelles de soudure avec des couleurs chaudes, une vitesse élevée et une forte accélération vers le bas (en mettant une valeur négative sur Z ; -520 est proche de la pensanteur terrestre réelle).
Limitations
Plusieurs onglets des propriétés de l'Emitter ne sont pas utilisables avec le SparkEmitter. Il s'agit des onglets Collision, Force, Mass, Revolution et Size, ainsi que de Texture, à l'exception du champ Texture lui-même, qui influence la couleur globale des particules.
Les autres onglets fonctionnent normalement, mais il est à noter que certains paramètres sont malgré tout sans effet :
- L'onglet Rotation est pratiquement inutile car les étincelles ne peuvent pas recevoir de rotation, étant de simples lignes mono-dimensionnelles. En revanche, il est possible d'utiliser UseRotationFrom pour définir la direction dans laquelle les particules sont émises. Par défaut, PTRS_None signifie qu'aucune rotation n'est prise en compte : la direction de l'émission dépend uniquement des paramètres X, Y et Z dans les onglets Velocity et Acceleration. Avec PTRS_Actor, l'orientation de l'Emitter est également prise en compte. PTRS_Offset et PTRS_Normal permettent de d'utiliser les paramètres RotationNormal et RotationOffset pour spécifier l'orientation.
- Sound fonctionne pour jouer des sons lors du spawn des particules, mais l'onglet Collision ne fonctionnant pas pour les SparkEmitters, les paramètres gérant l'émission de sons lors de collisions sont sans effet.
- Velocity marche presque normalement, y compris la vitesse radiale. En revanche, il n'y a aucun effet si l'on tente d'utiliser un VelocityScale (qui permet de modifier la vitesse et la direction du mouvement des particules suivant le temps), le MaxAbsVelocity (qui permet de mettre un plafond de vitesse aux particules sur chaque axe) ou le VelocityLossRange (qui permet de faire perdre de la vitesse aux particules).
À ces quelques exceptions près, le SparkEmitter se comporte comme un SpriteEmitter très simplifié et beaucoup moins versatile. En plus des étincelles, son usage principal, d'où son nom, il peut servir pour simuler de la pluie ou des jets d'eau, mais il est concurrencé dans le premier cas par le xWeatherEffect, et dans l'autre par le SpriteEmitter qui peut utiliser des particules plus grandes ou avec des textures prévues pour un effet plus convaincant.
Le choix de la texture n'a presque aucune incidence sur l'effet final car l'onglet Color peut servir à donner la couleur désirée aux particules. Une exception cependant : si la texture possède des parties transparentes (comme la texture par défaut des cinq étoiles de couleur), il peut y avoir des "trous" dans chaque segment.
Notez enfin que l'article sur les SparkEmitters sur l'UDN décrit une version du SparkEmitter qui n'est pas exactement la même que celle d'UT2004. Ainsi, il y est dit que les paramètres de couleur et de fading agissent sur chaque segment et non pas sur l'étincelle de manière globale, ce qui n'est pas le cas dans le jeu final, où les paramètres des onglets Fading et Color marchent comme attendu. De la même façon, UT2004 considère comme "particule" une étincelle complète, quel que soit le nombre de segments qui la composent. UDN explique que le moteur traite chaque segment comme une particule distincte, ce qui nécessite d'augmenter fortement MaxParticles (dans l'onglet General), ce qui n'est plus le cas dans le jeu.
RSS Feed