/* David Luong, FA/2004 MELScripting class, AAU, copyright 10.2004 ^^; ** As of Midterm only the water emitter and smoke is working for Cone and Cylinder, respectively.** ** Also you can only select one object at a time to create emitters, and color Ramp isn't working ** With Final, all of them should be working plus a GUI to customize your settings, attributes select multiple objects at the same time and have them all create specified emitters! ------ This MELScript creates emitter types based on shape of primitave and moves them to their position to quickly setup and previsualize a scene requiring particles. ----- polyCone = Water polyCylinder = Smoke polyCube = Fire polyPlane = Rain polyTorus = Snow polySmoke = Lava */ global proc makeMagic() { // Particle Array string $magic[]; $magic = `ls - sl`; if (substring($magic[0],1,5)=="pCone") { // Creates WATER emitter, and Field. string $emitterName[] = `emitter -pos 0 0 0 -type volume -name "fountain#" -r 500 -sro 0 -nuv 0 -cye none -cyi 1 -spd 1 -srn 0.5 -nsp 1 -tsp 0 -mxd 0 -mnd 0 -dx 0 -dy 1 -dz 0 -sp 0 -vsh cone -vof 0 0 0 -vsw 360 -tsr 0.5 -afc 1 -afx 0 -arx 0 -alx 2 -rnd 0 -drs 10 -ssz 0 `; string $particleName[] = `particle`; connectDynamic -em $emitterName $particleName; select -r $particleName[1]; setAttr ($particleName[1] + ".lifespanMode") 3; setAttr ($particleName[1] + ".particleRenderType") 1; // Creates Dynamics and Fields. string $gravityName[] =`gravity -pos 0 0 0 -m 6 -att 0 -dx 0 -dy -1 -dz 0 -mxd -1 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5 `; connectDynamic -f $gravityName $particleName; string $windName[] = `volumeAxis -pos 0 0 0 -m 3 -att 0 -ia 0 -afc 0 -afx 1 -arx 0 -alx 1 -drs 0 -dx 0 -dy 1 -dz 0 -trb 0.4 -trs 0.3 -tfx 1 -tfy 1 -tfz 1 -tox 0 -toy 0 -toz 0 -dtr 0 -mxd -1 -vsh cube -vof 0 0 0 -vsw 360 -tsr 0.5 `; connectDynamic -f $windName $particleName; connectAttr time1.outTime ($windName[1] +".time"); setAttr ($windName[1] + ".scaleX") 5; setAttr ($windName[1] + ".scaleY") 5; setAttr ($windName[1] + ".scaleZ") 5; // Adding particle attributes addAttr -ln "opacityPP" -dt doubleArray $particleName[1]; addAttr -ln "opacityPP0" -dt doubleArray $particleName[1]; addAttr -ln "rgbPP" -dt vectorArray $particleName[1]; addAttr -ln "rgbPP0" -dt vectorArray $particleName[1]; addAttr -ln ini_opacityPP0 -dt doubleArray $particleName[1]; addAttr -ln ini_opacityPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".ini_opacityPP"); addAttr -ln end_opacityPP0 -dt doubleArray $particleName[1]; addAttr -ln end_opacityPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] +".end_opacityPP"); addAttr -ln normalAge0 -dt doubleArray $particleName[1]; addAttr -ln normalAge -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".normalAge"); // Adding Scalar Slider attributes addAttr -ln ini_opacity -at double ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".ini_opacity"); addAttr -ln end_opacity -at double ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".end_opacity"); addAttr -ln Particlelifespan -at double ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".Particlelifespan"); addAttr -ln ini_radius -at double ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".ini_radius"); addAttr -ln end_radius -at double ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".end_radius"); // Adding Color attributes for slider addAttr -ln colorRGB -at double3 ("|" + $particleName[0] + "|" + $particleName[1]); addAttr -ln colorRGBX -at double -p colorRGB ("|" + $particleName[0] + "|" + $particleName[1]); addAttr -ln colorRGBY -at double -p colorRGB ("|" + $particleName[0] + "|" + $particleName[1]); addAttr -ln colorRGBZ -at double -p colorRGB ("|" + $particleName[0] + "|" + $particleName[1]); setAttr -type double3 ("|" + $particleName[0] + "|" + $particleName[1] + ".colorRGB") 0 0 0; setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".colorRGB"); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".colorRGBX"); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".colorRGBY"); setAttr -e -keyable true ("|" + $particleName[0] + "|" + $particleName[1] + ".colorRGBZ"); // Particle Expressions. dynExpression -s "lifespanPP=4;\r\nrgbPP=<<.7, .9, .9>>;\r\nini_opacityPP= ini_opacity;\r\nend_opacityPP= end_opacity;\r\nopacityPP= ini_opacityPP;\r" -c $particleName[1]; dynExpression -s "normalAge = age / lifespanPP;\r\nopacityPP = ini_opacityPP + (end_opacityPP - ini_opacityPP) * normalAge;\r" -rbd $particleName[1]; // Group Particle Type and Fields Together select -r $emitterName $gravityName $windName; string $groupMagic = `group`; xform -os -piv 0 0 0; // Move second selected object to location of first selected object select -r $magic $groupMagic; string $selected[] = `ls -sl`; setAttr ($selected[1] + ".translateX") `getAttr ($selected[0] + ".translateX")`; setAttr ($selected[1] + ".translateY") `getAttr ($selected[0] + ".translateY")`; setAttr ($selected[1] + ".translateZ") `getAttr ($selected[0] + ".translateZ")`; // Rename Group rename $groupMagic "waterEmit#"; // END WATER EMITTER } else { if (substring($magic[0],1,9)=="pCylinder") { // BEGIN FIRE SMOKE EMITTER string $emitterName[] = `emitter -pos 0 0 0 -type omni -r 1000 -sro 0 -nuv 0 -cye none -cyi 1 -spd 1 -srn 0 -nsp 1 -tsp 0 -mxd 0 -mnd 0 -dx 1 -dy 0 -dz 0 -sp 0 `; string $particleName[] = `particle`; connectDynamic -em $emitterName $particleName; select -r $particleName[1]; setAttr ($particleName[1] + ".lifespanMode") 3; setAttr ($particleName[1] + ".particleRenderType") 8; // Volume Axis Field and Gravity string $gravityName[] =`gravity -pos 0 0 0 -m 6 -att 0 -dx 0 -dy 1 -dz 0 -mxd -1 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5` ; connectDynamic -f $gravityName $particleName; string $windName[] = `volumeAxis -pos 0 0 0 -m 5 -att 0 -ia 0 -afc 3 -afx 1 -arx 3 -alx 2 -drs 0 -dx 1 -dy 0 -dz 0 -trb 0.3 -trs 0.5 -tfx 1 -tfy 1 -tfz 1 -tox 0 -toy 0 -toz 0 -dtr 0 -mxd -1 -vsh sphere -vof 0 0 0 -vsw 360 -tsr 0.5 `; connectDynamic -f $windName $particleName; connectAttr time1.outTime ($windName[1] +".time"); setAttr ($windName[1] + ".scaleX") 8; setAttr ($windName[1] + ".scaleY") 8; setAttr ($windName[1] + ".scaleZ") 8; // Adding particle attributes addAttr -ln "rgbPP" -dt vectorArray $particleName[1]; addAttr -ln "rgbPP0" -dt vectorArray $particleName[1]; addAttr -ln normalAge0 -dt doubleArray $particleName[1]; addAttr -ln normalAge -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".normalAge"); addAttr -ln "opacityPP" -dt doubleArray $particleName[1]; addAttr -ln "opacityPP0" -dt doubleArray $particleName[1]; addAttr -ln ini_opacityPP0 -dt doubleArray $particleName[1]; addAttr -ln ini_opacityPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".ini_opacityPP"); addAttr -ln end_opacityPP0 -dt doubleArray $particleName[1]; addAttr -ln end_opacityPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] +".end_opacityPP"); addAttr -ln radiusPP0 -dt doubleArray $particleName[1]; addAttr -ln radiusPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".radiusPP"); addAttr -ln ini_radiusPP0 -dt doubleArray $particleName[1]; addAttr -ln ini_radiusPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] + ".ini_radiusPP"); addAttr -ln end_radiusPP0 -dt doubleArray $particleName[1]; addAttr -ln end_radiusPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] +".end_radiusPP"); // RGB color temporary until Ramp is working addAttr -ln rgbPPPP0 -dt doubleArray $particleName[1]; addAttr -ln rgbPPPP -dt doubleArray $particleName[1]; setAttr -e -keyable true ($particleName[1] +".rgbPPPP"); // Dynamic Particle Expressions dynExpression -s "lifespanPP=6;\r\nini_opacityPP= .025;\r\nend_opacityPP=0;\r\nopacityPP=ini_opacityPP;\r\nini_radiusPP=rand(.5, 2);\r\nend_radiusPP=rand(3,8);\r\nradiusPP=ini_radiusPP;\r\nrgbPP=<<.5,.5,.5>>;" -c $particleName[1]; dynExpression -s "normalAge = age / lifespanPP;\r\nopacityPP = ini_opacityPP + (end_opacityPP - ini_opacityPP) * normalAge;\r\nradiusPP = ini_radiusPP + (end_radiusPP - ini_radiusPP) * normalAge;" -rbd $particleName[1]; /* // Create Ramp (not working yet) string $smokeRamp[] = `arrayMapper -target $particleName -destAttr rgbPP -inputV ageNormalized -type ramp`; setAttr ($smokeRamp[1] + ".interpolation") 4; // Ramp Position setAttr ($smokeRamp[1] + ".colorEntryList[4]" + ".position") 0.125; setAttr ($smokeRamp[1] + ".colorEntryList[0]" + ".position") 0.065; setAttr ($smokeRamp[1] + ".colorEntryList[3]" + ".position") 0.025; setAttr ($smokeRamp[1] + ".colorEntryList[1]" + ".position") 0; // Ramp Color setAttr ($smokeRamp[1] + ".colorEntryList[4]" + ".color") -type double3 0 0 0 ; setAttr ($smokeRamp[1] + ".colorEntryList[3]" + ".color") -type double3 0.942 0.475947 0.026376 ; setAttr ($smokeRamp[1] + ".colorEntryList[0]" + ".color") -type double3 0.643 0 0 ; setAttr ($smokeRamp[1] + ".colorEntryList[1]" + ".color") -type double3 1 1 0 ; */ // Group Particle Type and Fields Together select -r $emitterName $gravityName $windName; string $groupMagic = `group`; xform -os -piv 0 0 0; // Move second selected object to location of first selected object select -r $magic $groupMagic; string $selected[] = `ls -sl`; setAttr ($selected[1] + ".translateX") `getAttr ($selected[0] + ".translateX")`; setAttr ($selected[1] + ".translateY") `getAttr ($selected[0] + ".translateY")`; setAttr ($selected[1] + ".translateZ") `getAttr ($selected[0] + ".translateZ")`; // Rename Group rename $groupMagic "firesmokeEmit#"; // END SMOKE EMITTER } } }