Thread: Explosion
View Single Post
# 4 10-09-2002 , 04:43 AM
ragecgi's Avatar
Registered User
Join Date: Sep 2002
Location: Minnesota, USA
Posts: 3,709

Try this...

Ok, the best explosion I been able to make goes like so:

1. Run the script found below.
(just copy and paste it into a text file, and name the file:
dynFuncExplosion.mel then, place it into your scripts dir.
Source it from within Maya.
Then, type: "dynFuncExplosion" without the quotes into the command line in maya, highlight the text, and MIDDLE-MOUSE-DRAG it to your shelf, and click on it!

2. Select the particle object and in the Attribute Editor, change the particle type to sphere, then go to RENDER ATTRIBUTES, and click on the "CURRENT RENDER TYPE" button.
It will add an attribute for "RADIUS" enabeling you to change the size of the spheres to your liking.
I changed myne to 3 or so.

3. Map a 2d explosion animation, or an explosion shader to your sphere's shading group, or a new shading group if you like.

4. play with the emitter settings to suit your shotuser added image

ENJOY! user added image

HERE is the explosion melscript:

I have NO clue where I found this script, but I think it was an Alias|Wavefront melscrtipt edited by someone else.

//SCRIPT BEGINS HERE
// dynFuncExplosion.mel
//
// Alias|Wavefront 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 //

//SCRIPT ENDS HERE


Israel "Izzy" Long
Motion and Title Design for Broadcast-Film-DS
izzylong.com