nandnerd.info Particle System Interface
Welcome to nand Nerd's Particle System
Using the controls down the left hand side of this webpage you can modify the effects of a Particle System. This will mean nothing to you if you have never visited the world of Second Life and shall probably be of little to no use to you unless you have.
Within Second Life a programming language called Linden Scripting Language (LSL for short) turns static objects into interactive, animated or useful devices. One function within this language is llParticleSystem() which on its own can produce a client-side effect which differs depending on the parameters passed to it. As you can see from the number of options on the left there are a great deal of parameters for this function and this can be off-putting to anyone wishing to play around with making particles. Hopefully this webpage and the related in-world object can provide new users with an easy to use environment to begin learning the various parameters uses. Users of Second Life who are used to the scripting call and know it's many implementations might find this a more enjoyable method of fiddling with particle system. Who knows? I hope someone will find this useful.
If you haven't done so already you can pick up a copy (sorry, not available from location until further developed (i.e. so I can keep track of who has a copy) if you would like a copy IM me) of the particle system object from nand Nerd's shop in Rendervisions Isle. Once you have rezzed your copy you can click the "Load URL" section to reopen this page with the object's key (aka UUID) in tow. This will allow for communication with the in-world object, without it the webpage wouldn't know which object the data you enter is associated with.
It is also possible to use this webpage without the in-world object however this would entail copying and pasting the code for each change into a script-inworld and compiling it. Not a difficult task but it can get tedious as you tweak your parameters to perfection. (include more information on how to copy and paste to a script)
I would like to thank my friend Geuis Dassin (of Second Life) for his initial help with the communications which power this system. I would also like to thank Debbie Trilling (of Second Life) for some superb feedback on this system, feedback I was able to use to better this system. Thanks also go to those of you who have picked up a copy of the object and given it a go.
The Pattern option defines how the particles are emitted from the source.
Drop: Very simply starts the particle at the centre of the primitive with zero velocity.
Angle: Shoot particles across at 2-d area defined by angle end. An open area will exist in the arc as defined by angle begin.
Angle Cone: Shoot particles across a 3-d cone defined by angle end. An open area will exist in the arc defined by angle begin.
Angle Cone Empty: Shoot particles out everywhere except the 3-d hollow cone defined by angle begin and end.
Explode: Shoot particles out in all directions using burst parameters.
Wind:Yes, we have wind in Second Life. You can see it's effects on the trees as they sway. Scripted objects, flexible primitives and particles can also be influenced by it's force. By enabling the wind flag your particles will be pushed along to follow the wind.
Bounce: Particles bounce off object's z-axis height. (no, I don't know what this means either, more experimentation required)
Emissive: Particles glow, similar to turning a primitives texture "full bright" on. If this is left off the primitive will be lit depending on the sun/moon position. (local lighting influence it? more experimentation required)
Follow Source: Particles keep their relative position to the emmitter.
Follow Velocity: Particles rotate so vertical axis points in direction of particle's velocity. Think of an explosion of arrows, with this enabled they all point in the direction they are flying, with this disabled some would fly side-ways.
Linear:(Not listed in official documentation.) Seems to send particles in a straight line to target (cancels PSYS_SRC_ACCEL, PSYS_SRC_BURST_RADIUS, and possibly other parameters).
The following are associated with other areas of the page, though they are in fact flags:
Interpolate Colors: Particles change color from start to end over the particle lifetime.
Interpolate Scale: Particles change scale (size) from start to end over the particle lifetime.
Follow Target: Particles move towards a target, defined by key (an identifier unique to each avatar and object). Particles reach target in their lifetime.
Here you can set the color and transparency (known as Alpha in LSL) for the beginning and end of the particle's life. If you uncheck "Interpolate Color" then the color and alpha will remain constant.
Values for Red, Green, Blue and Alpha range from 0.0 to 1.0, though you can switch to RGB Integer format in which the values of Red, Green and Blue range from 0 to 255 or HTML Hexadecimal (base 16) format where RGB is from 00 00 00 to FF FF FF.
Alpha will interpolate from visable to less visable only, i.e. from greater value to lesser value.
I intend to add a color pallette to this page in the future.
Here you can set the start and end size of the particles. As particles are 2-dimensional, there is no need for a Z value. X is width and Y is height.
Values range from near zero to 4.0
Acceleration: This will apply a force to each particle to accelerate it (incremental velocity).
Omega: Spins the particles around the emitter (more testing required to clarify). Values are the rotation per second (and either in Radians, * Pi Radians, Degrees or Percent).
This affects the Pattern of particle emmition (sp?) and will need a diagram to explain.
From the drop-down you can choose your units, Radians, * Pi Radians, Degrees or Percent. With "* Pi Radians" the value you enter multiplied by PI. With "Percent" you specify the fraction of a complete rotation in a percentage.
This is a group of settings which didn't fit into any particular group above.
Burst Speed MinMinimum speed of particles at start.
Burst Speed MaxMaximum speed of particles at start.
Burst RateTime in seconds between bursts of particles.
Particle LifeTime in seconds that particles last for.
Source LifeTime in second that the emitter will work for (set to zero and emitter will run indefinetly).
RadiusDistance in meters from centre of emitting prim that particles start at.
Particle CountNumber of particles emitted per burst.
Textures can be defined either by name or by Asset UUID (key). Since a texture defined by name needs to have the texture in it's inventory I have opted to only take key for this argument. If anything other than a texture key is entered for Texture UUID then it will return to default.
To find the UUID/key of a texture right-click the texture in your inventory and choose "Copy Asset UUID". This will only work for textures that you have full permissions for (if you do not have full permissions it will say either (no modify), (no copy), (no transfer) after the texture name in your inventory.
Follow Target Flag: This setting aims the particles to reach a target (defined below) over the particles lifetime.
Follow UUID: Follow the target based on Asset UUID (key). Target can be either an avatar or an object. (Add method of finding key).
Follow Self: This option will pass the objects own Asset UUID as the target. Thus the particles aim to return to the centre of the emitter.
Follow Owner: Target the owner of the object.
It should be noted that when targeting an avatar the particles will impact at the centre of the avatars bounding box (a box the height, width and depth of the avatar). This generally means around waist height. A method of more accurately targetting points on an avatar is to use attachments which announce their own keys for the emitter to listen to.
Particle System List Output
Please note, Copy to Clipboard is under construction and may not work with certain browsers. An alert will notify you to confirm the copy to clipboard was successful. If this fails please send a note of your Browser type and version to nand Nerd. Use Ctrl-A (Select All) and Ctrl-C (Copy to clipboard) if this code fails.
No database change