点源爆発

スクリプト作成: Bret A. Hughes(Autodesk (旧 Alias) Santa Barbara Development Center)

スクリプト dynFuncExplosion.mel はパーティクルを放射するエミッタを作成します。爆発(Explosion)エミッタには、爆発のシミュレーションのさまざまなプロパティを制御する追加アトリビュートがあります。アトリビュートには、開始フレーム、継続時間、輝度、密度、爆発力などがあります。

dynFuncExplosion.mel

// 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 // 
注:

expression コマンドの「-s」に続く複数行の引数の各ラインは引用符で囲み、その後ろに「+」をつける必要があります。この規則の唯一の例外は最終行で、最終行の末尾には「+」をつける必要はありません。「-s」は文字列を表すため、Maya にコマンドを正しく解釈させるには、複数行の文字列は「+」を使って結合する必要があります。