By Bret A. Hughes, Autodesk (formerly Alias) Santa Barbara Development Center.
This script, dynFuncExplosion.mel, creates an emitter that emits particles. The emitter, Explosion, has extra attributes to control several properties of a simulated explosion. These attributes include the start frame, duration, intensity, fullness, and power of the explosion.
// dynFuncExplosion.mel
//
// Autodesk Script File
// MODIFY THIS AT YOUR OWN RISK
//
// Creation Date: 21 September 1996; Modified 08 January 2000
// Author: bah
//
// Procedure Name:
// dynFuncExplosion
//
// Description:
// Creates a point explosion that can be modified.
//
// Input Arguments:
// None.
//
// Return Value:
// None.
//
//
// ========== dynFuncExplosion ==========
//
// SYNOPSIS
// Creates a point explosion that can be modified.
//
//
global proc dynFuncExplosion()
{
// First delete anything that might be left over
// from a previous test.
//
file -f -new;
currentTime -e 1;
// Display information to the user about what to expect from this
// subtest and give some time for the user to read this information.
//
print( "\nBOOM!\n" );
system( "sleep 1" );
// Create emitter to be the source of the particles eminating from
// the explosion. Add an internal variable to the emitter to
// control amplitude attributes of the emitter. Render the particles
// as multi streaks.
//
emitter -type omni -r 100 -mnd 0 -mxd 0 -spd 1 -pos 0 0 0 -n Explosion;
addAttr -sn "ii" -ln "InternalIntensity" -dv 5 -min 0
-max 100 Explosion;
particle -name ExplosionParticle;
connectDynamic -em Explosion ExplosionParticle;
setAttr ExplosionParticleShape.particleRenderType 1; // MultiStreak
// Link some renderable attributes to the particles.
//
addAttr -ln colorAccum -dv true ExplosionParticleShape;
addAttr -ln lineWidth -dv 1.0 ExplosionParticleShape;
addAttr -ln multiCount -dv 10.0 ExplosionParticleShape;
addAttr -ln multiRadius -dv 0 ExplosionParticleShape;
addAttr -ln normalDir -dv 2.0 ExplosionParticleShape;
addAttr -ln tailFade -dv 0 ExplosionParticleShape;
addAttr -ln tailSize -dv 3 ExplosionParticleShape;
addAttr -ln useLighting -dv false ExplosionParticleShape;
// Create some user-modifiable attributes to modify the
// explosion.
//
select -replace "Explosion";
addAttr -sn "st" -ln "Start" -dv 10 -min 0 -max 100 Explosion;
addAttr -sn "du" -ln "Duration" -dv 20 -min 0 -max 200 Explosion;
addAttr -sn "in" -ln "Intensity" -dv 10 -min 0 -max 100 Explosion;
addAttr -sn "fu" -ln "Fullness" -dv 10 -min 1 -max 100 Explosion;
addAttr -sn "po" -ln "Power" -dv 10 -min 0 -max 100 Explosion;
// Create the time the explosion has been alive for
// and the fraction of the full explosion for that time.
// Make the explosion intensity a curve instead of
// linear interpolation for the explosion fraction.
// BEWARE of MAGIC NUMBERS!!!!
//
expression -ae true -s
("Explosion.rate = Explosion.Fullness * 40 *"+
"Explosion.InternalIntensity;"+
"ExplosionParticleShape.multiRadius = "+
"Explosion.Fullness * Explosion.Intensity * 0.005;"+
"Explosion.speed = Explosion.InternalIntensity"+
"* Explosion.Power / 10.0; ");
expression -ae true -s
("if (frame >= Explosion.Start"+
"&& frame <= Explosion.Start + Explosion.Duration)"+
"{"+
"float $ExplosionLife = frame - Explosion.Start;"+
"float $ExplosionFraction = 1 - (abs($ExplosionLife - "+
"Explosion.Duration/2) / (Explosion.Duration/2));"+
"Explosion.InternalIntensity = Explosion.Intensity *"+
"pow($ExplosionFraction,"+
"121 / pow(Explosion.Power + 1, 2));"+
"}"+
"else"+
"{"+
"Explosion.InternalIntensity = 0;"+
"}; ") -o Explosion;
// Set up the playback options.
//
float $frames = 70;
playbackOptions -min 1 -max $frames -loop once;
// Time how long it takes to play the scene and then determine the
// playback frame rate. Make sure when getting the frame rate
// that no values are divided by zero.
//
float $startTime = `timerX`;
play -wait;
float $elapsed = `timerX -st $startTime`;
float $fps = ($elapsed == 0.0 ? 0.0 : $frames/$elapsed);
// Print the frames per second (fps) of the subtest in the form X.X.
//
print("dynFuncExplosion: Done. (");
print((int)($fps * 10)/10.0 + " fps)\n");
} // dynFuncExplosion //