User:Daemonika Nightfire/Scripts/Daes Particle: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Daemonika Nightfire (talk | contribs)
Created page with '==Dae's Particle== I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects. <LSL> /*/|/ ╔══════════...'
 
Daemonika Nightfire (talk | contribs)
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Dae's Particle==
==*DS* Particle Wiki v5.0.01==
I never use a particle generator.
Diese Version verwendet die vollstaendig ausgeschriebenen Konstantennamen des Partikelsystems.
This Particle-Script serves me as a Basis for all of my Particle-Effects.
Sie dient in erster Linie dem Verstaendnis der einzelnen Parameter und deren Wirkung.
<LSL>
 
/*/|/
Durch die explizite Benennung aller Werte ist die Struktur leichter nachvollziehbar und eignet sich besonders fuer Einsteiger oder zur gezielten Analyse einzelner Einstellungen.
<source lang="lsl2">
/*
        ╔════════════════════════════════−−−−−−−−−→
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)
        ╚═══════════════════−−−−−−−−−→
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem
*/
Particle()
{
    llLinkParticleSystem(LINK_THIS,[
    PSYS_PART_FLAGS,            PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie "Ganz hell" im Baumenue
                                //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen
                                | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel
                                | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung
                                //| PSYS_PART_WIND_MASK                // Particle folgen dem wind
                                | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung
                                | PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)
                                //| PSYS_PART_TARGET_LINEAR_MASK      // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL & !PSYS_SRC_BURST_RADIUS)
                                //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel
                                //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)
                                ,
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE            // Explosion
                                //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS & !PSYS_SRC_BURST_SPEED_MIN & !PSYS_SRC_BURST_SPEED_MAX)
                                //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt
                                //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt
                                //PSYS_SRC_PATTERN_ANGLE              // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt
                                ,
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                    // volle Quellfarbe wird addiert, sehr helles Ergebnis
                                //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert
                                //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe
                                //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe
                                //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor
                                //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor
                                PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor
                                //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle
                                ,
    PSYS_PART_BLEND_FUNC_DEST,  //PSYS_PART_BF_ONE                    // Ziel bleibt voll erhalten
                                //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben
                                //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert
                                //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert
                                //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert
                                //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert
                                //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet
                                PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung
                                ,
    //PSYS_SRC_TARGET_KEY,        "",                // Particle zum Ziel (UUID)            | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden
    PSYS_SRC_MAX_AGE,          0.0,                // Abschalt-Timer                      | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)
    PSYS_PART_START_COLOR,      <1.0,0.0,0.0>,      // Farbe Begin                          | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_COLOR,        <0.0,0.0,1.0>,      // Farbe Ende                          | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    ''
    PSYS_PART_START_SCALE,      <0.50,0.50,0.00>,  // Groesse Begin <x,y,z>                | min. = 0.03125 | max. = 4.00 | z = ungenutzt  PSYS_PART_INTERP_SCALE_MASK
    PSYS_PART_END_SCALE,        <0.30,0.90,0.00>,  // Groesse Ende  <x,y,z>                | min. = 0.03125 | max. = 4.00 | z = ungenutzt  ''
    PSYS_PART_START_ALPHA,      1.00,              // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_ALPHA,        0.00,              // Transparenz Ende                    | 0.0 bis 1.0    ''
    PSYS_PART_START_GLOW,      0.10,              // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_GLOW,        0.00,              // Gluehen Ende                        | 0.0 bis 1.0    ''
/**/PSYS_SRC_BURST_RATE,        0.05,              // Zeitintervall zwischen zwei Bursts  | min. = 0.01 Secunden
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total
    PSYS_SRC_BURST_RADIUS,      0.50,              // Radius                              | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)
    PSYS_SRC_BURST_SPEED_MIN,  0.01,              // minimal Austritts-Geschwindigkeit    |
    PSYS_SRC_BURST_SPEED_MAX,  0.05,              // maximal Austritts-Geschwindigkeit    |
    PSYS_SRC_ANGLE_BEGIN,      0.00,              // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE
    PSYS_SRC_ANGLE_END,        0.00,              // aeusserer Abstand zum Zentrum        | ''
    PSYS_SRC_OMEGA,            <1,1,1>,            // Rotation                            | Globale Achse <x,y,z>
    PSYS_SRC_ACCEL,            <0.00,0.00,0.50>,  // Beschleunigung                      | Globale Ausrichtung <x,y,z>
    PSYS_SRC_TEXTURE,          ""                  // Textur UUID erforderlich            | Beispiel: "b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"
    ]);
}
// hier unten beginnt das eigentliche script
default
{
    state_entry()
    {
        Particle(); // startet hier das oben angepasste Particlesystem
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
    }
}
</source>
 
==*DS* Particle Wiki v5.0.02==
Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte.
Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.
 
Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.
 
<source lang="lsl2">
/*


     ╔════════════════════════════════−−−−−−−−−→
     ╔════════════════════════════════−−−−−−−−−→
     ║ Dae's Particle by Daemonika Nightfire
     ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)
     ╚═══════════════════−−−−−−−−−→
     ╚═══════════════════−−−−−−−−−→
     target und flags nur bei den oberen 9 variablen einstellen!
      
     wenn die particle dauerhaft laufen sollen, loesch das script anschliessed raus, der prim braucht es dann nicht mehr!
     Daemonika's Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)
    Nachfolgende Zeilen dienen ausschliesslich zur Information!
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.
   
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]


    weniger laufende scripte auf der Sim bedeutet, weniger Lag!
System Behavior
integer        0 = PSYS_PART_FLAGS                  // fuer folgende Befehle wichtig:
integer    0x004 = PSYS_PART_BOUNCE_MASK            // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Particle abprallen
integer    0x100 = PSYS_PART_EMISSIVE_MASK          // Particle sind lichtunabhaengig wie "Ganz hell" im Baumenue
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK        // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Particles aus
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK      // beeinflusst Farbe und Alpha
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK      // beeinflusst Groesse
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Particle bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung
integer    0x040 = PSYS_PART_TARGET_POS_MASK        // Particle bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung
integer    0x008 = PSYS_PART_WIND_MASK              // Particle werden vom simulierten Wind beeinflusst
integer    0x200 = PSYS_PART_RIBBON_MASK            // verbindet aufeinanderfolgende Particle zu einem Band


*/
System Presentation
integer      9 = PSYS_SRC_PATTERN                    // fuer folgende Befehle wichtig:
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE            // Explosion
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle entstehen innerhalb eines Kegels
integer    0x04 = PSYS_SRC_PATTERN_ANGLE              // Ring oder Scheibenform in einer Ebene
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Particle entstehen direkt unter dem Emitter ohne Startgeschwindigkeit
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle entstehen nur auf der Mantelflaeche


//*
System Blending Source
// mit dem key target richtest particle auf ein ziehl
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE          // fuer folgende Befehle wichtig:
key target = "";        // moegliche werte: "Avatar-Key" | "owner" | "self" | "root" | "child"
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen
integer    0x00 = PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert
integer    0x03 = PSYS_PART_BF_DEST_COLOR              // Quellfarbe wird mit der Hintergrundfarbe multipliziert
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR            // Quellfarbe verstaerkt sich selbst
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Quellfarbe wird mit invertierter eigener Farbe multipliziert
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA            // Quellfarbe wird mit eigener Alpha gewichtet
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // Quellfarbe wird mit invertierter eigener Alpha gewichtet


//**
System Blending Dest
// mit den flags steuerst das verhalten der particle
integer      25 = PSYS_PART_BLEND_FUNC_DEST            // fuer folgende Befehle wichtig:
integer flags;          // moegliche werte: TRUE (ja) oder FALSE (nein)
integer   0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten
integer glow   = TRUE;  // bei FALSE sind die particle nachts auch dunkel
integer    0x00 = PSYS_PART_BF_ZERO                    // Hintergrund wird komplett ersetzt
integer bounce  = FALSE; // bei TRUE fallen sie nicht durch den boden
integer   0x03 = PSYS_PART_BF_DEST_COLOR              // Hintergrund wird mit eigener Farbe multipliziert
integer color  = TRUE;  // farbwechsel, bei FALSE ignoriert es PSYS_PART_END_COLOR
integer   0x02 = PSYS_PART_BF_SOURCE_COLOR            // Hintergrund wird mit Particlefarbe multipliziert
integer size   = TRUE;  // groessenaenderung, bei FALSE ignoriert es PSYS_PART_END_SCALE <x,y,z> ("2D" z wird nicht beruecksichtigt)
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Hintergrund wird mit invertierter eigener Farbe multipliziert
integer wind   = TRUE;  // reagiert auf den Wind, bei FALSE hat der wind keinen einfluss auf die particle
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Hintergrund wird mit invertierter Particlefarbe multipliziert
integer source  = FALSE; // muss ich mir noch was einfallen lassen :)
integer   0x07 = PSYS_PART_BF_SOURCE_ALPHA            // Hintergrund wird mit Particle Alpha gewichtet
integer vel    = TRUE;  // beeinflusst die textur orientierung
integer   0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha Blending, transparente Ueberblendung


//***
Particle Parameter
// folgende pattern aendern das erscheinungsbild der particle
integer      0 = // (System Behavior)          Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,
// Beispiel: PSYS_SRC_PATTERN_EXPLODE ist eine rundum explusion
vector      1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | <0.0,0.0,0.0> bis <1.0,1.0,1.0>
// such dir eine aus indem du die zwei // vor den befehlen entfehrnst oder setzt (wirst sehen, gibt nette effecte)
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      ''      | 0.0 bis 1.0
integer pattern = PSYS_SRC_PATTERN_EXPLODE;
vector      3 = PSYS_PART_END_COLOR            // End Farbe              ''      | <0.0,0.0,0.0> bis <1.0,1.0,1.0>
//integer pattern = PSYS_SRC_PATTERN_DROP;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende      ''      | 0.0 bis 1.0
//integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY;
vector      5 = PSYS_PART_START_SCALE          // Anfangsgroesse <x,y,z> braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt
//integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;
vector      6 = PSYS_PART_END_SCALE            // Endgroesse    <x,y,z> ''      | min. = 0.03125 | max. = 4.00 | z = ungenutzt
//integer pattern = PSYS_SRC_PATTERN_ANGLE;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Particle | max. 30.0 Sekunden
vector      8 = PSYS_SRC_ACCEL                // Globale Beschleunigung <x,y,z>
integer      9 = // (System Presentation)      Beispiel: 9, 0x08,
-------    10 =                                // --- unused reserved slot, not implemented ---
-------    11 =                                // --- unused reserved slot, not implemented ---
string      12 = PSYS_SRC_TEXTURE              // Textur UUID erforderlich | Beispiel: "b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"
float      13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01
-------    14 =                                // --- unused reserved slot, not implemented ---
integer    15 = PSYS_SRC_BURST_PART_COUNT      // Particle Anzahl pro Burst
float      16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter
float      17 = PSYS_SRC_BURST_SPEED_MIN      // Mindest Austritts Geschwindigkeit
float      18 = PSYS_SRC_BURST_SPEED_MAX      // Maximale Austritts Geschwindigkeit
float      19 = PSYS_SRC_MAX_AGE              // Abschalt Timer des Emitters | nicht mit Particle Lebensdauer verwechseln (0.0 = Dauerbetrieb)
key        20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS
vector      21 = PSYS_SRC_OMEGA                // Rotationsgeschwindigkeit in Radiant pro Sekunde um <x,y,z>
float      22 = PSYS_SRC_ANGLE_BEGIN          // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE
float      23 = PSYS_SRC_ANGLE_END            // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE
integer     24 = // (System Blending Source)    Beispiel: 0x07
integer     25 = // (System Blending Dest)      Beispiel: 0x06
float      26 = PSYS_PART_START_GLOW          // Glow Start | 0.0 bis 1.0
float      27 = PSYS_PART_END_GLOW            // Glow Ende  | 0.0 bis 1.0


Particle()
     Hier endet die Particle Wiki.
{
// dieser block benoetigt keinerlei aenderungen
    flags = 0;
    if (target == "owner") target = llGetOwner();    // ziehl = besitzer
    if (target == "self")  target = llGetKey();      // ziehl = der prim indem das script liegt
    if (target == "root")  target = llGetLinkKey(1); // ziehl = der rootprim wenn das script in einem child liegt ((1) ist immer root)
    if (target == "child") target = llGetLinkKey(2); // ziehl = ein child prim egal in welchem prim das script liegt, mit der nummer waehlst den prim aus (ab (2) fortlaufend)
    if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;      // erlaubt das ziehl setzen
    if (glow)        flags = flags | PSYS_PART_EMISSIVE_MASK;        // wie bei prims das "ganz hell"
    if (bounce)      flags = flags | PSYS_PART_BOUNCE_MASK;          // springen auf dem boden und fallen nicht durch
    if (color)        flags = flags | PSYS_PART_INTERP_COLOR_MASK;    // erlaubt den farbwechsel
     if (size)        flags = flags | PSYS_PART_INTERP_SCALE_MASK;    // erlaubt die groessenaenderung
    if (wind)        flags = flags | PSYS_PART_WIND_MASK;            // particle folgen dem wind
    if (source)      flags = flags | PSYS_PART_FOLLOW_SRC_MASK;      // startet die particle versetzt, hebt radius auf
    if (vel)          flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK; // richtet die "obenseite" einer textur aufs ziehl
      
      
// hier beginnt das Particlesystem und kann frei gestaltet werden
*/
    llLinkParticleSystem(LINK_THIS,[              // waehlt im Linkset den Prim wo die Particle austreten sollen.
</source>
    PSYS_PART_MAX_AGE,          2.0,              // lebensdauer jedes einzelnen particles
  ### Hier beginnt der Scriptbereich ###
    PSYS_PART_FLAGS,            flags,            // siehe oben **
Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.
    PSYS_SRC_PATTERN,          pattern,          // siehe oben ***
Das dient der Uebersichtlichkeit im eigentlichen Script
    PSYS_SRC_TARGET_KEY,        target,          // siehe oben *
<source lang="lsl2">
    PSYS_PART_START_COLOR,      <1.0,1.0,1.0>,    // farbe beim austreten aus dem prim      benoetigt (integer color = TRUE;)
    PSYS_PART_END_COLOR,        <0.0,0.0,0.0>,    // farbe am ende for dem verschwinden    ''
    PSYS_PART_START_SCALE,      <0.10,0.10,0.00>, // groesse beim austreten aus dem prim    benoetigt (integer size = TRUE;)
    PSYS_PART_END_SCALE,        <0.05,0.05,0.00>, // groesse am ende for dem verschwinden  ''
    PSYS_SRC_BURST_RATE,        0.5,              // "rate" abstabd in secunden zwischen jedem austritt
    PSYS_SRC_ACCEL,            <0.00,0.00,0.02>, // zwingt die particle in eine richtung (Global)
    PSYS_SRC_BURST_PART_COUNT, 10,              // anzahl der austretenden particle pro "rate"
    PSYS_SRC_BURST_RADIUS,      0.05,            // Radius die groesse des effects (0.50 = 1 meter kreis)
    PSYS_SRC_BURST_SPEED_MIN,  0.01,            // minimale geschwindigkeit der einzelnen particle
    PSYS_SRC_BURST_SPEED_MAX,  0.10,            // maximale geschwindigkeit der einzelnen particle
    PSYS_SRC_ANGLE_BEGIN,      0.00,            // innerer abstand zum startprim
    PSYS_SRC_ANGLE_END,        0.00,            // aeusserer abstand zum startprim
    PSYS_SRC_OMEGA,            <1,1,1>,          // Rotation des gesamt effects <x,y,z>
    PSYS_SRC_MAX_AGE,          0.0,              // zeit bis das particle system selbststaendig aufhoert (0.0 = dauerbetrieb)
    PSYS_SRC_TEXTURE,          "",              // Asset-UUID einer textur fuer poofer zwischen die "" eintragen
    PSYS_PART_START_ALPHA,      1.0,              // transparenz zu begin
    PSYS_PART_END_ALPHA,        0.0              // transparenz am ende
    ]);
}
 
// hier beginnt das eigentliche script
default
default
{
{
     state_entry()
     state_entry()
     {
     {
         Particle(); // startet hier das oben angepasste Particlesystem
         // In der Liste verwende ich nur benoetigte Parameter.
// zum loeschen der particle, einfach hier im state_entry den befehl "Particle();" mit "llParticleSystem([]);" austauschen.
       
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,
        1,<0.8,0.6,0.2>,  3,<1.0,0.0,0.0>,  5,<0.10,0.10,0.00>,  6,<0.05,0.05,0.00>,  8,<0.00,0.00,0.1>,
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,<0,0,1>,
        12,"b1d84ecb-2a83-d3c4-7bfb-592648dcb20d",  2,1.0,  4,0.5]);
       
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
     }
     }
}
}
</LSL>
</source>

Latest revision as of 17:28, 15 February 2026

*DS* Particle Wiki v5.0.01

Diese Version verwendet die vollstaendig ausgeschriebenen Konstantennamen des Partikelsystems. Sie dient in erster Linie dem Verstaendnis der einzelnen Parameter und deren Wirkung.

Durch die explizite Benennung aller Werte ist die Struktur leichter nachvollziehbar und eignet sich besonders fuer Einsteiger oder zur gezielten Analyse einzelner Einstellungen.

/*
        ╔════════════════════════════════−−−−−−−−−→
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)
        ╚═══════════════════−−−−−−−−−→
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem
*/
 
Particle()
{
    llLinkParticleSystem(LINK_THIS,[
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie "Ganz hell" im Baumenue
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL & !PSYS_SRC_BURST_RADIUS)
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)
                                 ,
 
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS & !PSYS_SRC_BURST_SPEED_MIN & !PSYS_SRC_BURST_SPEED_MAX)
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt
                                 ,
 
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle
                                 ,
 
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung
                                 ,
 
    //PSYS_SRC_TARGET_KEY,        "",                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)
    PSYS_PART_START_COLOR,      <1.0,0.0,0.0>,      // Farbe Begin                          | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_COLOR,        <0.0,0.0,1.0>,      // Farbe Ende                           | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    ''
    PSYS_PART_START_SCALE,      <0.50,0.50,0.00>,   // Groesse Begin <x,y,z>                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK
    PSYS_PART_END_SCALE,        <0.30,0.90,0.00>,   // Groesse Ende  <x,y,z>                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   ''
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    ''
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    ''
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | ''
    PSYS_SRC_OMEGA,             <1,1,1>,            // Rotation                             | Globale Achse <x,y,z>
    PSYS_SRC_ACCEL,             <0.00,0.00,0.50>,   // Beschleunigung                       | Globale Ausrichtung <x,y,z>
    PSYS_SRC_TEXTURE,           ""                  // Textur UUID erforderlich             | Beispiel: "b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"
    ]);
}
 
// hier unten beginnt das eigentliche script
default
{
    state_entry()
    {
        Particle(); // startet hier das oben angepasste Particlesystem
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
    }
}

*DS* Particle Wiki v5.0.02

Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte. Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.

Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.

/*

    ╔════════════════════════════════−−−−−−−−−→
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)
    ╚═══════════════════−−−−−−−−−→
    
    Daemonika's Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)
    Nachfolgende Zeilen dienen ausschliesslich zur Information!
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.
    
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]

System Behavior
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Particle abprallen
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Particle sind lichtunabhaengig wie "Ganz hell" im Baumenue
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Particles aus
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Particle bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Particle bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung
integer    0x008 = PSYS_PART_WIND_MASK               // Particle werden vom simulierten Wind beeinflusst
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Particle zu einem Band

System Presentation
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle entstehen innerhalb eines Kegels
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Particle entstehen direkt unter dem Emitter ohne Startgeschwindigkeit
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle entstehen nur auf der Mantelflaeche

System Blending Source
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet

System Blending Dest
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Particlefarbe multipliziert
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Particlefarbe multipliziert
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Particle Alpha gewichtet
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung

Particle Parameter
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | <0.0,0.0,0.0> bis <1.0,1.0,1.0>
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      ''       | 0.0 bis 1.0
vector       3 = PSYS_PART_END_COLOR            // End Farbe              ''       | <0.0,0.0,0.0> bis <1.0,1.0,1.0>
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       ''       | 0.0 bis 1.0
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse <x,y,z> braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     <x,y,z> ''       | min. = 0.03125 | max. = 4.00 | z = ungenutzt
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Particle | max. 30.0 Sekunden
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung <x,y,z>
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,
-------     10 =                                // --- unused reserved slot, not implemented ---
-------     11 =                                // --- unused reserved slot, not implemented ---
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: "b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01
-------     14 =                                // --- unused reserved slot, not implemented ---
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Particle Anzahl pro Burst
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Particle Lebensdauer verwechseln (0.0 = Dauerbetrieb)
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um <x,y,z>
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE
integer     24 = // (System Blending Source)    Beispiel: 0x07
integer     25 = // (System Blending Dest)      Beispiel: 0x06
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0

    Hier endet die Particle Wiki.
    
*/
### Hier beginnt der Scriptbereich ###
Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.
Das dient der Uebersichtlichkeit im eigentlichen Script
default
{
    state_entry()
    {
        // In der Liste verwende ich nur benoetigte Parameter.
        
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,
        1,<0.8,0.6,0.2>,  3,<1.0,0.0,0.0>,  5,<0.10,0.10,0.00>,  6,<0.05,0.05,0.00>,  8,<0.00,0.00,0.1>, 
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,<0,0,1>,
        12,"b1d84ecb-2a83-d3c4-7bfb-592648dcb20d",  2,1.0,  4,0.5]);
        
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
    }
}