Another way to approach it is just to create curves for each leg and control the curve points with clusters or locators driving the curve points though direct connections. For something really curvy like that where the twist of the mesh (typically along the X axis in Maya) is less important it can be simpler than Spline IK (no joints or skinning involved for one thing).
Then just Extrude a circle curve along each leg curve and leave the history live so that it updates as you animate.
I wrote a script a while back to make setting up this kind of rig easier as I found it a little tedious in Maya (C4D has a built in ‘tracer’ curve that makes it very simple).
To use this: just draw a curve, select it and run the script and it will create locators that can be used to pose it. Then it’s just a matter of extruding along the curve and you’re good to go.
// bh_createCurveControllerLocators 1.1 040113 - now uses global position of locator shape so the controllers can be in a hierarchy
// nb the curve must be zeroed out in world space for this kind of rig to work - use clusters or joints if you need to work in world space with hierachies
// get the selected curve
string $curveSel[] = `ls -sl`;
string $curve = $curveSel[0];
// get the CV count for the curve
// attach a curve info node to the curve
string $infoNode = `createNode curveInfo`;
connectAttr ($curve +".worldSpace") ($infoNode+".inputCurve");
// Curve Degree
int $degree = eval("getAttr " + $curve + ".degree");
// Curve Spans
int $spans = eval("getAttr "+$curve+".spans");
// output the cv count
int $numCVs = $spans + $degree;
print ("numCVs = "+$numCVs+"
");
// delete the curve info node
delete $infoNode;
// create and position the locators
for($i=0;$i<$numCVs;$i++)
{
// get the position of the vertex
float $vtxPos[3] = `xform -q -ws -t ($curveSel[0]+".cv["+$i+"]")`;
// create a locator and position on the cv
string $ng = $curveSel[0] + "_Controller_"+$i;
string $locC[] = `spaceLocator -name $ng`;
move -ws $vtxPos[0] $vtxPos[1] $vtxPos[2] ;
// tie the CV position to the Locator position
connectAttr -f ($ng+"Shape.worldPosition[0].worldPositionX") ($curve+".controlPoints["+$i+"].xValue");
connectAttr -f ($ng+"Shape.worldPosition[0].worldPositionY") ($curve+".controlPoints["+$i+"].yValue");
connectAttr -f ($ng+"Shape.worldPosition[0].worldPositionZ") ($curve+".controlPoints["+$i+"].zValue");
}
Cheers,
Brian