PDA

View Full Version : Algorithms for Smoke Plume Special Effects



pleopard
10-16-2006, 12:39 PM
I am tasked with adding some sort of special effect to a viz I am working on that will show the trajectory of a missile flight. I am considering using a set of regularly spaced billboarded smoke puffs but I am interested in knowing if anyone has come up with a better way to do this.

Anyway, here is a description of what I already have ...

I have a missile trajectory stored in a CSV file that expresses the missile states at equidistant time samples in terms of its XYZ coordinates and euler angles. That is ... for evenly separated values of time, I have X,Y,Z,Roll,Pitch,Yaw. I am reading this data and creating an interpolatable table with it so that for any time T I can get interpolated values of the vehicle states. I take this data along with an appropriate transform and use it to place and orient a 3D mesh model of the missile for any time value T.

The time T is driven by a simple clock class that can be started, stopped, restarted, and scaled. The frame loop is not controlled by the clock but runs freely so whenever my missile model gets a tick update command it has to reference the clock, get the current time, and update itself accordingly. If the clock is paused/stopped then each tick update simply renders the missile at the frozen time. Because of this, the smoke plume I want to render must start at the missile launch point and be rendered all the way up to the missile position of the frozen time.

So, barring any good ideas that may come from you, I currently plan to place billboarded smoke puffs at equal distances apart along the trajectory path. Note that since the missile accelerates (velocity is not constant) that I will use equal distances in space as opposed to equidistant time sameples.

Can anyone enlighten me on a better way to do this or is this the generally accepted way of creating missile plume special effects?

Thanks in advance,
Paul

Rodrix
10-16-2006, 04:18 PM
Use a particle system and attach the particle emitter to the tail of the missile and set particle system life up to frozen time. The longer you set the individual particle's life the longer the trail of smoke.

Rodrix
10-16-2006, 04:22 PM
... oh, about the rendering:
Use blending to enable smoke particles blend with each others. You could use a point-sprite particle system for getting an easy and fast effect. If you want really big puffs of smoke you then should consider using billboarded quad particles, but implementation time is longer since you have to make sure quads face the camera.

Hope it helps!

zed
10-16-2006, 08:22 PM
So, barring any good ideas that may come from you, I currently plan to place billboarded smoke puffs at equal distances apart along the trajectory path. Note that since the missile accelerates (velocity is not constant) that I will use equal distances in space as opposed to equidistant time sameples. yeah thats the best way, u will want to cap the max number of particles u can create or else theres a danger u enter a feedback loop

heres what im doing, btw just noticed i dont need the if (..) check as it can be implemented higher up the foodchain

Particle *most_recent_particle = return_Particle_from_ID( pt->ID_of_last_particle_created );
if ( most_recent_particle )
{
VEC3 dif( pt->pos - most_recent_particle->pos );
float dist = LENGTHOFVECTOR( dif );
float dist_between = pt->using_particletemplate_ptr->dist_between_particle_creation;
int num = 0;
if ( dist_between > EPSILON )
num = dist / dist_between;
num = min( num, 10 );
dif /= float(num); // devide by zero
while ( num-- )
{
// create particles along that vector
}