LlParticleSystem/fr

From Second Life Wiki
Jump to: navigation, search

Description

Fonction: llParticleSystem( list règles );

Définit un effet de particules pour la prim contenant le script sur la base des règles passées en argument.

• list règles Les effets de particules sont gérés à l'aide d'une série de règles communiquées dans une liste au format [règle-1, donnée-1, règle-2, donnée-2 . . . règle-n, donnée-n ]

Spécifications

Cette fonction permet de configurer un système de particules qui paramètre la source de particules de la prim contenant le script. Tout autre script faisant appel à une source de particules modifiera la même source. Par conséquent, le système de particules est une propriété de la prim, comme la forme, la taille ou la couleur. Chaque prim a un seule source localisée à son centre géométrique et alignée le long de l’axe Z relatif à la prim et pointant dans la direction de cet axe.

Il s’agit de l’unique fonction capable de changer les données de la source de particules d’une prim. Pour changer l’état de cette source (par exemple émettre de nouvelles particules ou simplement l’éteindre), il suffit d’appeler cette fonction avec les paramètres adéquats. Lancer la fonction avec une liste vide, éteint la source( llParticleSystem([]); ).

Les particules sont principalement des “sprites” 2D et sont toujours générés de face (donc face à la caméra des résidents)

Les règles et leurs paramètres sont définis plus bas.

Paramètres & Constantes Type Description Value
Comportement du système de particules
PSYS_PART_FLAGS integer Différents codes permettent de piloter le comportement du système. Ces données sont codées sous forme décimale (integer) ou hexadécimale et sont combinées entre elles à l’aide de l’opérateur ‘|’ (‘OU’) . Les constantes possibles sont listées ci-dessous.: 0
V
a
l
e
u
r
s
PSYS_PART_BOUNCE_MASK Avec cette constante, les particules rebondiront sur le plan qui passe par la source et qui est perpendiculaire à l'axe z de celle-ci dans le référenciel de la région. Lors d’un rebond, la particule inversera sa vitesse et son angle. Ce réglage ne marche que pour les particules ‘tombant’ sur le plan (donc situées au dessus). 0x004
PSYS_PART_EMISSIVE_MASK Avec cette constante, les particules sont en mode « pleine lumière » (full-bright) et ne sont pas influencées par les conditions d’éclairage extérieur (lumière du soleil). Dans le cas contraire, les particules sont illuminées en fonction des conditions globales d’éclairage. A noter que les sources de lumière illuminent les prims qui n'émettent pas de particules 0x100
PSYS_PART_FOLLOW_SRC_MASK Avec cette constante, les particules se déplacent tout en suivant le ou les mouvement(s) de leur source. Dans le cas contraire, les particules ne sont pas affectées par la position et le mouvement de leur source. Ce code désactive le paramètre PSYS_SRC_BURST_RADIUS. 0x010
PSYS_PART_FOLLOW_VELOCITY_MASK Cette constante fait pivoter les particules (de forme allongée) afin qu’elles orientent leur ‘tête’ (partie avant) dans la direction du mouvement ou de l’émission. Dans le cas contraire, les particules sont émises en fonction de la rotation de leur source au moment de l’émission. 0x020
PSYS_PART_INTERP_COLOR_MASK Avec cette constante, le système effectue une interpolation de la couleur et de la transparence des particules à partir de leurs paramètres de départ et de leurs paramètres d’arrivée. 0x001
PSYS_PART_INTERP_SCALE_MASK Avec cette constante, le système effectue une interpolation de la taille (échelle) des particules à partir de leurs paramètres de départ et de leurs paramètres d’arrivée. 0x002
PSYS_PART_TARGET_LINEAR_MASK (Constante non documentée officiellement) Quand cette constante est utilisée, les particules émises se déplacent en ligne droite en direction de la cible désignée par le paramètre PSYS_SRC_TARGET_KEY. Dans ce mode, les paramètres PSYS_SRC_ACCEL, PSYS_SRC_BURST_RADIUS et potentiellement d’autres paramètres sont ignorés. 0x080
PSYS_PART_TARGET_POS_MASK Quand cette constante est utilisée, la course des particules est modifiée de façon à les faire s’orienter vers la cible désignée par PSYS_SRC_TARGET_KEY. A noter que si aucune cible n’est désignée, si la cible est trop éloignée ou si la cible est invalide, les particules prennent pour cible la prim elle-même. 0x040
PSYS_PART_WIND_MASK Quand cette constante est utilisée, le mouvement des particules est affecté par le vent qui applique une seconde force sur les particules. 0x008
PSYS_PART_BEAM_MASK (non implémenté) mais présent dans les listes des constantes 0x200
PSYS_PART_DEAD_MASK Cette constante enlève les particules incompatibles avec les autres masques PSYS_PART_*_MASK 0x80000000
PSYS_PART_RANDOM_ACCEL_MASK (non implémenté) On suppose que cette constante devait permettre d’appliquer des accélérations aléatoires aux particules. -
PSYS_PART_RANDOM_VEL_MASK (non implémentée) On suppose que cette constante devait permettre d’appliquer des vitesses aléatoires aux particules. -
PSYS_PART_TRAIL_MASK (non implémenté) On suppose que cette constante devait permettre de créer des traînées derrière les particules. -
Rendu général
PSYS_SRC_PATTERN integer Paramètre le rendu général. 9
V
a
l
e
u
r
s
PSYS_SRC_PATTERN_ANGLE Avec cette constante, les particules sont générées dans une zone circulaire en 2 dimensions dont les sections sont définies par les paramètres PSYS_SRC_ANGLE_BEGIN et PSYS_SRC_ANGLE_END. Le plan de génération des particules correspond à au plan X=0 dans un référenciel relatif à la rotation de la source dans la région. 0x04
PSYS_SRC_PATTERN_ANGLE_CONE Avec cette constante, les particules sont générées dans une zone sphérique (3D) dont les sections sont définies par les paramètres PSYS_SRC_ANGLE_BEGIN et PSYS_SRC_ANGLE_END. 0x08
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY (non officiellement documenté et ne semble pas opérationnel) Avec cette constante, les particules sont générées dans une zone sphérique 3D dont les sections sont définies par les paramètres PSYS_SRC_ANGLE_BEGIN et PSYS_SRC_ANGLE_END, mais inversement aux données indiquées par le paramètre ANGLE_CONE (la ou il y aurait du y avoir des particules, il n’y a rien et vice et versa (pas de particules dans ANGLE_CONE et avec particules dans ANGLE_CONE_EMPTY). 0x10
PSYS_SRC_PATTERN_DROP Avec cette constante, les particules sont générées sans force (et donc sans mouvement) à partir de leur point d'émission. Le système de particule ignore les paramètres PSYS_SRC_BURST_RADIUS, PSYS_SRC_BURST_SPEED_MIN et PSYS_SRC_BURST_SPEED_MAX. 0x01
PSYS_SRC_PATTERN_EXPLODE Avec cette constante, les particules sont générées dans toutes les directions (selon les paramètres d’explosion). 0x02
PSYS_SRC_BURST_RADIUS float Permet d’indiquer à quelle distance de la source les particules seront crées. Ce paramètres est ignoré quand la constante PSYS_PART_FOLLOW_SRC_MASK est active. Un test signalé dans le forum [1] indique que la valeur maximale serait de 50.00 16
PSYS_SRC_ANGLE_BEGIN float Fonctionne comme le début de "Début et fin du creux" d'une sphère (primitive) avec une rotation de Y à 270. Permet de déterminer en radian: un angle, dans une forme circulaire(2D), ou un cône dans une forme sphérique (3D) à l’intérieur duquel les particules ne seront pas émises. Si la constante de modèle appliqué est PSYS_SRC_PATTERN_ANGLE, le rendu sera une section circulaire (2D). Dans le cas des modèles PSYS_SRC_PATTERN_ANGLE_CONE ou PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY, le rendu sera une section sphérique (3D). Ce paramètre a les mêmes valeurs possibles que PSYS_SRC_ANGLE_END (de 0.0 à PI) mais sa valeur assignée sera réajustée automatiquement avec celle de PSYS_SRC_ANGLE_END de façon à ce qu'elle soit la plus petite des deux. 22
PSYS_SRC_ANGLE_END float Fonctionne comme la fin de "Début et fin du creux" d'une sphère (primitive) avec une rotation de Y à 270. Permet de déterminer en radian: un angle, dans une forme circulaire(2D), ou un cône dans une forme sphérique (3D) à l’intérieur duquel les particules ne seront pas émises. Si la constante de modèle appliqué est PSYS_SRC_PATTERN_ANGLE, le rendu sera une section circulaire (2D). Dans le cas des modèles PSYS_SRC_PATTERN_ANGLE_CONE ou PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY, le rendu sera une section sphérique (3D). Ce paramètre a les mêmes valeurs possibles que PSYS_SRC_ANGLE_BEGIN (de 0.0 à PI) mais sa valeur assignée sera réajustée automatiquement avec celle de PSYS_SRC_ANGLE_BEGIN de façon à ce qu'elle soit la plus grande des deux. 23
PSYS_SRC_INNERANGLE float DESACTIVE : Utilisez PSYS_SRC_ANGLE_BEGIN à la place. Fonctionne comme les paramètres de substitution, sauf que les bords de section sont alignés sur les faces de la source et non sur le centre de la section. 10
PSYS_SRC_OUTERANGLE float DESACTIVE: Utilisez PSYS_SRC_ANGLE_END à la place. Fonctionne comme les paramètres de substitution, sauf que les bords de section sont alignés sur les faces de la source et non sur le centre de la section. 11
PSYS_SRC_TARGET_KEY key Permet d’indiquer la clé de la cible (objet, prim ou agent) vers laquelle la particule s’orientera. Les particules auront tendance à atteindre le centre géométrique à la fin de leur vie. Nécessite l’utilisation de la constante PSYS_PART_TARGET_POS_MASK. caveat 4 20
Apparence des particules
PSYS_PART_START_COLOR vector Indique la couleur des particules lors de leur émission. 1
PSYS_PART_END_COLOR vector Indique la couleur des particules à la fin de leur vie. Ce paramètre n’est utilisé que si la constante PSYS_PART_INTERP_COLOR_MASK est active. 3
PSYS_PART_START_ALPHA float Indique la transparence des particules lors de leur émission. Les valeurs valides vont de 0.0 (transparent) à 1.0(opaque). 2
PSYS_PART_END_ALPHA float Indique la transparence des particules en fin de vie. Ce paramètre n’est utilisé que si la constante PSYS_PART_INTERP_COLOR_MASK est active. Les valeurs possibles sont les mêmes que celles de PSYS_PART_START_ALPHA. (caveat 1) 4
PSYS_PART_START_SCALE vector Indique l’échelle ou la taille des particules lors de leur émission. Les valeurs valides pour chaque direction vont de 0.04 (0.03125) à 4.0 mètres. Puisque les particules sont principalement des spites 2D, la composante z du vector peut être mise à 0.0. 5
PSYS_PART_END_SCALE vector Indique l’échelle ou la taille des particules en fin de vie. Ce paramètre n’est utilisé que si PSYS_PART_INTERP_SCALE_MASK est actif. Les valeurs possibles sont les mêmes que PSYS_PART_START_SCALE. 6
PSYS_SRC_TEXTURE string Indique le nom d’une texture présente dans l’inventaire de la prim (ou une UUID) à utiliser comme particules. 12
Particle Flow
PSYS_SRC_MAX_AGE float Indique la durée en secondes pendant lesquelles la source émet à partir du moment où elle entre dans le champ visuel du client. À la fin de cette durée, plus aucune particule ne sera émise. Une valeur nulle correspond à une durée infinie. (caveat 2) 19
PSYS_PART_MAX_AGE float Indique l’espérance de vie (en seconde) d’une particule émise (max 30.0 sec.). Durant cette période, la particule pourra bouger et ses paramètres évoluer. 7
PSYS_SRC_BURST_RATE float Indique l’intervalle de temps séparant deux explosions successives. La valeur 0.0 provoquera des explosions de particules aussi proches que possible par le client SL. 13
PSYS_SRC_BURST_PART_COUNT integer Indique le nombre de particule émises dans chaque explosion. 15
Déplacement de Particules'
PSYS_SRC_ACCEL vector Indique le vecteur d’accélération directionnelle appliqué aux particules à l’émission et pendant toute la durée de leur vie. Les valeurs possibles vont de 0.0 à 100.0 dans chacune des directions dans le référentiel de la région. 8
PSYS_SRC_OMEGA vector Indique la vitesse de rotation appliquée à la source (en radian / seconde) sur chaque axe. Cette option détache la source de l’axe Z (auquel elle faisait face), cet effet est particulièrement remarquable dans les émissions directionnelles. La rotation de la prim (via llTargetOmega) est sans effet sur la rotation de la source. (caveat 3) 21
PSYS_SRC_BURST_SPEED_MIN float A chaque explosion, les particules ont une vitesse initiale aléatoire comprise entre SPEED_MIN et SPEED_MAX en mètres/seconde. SPEED_MIN et SPEED_MAX sont comparés de façon à ce que SPEED_MIN représente bien la plus petite valeur des deux. 17
PSYS_SRC_BURST_SPEED_MAX float A chaque explosion, les particules ont une vitesse initiale aléatoire comprise entre SPEED_MIN et SPEED_MAX en mètres/seconde. SPEED_MIN et SPEED_MAX sont comparés de façon à ce que SPEED_MAX représente bien la plus grande valeur des deux. 18

Avertissements

  1. Un bug ( VWR-2164) dans le système de particules fait que n’importe quelle modification de la transparence avec PSYS_PART_END_ALPHA et PSYS_PART_INTERP_COLOR_MASK ajoutera systématiquement' la valeur de PSYS_PART_END_ALPHA au résultat final.Ainsi, pour une transparence allant de 1 à 0.5, la transparence à mi parcours devrait être de 0.75. A cause de ce bug, elle est de 1.25. Il est donc impossible de faire disparaître progressivement des particules, y compris en jouant sur la valeur finale (modifier la transparence de 0 à 1, la modifiera en fait de 1 à 2.)
    • Ce bug semble avoir été fixé dans WindLight (First Look test Viewer)
  2. Un bug provoque une réinitialisation intempèstive de la source de particules (effet non déclenché par un script). Ce bug concerne les sources avec une durée de vie de l'émission (PSYS_SRC_MAX_AGE) non nulle, la réinitialisation est provoquée lorsque qu’une propriété de la prim est changée ou envoyée au client SL. Vous pourriez être amené à utiliser un timer ou à mettre le script en pause afin de purger le système de particules une fois la durée de vie dépassée.
  3. La rotation définie par le paramètre PSYS_SRC_OMEGA est relative aux référenciel du client SL et non pas aux référenciel de la prim .
  4. Le déplacement de particules vers un avatar humanoïde paramétré avec PSYS_SRC_TARGET_KEY et PSYS_PART_TARGET_POS_MASK se termineront au centre géométrique de l’avatar, centre situé au niveau de l’aine (intersection bas ventre/cuisse). Si vous souhaitez changer le point d’arrivée sur la cible, il vous faudra utiliser comme cible une prim se déplaçant en direction de l’avatar et utiliser la clé de la prim avec le paramètre PSYS_SRC_TARGET_KEY.
  5. Le client de Second life optimise le rendu en supprimant les objets trop petits pour être vus à distance. Si votre source est trop petite et est supprimée car trop loin de vous, le système de particules associé sera supprimé également.

Exemples

Exemple de scripts de particules

Cet exemple provoque une explosion de sphères rouges luisantes.

<lsl>
       llParticleSystem( 
         [
          PSYS_PART_FLAGS,       
          PSYS_PART_WIND_MASK

Codes utiles

Quelques fonctions utiles pour enregistrer ou retrouver la correspondance entre les codes de couleur ou de transparence et leur valeur sous forme d’integers :
<lsl> integer ColorAlphatoRGBA(vector color, float alpha) { return (((integer)(alpha * 255.0) & 0xFF) << 24)

Notes

  • Le nombre de particules visibles par défaut dans un client SL est de 4096. Ce décompte concerne L’ENSEMBLE des particules visibles à proximité de l’avatar (toutes sources confondues). La base d’un bon système de particules est d’éviter de trop encombrer les clients SL avec ses propres particules et de laisser les autres systèmes s’exécuter normalement. En conséquence, si vous rencontrez des difficultés à visualiser les particules de votre système de particules, il se peut que d’autres sources encombrent déjà votre client SL, le lag peut également provoquer ce genre de symptômes car les particules ont une priorité de rendu très basse. La meilleure solution consiste à aller dans une zone avec moins de lag et sans sources de particules où vous pourrez tester votre propre système de particules.
  • Une fois les particules émises, leur déplacement peut être influencé par les paramètres PSYS_SRC_ACCEL ou les codes PSYS_PART_TARGET_POS_MASK ou PSYS_PART_FOLLOW_SRC_MASK. Mais il n’y a pas de bonne solution pour obtenir un effet de « vortex tournoyant » comme on peut en voir dans le client lorsqu’un objet est de-rezzé ou lorsqu’un avatar se téléporte.

Voir également

Articles

•  Les couleurs
•  Transparence
Vous cherchez encore des informations ? Peut-être cette page du LSLwiki pourra vous renseigner.