Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Particle System S.O.S

Zante Zapedzki
We need html on a prim!
Join date: 15 Feb 2007
Posts: 123
05-28-2007 19:43
I'm trying to use a particle effect to create a diffuse glow around my lights. I cannot for the life of me figure out how to make sure there is always only ONE particle present at all times. You'd think that setting it to have an age of 1 and a burst of 1 would do the trick but it's not working. I get an irregular flickering and it's causing me grief!

From: someone
// Particle Script 0.3
// Created by Ama Omega
// 10-10-2003

// Mask Flags - set to TRUE to enable
integer glow = FALSE; // Make the particles glow
integer bounce = TRUE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = FALSE; // Particles follow the source
integer followVel = FALSE; // Particles turn to velocity direction

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_EXPLODE;

// Select a target for particles to go towards
// "" for no target, "owner" will follow object owner
// and "self" will target this object
// or put the key of an object for particles to go to
key target = "";

// Particle paramaters
float age = 1; // Life of each particle
float maxSpeed = 0; // Max speed each particle is spit out at
float minSpeed = 0; // Min speed each particle is spit out at
string texture = "Light_Glow"; // Texture used for particles, default used if blank
float startAlpha = 1; // Start alpha (transparency) value
float endAlpha = 1; // End alpha (transparency) value
vector startColor = <1,1,1>; // Start color of particles <R,G,B>
vector endColor = <1,1,1>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <2,2,0>; // Start size of particles
vector endSize = <2,2,0>; // End size of particles (if interpSize == TRUE)
vector push = < 00,00,0>; // Force pushed on particles

// System paramaters
float rate = 1; // How fast (rate) to emit particles
float radius = 0; // Radius to emit particles for BURST pattern
integer count = 1; // How many particles to emit per BURST
float outerAngle = 0; // Outer angle for all ANGLE patterns
float innerAngle = 0; // Inner angle for all ANGLE patterns
vector omega = <0,0,0>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles



// Script variables
integer flags;

updateParticles()
{
flags = 0;
if (target == "owner";) target = llGetOwner();
if (target == "self";) target = llGetKey();
if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (wind) flags = flags | PSYS_PART_WIND_MASK;
if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
if (target != "";) flags = flags | PSYS_PART_TARGET_POS_MASK;

llParticleSystem([ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, startColor,
PSYS_PART_END_COLOR, endColor,
PSYS_PART_START_SCALE,startSize,
PSYS_PART_END_SCALE,endSize,
PSYS_SRC_PATTERN, pattern,
PSYS_SRC_BURST_RATE,rate,
PSYS_SRC_ACCEL, push,
PSYS_SRC_BURST_PART_COUNT,count,
PSYS_SRC_BURST_RADIUS,radius,
PSYS_SRC_BURST_SPEED_MIN,minSpeed,
PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
PSYS_SRC_TARGET_KEY,target,
PSYS_SRC_INNERANGLE,innerAngle,
PSYS_SRC_OUTERANGLE,outerAngle,
PSYS_SRC_OMEGA, omega,
PSYS_SRC_MAX_AGE, life,
PSYS_SRC_TEXTURE, texture,
PSYS_PART_START_ALPHA, startAlpha,
PSYS_PART_END_ALPHA, endAlpha
]);
}

default
{
state_entry()
{
updateParticles();
}
}


I've included an image of it working but, like I say, it flickers on and off irregularly.
Talarus Luan
Ancient Archaean Dragon
Join date: 18 Mar 2006
Posts: 4,831
05-28-2007 20:39
Well, first off, you are creating a single particle at a time, which has an age of 1 second, and you are creating one particle at the rate of 1 per second. Also, particles can sometimes not show up due to several reasons, not the least of which is the proximity in your view distance of other particle systems.

If you want a diffuse glow, you want to create more particles in the same spot, but with longer duration. Since overlapping particles are additive, try interpolating the alpha from a low value, like 0.3, down to 0.0, and make the particles last like 20 seconds each. That will tend to give you a nice glow effect that even "pulses" a bit. If you want less pulsing, increase the rate, and shorten the life.
Zante Zapedzki
We need html on a prim!
Join date: 15 Feb 2007
Posts: 123
05-29-2007 04:31
This is weird, last night the flickering was constant and annoying yet when I logged in just now it seems fine.

Don't tell me that network traffic has an affect on the particle system?

Isn't it all done client-side?

Edit: It's gone back to being wonky, this is completely unreliable.
Talarus Luan
Ancient Archaean Dragon
Join date: 18 Mar 2006
Posts: 4,831
05-29-2007 08:07
Particle systems are a low priority in the rendering pipeline, so if the viewer is busy doing other things, particles won't get created. It is all client-side, and network lag has nothing to do with it, just client "lag".

There's no guarantee any particular particle will get generated, and you are setting up your particle system such that ANY failure to generate a single particle "breaks" the effect. Change your particle system such that particle "dropout" has little, if any, impact, and it will work (and look) fine.
Zante Zapedzki
We need html on a prim!
Join date: 15 Feb 2007
Posts: 123
05-29-2007 14:22
I've fixed this for the moment. I'm using a longer particle life with more of them being emitted.

Thanks for the tips Talarus. : )