/*********************************************************** tooManyCatsAnim.mel Creates user-specified number of cats, in a group of a user-specified radius. USAGE: tooManyCatsAnim <int numberOfCats> <float groupRadius> ***********************************************************/ global proc tooManyCatsAnim(int $num, float $radius) { string $groupList[0]; // declare an array to save the names of all the cat groups for ($i=0;$i<$num;$i++) // loop to create the cats { // create and position body string $body[] = `polyCylinder -r 1 -h 4 -sx 10 -sy 1 -sz 1 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1`; xform -ro 90 0 0 -t 0 2.5 0 $body[0]; // select the CVs on the front of the body and scale and move them select -r ($body[0]+".vtx[10:19]") ($body[0]+".vtx[21]") ; scale -r -p -5.96046e-008cm 2.5cm 2cm 0.725606 0.725606 0.725606 ; move -r -os -wd 0 0 0.215202 ; //create and position head string $head[] = `polyPyramid -w 1 -ns 4 -sh 1 -sc 0 -ax 0 1 0 -cuv 3 -ch 1`; xform -t 0 3.8 2.8 -ro 90 0 45 -s 1.6 2.3 1.6 $head[0]; // create and position ears string $ear1[] = `polyCone -r 1 -h 2 -sx 6 -sy 1 -sz 0 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1`; string $ear2[] = `polyCone -r 1 -h 2 -sx 6 -sy 1 -sz 0 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1`; xform -t -0.45 4.85 2.2 -ro 0 0 12.8 -s 0.3 0.55 0.16 $ear1[0]; xform -t 0.45 4.85 2.2 -ro 0 0 -12.8 -s 0.3 0.55 0.16 $ear2[0]; parent $ear1[0] $ear2[0] $head[0]; parent $head[0] $body[0]; select -r $body[0]; makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -pn 1; xform -ws -piv 0 3 2 $head[0]; float $headFreq = rand(2,4); float $headRange = rand(10,30); float $bodyFreq = rand(4,7); float $bodyBounce = rand(0.1,0.3); expression -s ($head[0]+".rotateY = noise(time*"+$headFreq+")*"+$headRange+";") -ae 1 -uc all; expression -s ($body[0]+".translateY = abs(sin(time*"+$bodyFreq+"))*"+$bodyBounce) -ae 1 -uc all; // create tail string $tail[] = `polyCylinder -r 0.15 -h 3.5 -sx 8 -sy 16 -sz 1 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1`; // move the pivot point to the bottom, so it bends from the bum xform -ws -piv 0 -1.75 0 $tail[0]; xform -t 0 4.96 -1.78 $tail[0]; // deformer variables float $curv = rand(50,180); // random curvature for the BEND deformer float $wavelength = rand(2,5); // random wavelength for the SINE deformer float $amp = rand(0.1,0.3); // random amplitude for the SINE deformer float $yrot = rand(-360,360); // random Y rotation float $freq = rand(2,5); // time multiplier if ($i%2==1) // if the loop counter is ODD, add a bend to the tail { string $bend[] = `nonLinear -type bend -lowBound 0 -highBound 1 -curvature 0`; expression -s ($bend[0]+".curvature = sin(time*"+$freq+")*"+$curv) -ae 1 -uc all; xform -ro 0 $yrot 0 $bend[1]; parent $bend[1] $tail[0]; parent $tail[0] $body[0]; } else if ($i%2==0) // if the loop counter is EVEN, add a sine to the tail { string $sine[] = `nonLinear -type sine -lowBound -1 -highBound 1 -amplitude $amp -wavelength $wavelength -dropoff 1 -offset 0`; expression -s ($sine[0]+".offset = -time*"+$freq) -ae 1 -uc all ; xform -ro 0 $yrot 0 $sine[1]; parent $sine[1] $tail[0]; parent $tail[0] $body[0]; } float $tailAngle = rand(-50,0); xform -ro $tailAngle 0 0 $tail[0]; string $legs[]; // declare an array to save all the names of the legs for ($r=0;$r<4;$r++) // loop to create the legs, and gather their names { string $leg[] = `polyCube -w 0.5 -h 2 -d 0.5 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1`; xform -ws -piv 0 1 0 $leg[0]; // set the pivot points, so they bend from the shoulders/hips float $legFreq = rand(2,6); float $legRadius = rand(5,30); int $flip = rand(2); if ($flip == 0) { $legFreq = -$legFreq; } expression -s ($leg[0]+".rotateX = sin(time*"+$legFreq+")*"+$legRadius+";\n"+$leg[0]+".rotateZ = cos(time*"+$legFreq+")*"+$legRadius+";") -ae 1 -uc all; $legs[$r] = $leg[0]; } // move the legs xform -t 0.5 0.5 1.5 $legs[0]; xform -t 0.5 0.5 -1.5 $legs[1]; xform -t -0.5 0.5 1.5 $legs[2]; xform -t -0.5 0.5 -1.5 $legs[3]; // group all the parts together select -r $body[0] $legs; string $groupName = `group`; // position variables float $trans[] = sphrand($radius); xform -t $trans[0] 0 $trans[2]; // rotation variables float $rotationOffset = rand(-360,360); float $noiseAmt = rand(20,60); float $timeMult = rand(3); expression -s ($groupName+".rotateY = noise(time*"+$timeMult+")*"+$noiseAmt+"+"+$rotationOffset+";") -ae 1 -uc all; select -cl; } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter