//procedure to create the geometry global proc geoCrt(float $angleInc, int $xLoop, int $yLoop, int $zLoop) { float $angle = 0; for($x=0; $x<$xLoop; $x++) { for($y=0; $y<$yLoop; $y++) { for($z=0; $z<$zLoop; $z++) { polyCube; move $x $y 0; rotate -p 0 0 0 0 $angle 0; $angle = $angle + $angleInc; }}}} //procedure to create the groups global proc groupCrt(int $totalNumCubes, int $numCubesInGroup, int $minSpeed, int $maxSpeed) { int $groupNum = 1; string $groupName = ""; //string $cubeNames[$numCubesInGroup]; string $cubeNames[10]; string $cubeName = ""; float $randomSpeed = 0; for($g=1; $g<=$totalNumCubes; $g=$g+$numCubesInGroup) { for($i=0; $i<$numCubesInGroup; $i++) { $cubeNum = $g + $i; $cubeName = "pCube" + $g; $cubeNames[$i] = "pCube" + $cubeNum; } $groupName = "group" + $groupNum; group -n $groupName $cubeNames; move -absolute 0 0 0 $groupName.scalePivot $groupName.rotatePivot; $randomSpeed = rand($minSpeed,$maxSpeed); expression -s ($groupName + ".rotateY = time * " + $randomSpeed) -o $groupName -ae 1 -uc all; $groupNum++; clear($cubeNames); }} //procedure to create and assign a shader global proc shaderCrt(string $objName, string $shaderName, vector $colorVector, vector $ambientVector, vector $incanVector) { $shaderNameSG = $shaderName + "SG"; shadingNode -asShader lambert -name $shaderName; sets -renderable true -noSurfaceShader true -empty -name $shaderNameSG; connectAttr -f ($shaderName+".outColor") ($shaderNameSG+".surfaceShader"); setAttr ($shaderName+".color") -type double3 ($colorVector.x) ($colorVector.y) ($colorVector.z); setAttr ($shaderName+".ambientColor") -type double3 ($ambientVector.x) ($ambientVector.y) ($ambientVector.z); setAttr ($shaderName+".incandescence") -type double3 ($incanVector.x) ($incanVector.y) ($incanVector.z); select -r $objName; sets -e -forceElement $shaderNameSG; } //main program float $angleInc = 5; int $xLoop = 15; int $yLoop = 10; int $zLoop = 10; geoCrt($angleInc, $xLoop, $yLoop, $zLoop); int $totalNumCubes = $xLoop * $yLoop * $zLoop; groupCrt($totalNumCubes, $zLoop, 5, 20); group -n center group1 group2 group3 group4 group5 group6 group7 group8 group9 group10; shaderCrt("center", "centerSh", <<1,1,1>>, <<1,1,1>>, <<20,20,20>>); $sphereName = `sphere -r 50`; shaderCrt($sphereName[0], "sphereSh", <<1,1,1>>, <<0.1,0.1,0.1>>, <<0.2,0.2,0.2>>); setAttr "defaultRenderGlobals.enableDefaultLight" 0;