Skip to content

Instantly share code, notes, and snippets.

@nrtkbb
Last active February 19, 2016 03:13
Show Gist options
  • Save nrtkbb/e07a397a96665aaab37c to your computer and use it in GitHub Desktop.
Save nrtkbb/e07a397a96665aaab37c to your computer and use it in GitHub Desktop.
Select particle instancer and do! (edit from https://sites.google.com/site/keyscripts/maya/instancebaker)
global proc points2Polys()
{
string $instancer;
string $sel[] = `ls -sl`;
if ($sel[0] == "" || `nodeType $sel[0]` != "instancer")
error "select instancer";
$instancer = $sel[0];
// PARTICLES VARIBLES
string $particleObjects[] = `listConnections ($instancer + ".inputPoints")`;
string $particleObject = $particleObjects[0];
string $particleShapes[] = `listRelatives $particleObject`;
string $particleShape = $particleShapes[0];
float $id[];
vector $position[];
float $scale[];
float $object[];
vector $aimDirection[];
vector $aimAxis[];
vector $aimUpAxis[];
vector $rotation[];
// INSTANCE SHAPES ATTRIBUTES
string $in_position = `particleInstancer -name $instancer -q -position $particleObject`;
string $in_scale = `particleInstancer -name $instancer -q -scale $particleObject`;
string $in_object = `particleInstancer -name $instancer -q -objectIndex $particleObject`;
string $in_aimDirection = `particleInstancer -name $instancer -q -aimDirection $particleObject`;
string $in_aimAxis = `particleInstancer -name $instancer -q -aimAxis $particleObject`;
string $in_aimUpAxis = `particleInstancer -name $instancer -q -aimUpAxis $particleObject`;
string $in_rotation = `particleInstancer -name $instancer -q -rotation $particleObject`;
// INSTANCED OBJECT LIST
string $objectList[] = `particleInstancer -name $instancer -q -object $particleObject`;
print ( "instance objects : " + $objectList[0] + "\n" );
// CREATE GROUP
string $instanceGroup = $instancer+"_grp";
$instanceGroup = `group -em -name $instanceGroup`;
// FRAME RANGE
float $start = `playbackOptions -q -minTime`;
float $end = `playbackOptions -q -maxTime`;
float $timeStep = `playbackOptions -q -by`;
print ("Points 2 Polys Script\n............................. \n");
// FRAME LOOP
int $frame;
for ($frame = $start; $frame <= $end; $frame+=$timeStep)
{
currentTime -edit $frame -update yes;
// PERCENTAGE READ OUT
float $percentage = ((($frame)-$start) / ($start - $end) )*-100;
// PARTICLE COUNT
float $particleCount = `getAttr ($particleShape+".count")`;
// PARTICLE ATTRIBUTES
$id = `getParticleAttr -at id -array true ($particleShape+".pt[0:"+$particleCount+"]")`;
$position = `getParticleAttr -at $in_position -array true ($particleShape+".pt[0:"+$particleCount+"]")`;
if ($in_scale != "")
$scale = `getParticleAttr -at $in_scale -array true ($particleShape+".pt[0:"+$particleCount+"]")`;
else
clear($scale);
if ($in_object != "")
$object = `getParticleAttr -at $in_object -array true ($particleShape+".pt[0:"+$particleCount+"]")`;
else
clear($object);
$rotation = `getParticleAttr -at $in_rotation -array true ($particleShape+".pt[0:"+$particleCount+"]")`;
// CREATE GEO
int $i = 0;
for ($i =0; $i<$particleCount; $i++)
{
// INSTANCED GEO NAME
string $nameDuplicates = $instancer + "Particle_";
// CREATE OBJECT IF DOESNT EXIST
if (! `objExists ($nameDuplicates + $i)`)
{
int $tempObject = 0;
if (size($object) != 0)
$tempObject = (int)($object[$i]);
// CORRECT IF OBJECTION SELECTION IS 2 HIGH
if ($tempObject >= size($objectList))
$tempObject = floor(fmod ($tempObject, size($objectList)));
duplicate -name ($nameDuplicates + $i) $objectList[ $tempObject ];
parent ($nameDuplicates + $i) $instanceGroup ;
setKeyframe -t ($frame-1) -v 0 -at v (($nameDuplicates + $i)+".visibility");
setKeyframe -t ($frame ) -v 1 -at v (($nameDuplicates + $i)+".visibility");
}
// TRANSFORM OBJECT
float $posV[3] = $position[$i];
// ROTATION CALCULATION
float $aimDir[3] = $rotation[$i];
float $rot[3] = $rotation[$i];
xform -ws -t $posV[0] $posV[1] $posV[2] ($nameDuplicates + $i);
xform -ro $aimDir[0] $aimDir[1] $aimDir[2] ($nameDuplicates + $i);
if (size($scale) != 0)
xform -s $scale[$i] $scale[$i] $scale[$i] ($nameDuplicates + $i);
// KEY FRAME THE GEO IN PLACE
setKeyframe (($nameDuplicates + $i)+".tx");
setKeyframe (($nameDuplicates + $i)+".ty");
setKeyframe (($nameDuplicates + $i)+".tz");
setKeyframe (($nameDuplicates + $i)+".rx");
setKeyframe (($nameDuplicates + $i)+".ry");
setKeyframe (($nameDuplicates + $i)+".rz");
setKeyframe (($nameDuplicates + $i)+".sx");
setKeyframe (($nameDuplicates + $i)+".sy");
setKeyframe (($nameDuplicates + $i)+".sz");
}
}
}
points2Polys();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment