Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Wispy Smoke

Jesu Forager
Registered User
Join date: 17 Oct 2007
Posts: 25
01-14-2008 19:52
I've been messing with particles off and on for a few weeks and have yet to come close to that wispy smoke I see on some cigarettes. Anyone have any tips? I was thinking of trying very low vector force and long life span next. I know I'll need ot make a new texture, but that's easy compared to getting the particle system behaving how I want (in this case wispy smoke). Thanks for all you can help.

Jesu
Void Singer
Int vSelf = Sing(void);
Join date: 24 Sep 2005
Posts: 6,973
01-15-2008 02:52
best suggestion, check out the particle laboratory inworld... it shows you what each property does
_____________________
|
| . "Cat-Like Typing Detected"
| . This post may contain errors in logic, spelling, and
| . grammar known to the SL populace to cause confusion
|
| - Please Use PHP tags when posting scripts/code, Thanks.
| - Can't See PHP or URL Tags Correctly? Check Out This Link...
| -
Debbie Trilling
Our Lady of Peenemünde
Join date: 17 Oct 2006
Posts: 434
01-15-2008 04:55
Here is one I prepared earlier...

CODE

list StartSmokeVector = [ <1.00, 1.00, 0.913>, <1.00, 1.00, 0.850>, <1.00, 1.00, 0.924>];

list EndSmokeVector = [<0.916,0.916,0.916>, <0.716, 0.716, 0.716>, <0.816, 0.965, 0.616 >];

float TimeChange = 1.00;

ParticleStart()
{
llParticleSystem([
PSYS_PART_FLAGS, PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK,
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE,
PSYS_PART_START_ALPHA, 0.25 + llFrand(0.40),
PSYS_PART_END_ALPHA, llFrand(0.10),
PSYS_PART_START_COLOR, llList2Vector(StartSmokeVector,(integer)llFrand(llGetListLength(StartSmokeVector))),
PSYS_PART_END_COLOR, llList2Vector(EndSmokeVector,(integer)llFrand(llGetListLength(EndSmokeVector))),
PSYS_PART_START_SCALE, <0.05,0.05 + llFrand(0.05),0.00>,
PSYS_PART_END_SCALE, <0.01,0.15 + llFrand(0.15),0.00>,
PSYS_PART_MAX_AGE, 1.00 + llFrand(1.50),
PSYS_SRC_MAX_AGE, 0.00,
PSYS_SRC_ACCEL, <0.00,0.00,llFrand(0.10)>,
PSYS_SRC_ANGLE_BEGIN, 0.00,
PSYS_SRC_ANGLE_END, 0.10 + llFrand(0.15),
PSYS_SRC_BURST_PART_COUNT, 1 + (integer)llFrand(3.00),
PSYS_SRC_BURST_RADIUS, 0.05,
PSYS_SRC_BURST_RATE, 0.10 + llFrand(0.20),
PSYS_SRC_BURST_SPEED_MIN, 0.12,
PSYS_SRC_BURST_SPEED_MAX, 0.15 + llFrand(0.15),
PSYS_SRC_OMEGA, <0.00,0.00,llFrand(0.30)>,
PSYS_SRC_TEXTURE, "d114fcdd-8e66-5525-66c7-da5d0cd233c1"
]);

}




default
{
state_entry()
{
llSetTimerEvent(TimeChange);

}


timer()
{
ParticleStart();
TimeChange = 0.75 + llFrand(0.75);
}
}


You'll note the use of a timer. Some are quite vocal against the use of timers to control particles, as each llParticleSystem() call forces a client update. This can adversely effect lower-end spec PC's (so-called "client-lag";), altho' higher end specs have no problems coping, in my experience.

Your product. Your script. Your world. Your imagination and, ultimately your decision. But you should nevertheless be aware of this. :)

Looks cool tho' but you'll want to tweek and fine-tune to suit your needs. Perhaps even remove the timer and try PSYS_PART_WIND_MASK instead. I personally think it lessens the aesthetic but you might want to give it a go anyway.

Because the effect is so "wispy" you'll need to put it into a small prim; a 0.05 x 0.05 x 0.05 or smaller sphere works well.

Hope that helps