Slingshot Rigging

Slingshot Rigging

KATEOY_23
Observer Observer
448 Views
5 Replies
Message 1 of 6

Slingshot Rigging

KATEOY_23
Observer
Observer

I’m rigging a slingshot band in Maya and want it to bend, twist, and stretch naturally. Here’s my current setup:

  • I created a curve along the slingshot band.

  • Each CV of the curve has its own cluster group, and all clusters are parented under a main controller.

  • I have a joint chain along the band with an IK Spline handle attached to the last joint.

Right now:

  • Moving the main controller moves the band, but the curve behaves stiffly and doesn’t bend naturally.

  • Some cluster groups seem laggy or stiff, so the curve doesn’t follow as smoothly as I’d like.

  • The IK spline works, but the joints don’t stretch along the curve fully.

I’d like the slingshot to:

  1. Bend and twist naturally along the curve.

  2. Stretch proportionally when the pouch is pulled.

  3. Avoid laggy or stiff CVs while keeping the main control intuitive.

Has anyone set up a rig like this? What’s the best workflow to make the curve stretchy while keeping the joints and clusters aligned properly?

0 Likes
449 Views
5 Replies
Replies (5)
Message 2 of 6

rosie_lucas1
Autodesk
Autodesk

Hi @KATEOY_23,

I wanted to check in and see if you still needed assistance, or if you found a solution to your question already? Let us know if you need further assistance by providing an update or if you have found a solution, please share it with the community so other members who may have the same question could learn from your experience.

All the best,

Rosie | Community Manager

Rosie | Community Manager
0 Likes
Message 3 of 6

KATEOY_23
Observer
Observer

I still need help.

0 Likes
Message 4 of 6

Kahylan
Advisor
Advisor

Hi!

Stuff like a slingshot string can seem decepitvely easy, while acutally being quite hard to achieve, because of the huge range of different motions your setup needs to go trough. 

Now I'd like to first address the issues I see in your current setup, and how those could be improved. After I will also try to describe to you the way I would approach this problem. Since I would approach this rig fundamentally different, but it involves some pretty advanced rigging techniques, that could proof difficult to achieve for someone who is just starting out with rigging.

To the problems I see with the current rig:
1) Each cv of your curve has its own cluster and all those clusters except the first one that is located right at the fork of the slingshot. What this means is, that when you pull the pouch down, you pull all those cvs with it, essentially treating your string like a hard stick.
2) It seems like you have a 3rd degree curve, but only clusters for the 1st degree equivalent of this curve. Meaning the second and second to last cv of the curve, that get created automatically by maya when you create a 3rd degree curve. And it looks like you then assigned those cvs to both the clusters next to it, which is why they are transformed twice as much as they should be. So the problem isn't acutally that some of your vertices are lagging behind, its that some are moving too much.

Those two issues I would address by using joints instead of clusters. You could also use weighted clusters for this, but then you are just creating a worse version of joints, so I would not recommend that.
First delete all the clusters, we don't want conflicts in the deformation.
Then duplicate the joint chains, move the last joint out of the duplicated hierachy, delete all the joints below the first joint in the duplicated hierachy. Afterwards select those newly created joints and your curve and in the Rigging Toolset use Skin -> Bind Skin, to skin your curve to the joints, for curves the default settings of that command are often pretty good. Then you parent the duplicated start joint under the fork ctrl of the slingshot and the the duplicated end joint under your pouch.
This should leave you with a joint chain where the movement of the tip follows the the movement of the pouch. 

3) Your string does not stretch when the pouch is pulled away from the fork. 

To fix that, I would use some easy math in the node editor.. 
First we need to figure out by what amount the string is stretched. For that you can use a curveInfo Node to get the length of the shape of your curve. (Here is a video that explains the basics of that process https://www.youtube.com/watch?v=qf7HvW8eKLo). Once you have the distance of your curveInfo Node. You create a multiplyDivide Node, set the operation Type in Divide and copy the current distance value into input2X and connect the distance attribute of the curveInfo to input1X of the mulitply divide. This will give you a division, that will tell you how many times longer/shorter your string is from the initial pose. You could now connect the output of the multiplyDivide into the main axis scale (since your string runs along tthe Z axis, thats probably scaleZ unless you reoriented the joints in some way) of each joint in the chain and you would have a basic stretchy spline setup. But Since you are doing a slingshot and the string of a slingshot doesn't really compress, you want your string to bend when the pouch moves towards the slingshot. I would also use a clamp node to clamp the value of your stretch calculation at a minimum of 1. And then connect the output of the clampnode to the scale attribute of each joint in the chain.

Now that will give you a pretty decent setup for your slingshot, depending on what you want to do with it and how long it will be on screen, this would be fine for most productions. With a spline based setup like this, you also have the advantage that you could add hair physics to your curve for some free added motion when it isn't stretched. But it has the big disadvatage that twisting of the string is quite hard to achieve believably, and the setup is quite rigid and doesn't allow to easily add functions to it.

If this is a Hero Prop, that is gonna be on screen a lot, where you need a lot of control over the string etc. I would actually go with a ribbon based approach. Ribbons are basically just rigged nurbs surfaces, that have the bind joints for the actual geometry attached to them (here is a tutorial that shows in detail how this works: https://www.youtube.com/watch?v=rCxftP5dLQc&t=178s).

Now what I would do, is use a basic 3rd degree surface with 1 patch per joint you have now, and attach the joints to the surface using follicles or uv pin constraints. Then do the same setup I just described for the curve, where you have a start and an end joint that control your ribbon. With ribbons you dont have to worry about squash and stretch, because the joints are distributed on a stretching surface so the distance between the joints will provide that, same goes for twisting, since the joint use the u,v and normal vector of the surface point they are attached to, they will naturally twist when the surface gets twisted. 
In addition to that, nurbs surfaces allow for the creation on blenshapes on them, so you can create a blendshape that is connected to other identical surfaces and then rig those identical surfaces with other deformers , for example a sine deformer to give some vibration into your string or even an entirely different joint setup, that you can control via attributes on your pouch control.

It's hard to describe this accurately via text, but I hope the desciption can give you some pointers as to what to look up to create your setup.

I hope it helps!

0 Likes
Message 5 of 6

mcw0
Advisor
Advisor

I had a quick second to try this.

0 Likes
Message 6 of 6

mcw0
Advisor
Advisor

hhmmm...can't upload an "mb" file?  Sorry can't seem to be able to upload my test file. 

 

But basically, I used a simple 3 span linear curve.  So there are 4 cvs.

Create a cluster with the middle 2 cvs.  This is the node to stretch the slingshot.

Also make a cluster of the end cvs so I can compress the width of the curve.

I then rebuilt the linear curve into an 8 span cubic curve.

Make this cubic curve dynamic and lock both ends.

Keyframe the first cluster to pull the slingshot back.

Once you get to the final stretched position, keyframe the start curve attract from 1 to 0.  And I also keyframed the stretch resistance from 1 to 1000.

Then it's just adjusting the damping until you get something you like.

Then I used the output curve of the hair system as the wire curve for the mesh.

PS.  After rethinking this, I believe the ideal setup is to have mirrored curves.  A left and a right curve attached at the center.  This way, you have 2 bases to maintain the base normal.

0 Likes