How to properly attach a control on IK curve?

maya
rigging

#1

Newb here!

I’ve been fighting with this issue for a while now and tried multiple methods, but I just can’t get it to work. Basically I have a tentacle-like join chain and I need to attach 2 controls(they will affect joint’s scale attributes, but I got that figured out). I achieved what I wanted with Geometry constrain, but the control was staying still during animations. So if there was a change on IKs this control was on the same spot.

Next, I’ve tried using Matrixes to get locators’ world space and move my control according to those spaces. The result was almost satisfying, here’s a gif to show you what I mean exactly: https://i.imgur.com/cc0ypeB.gif
Also tried making point constraints from every locator - same issue.

I can’t use any deformers as I’ll need to bake animation and export it to Unreal.
Anyone knows how to deal with this? Thanks in advance!


#2

Not really sure what behavior you are going for but I can tell you how I do it. There’s an old Gnomon rigging video by Axel Stanley Grossman that build a spline control similar to what I still use. You can create a distance node that measures the distance between the start and end control. Build up a node network so that you get a scalar that equals one when the spline is at it’s default length. Once you pull the end control away the distance will increase and push your scalar up and scale up your joints. I find this structure much easier than a separate scale control.


#3

Woo! Welcome to the wonderful world of curves, matrices and coordinate frames, your ticket out of the hell that is hierarchical rigging, and into the promised land of pure, flat, parallel maths :slight_smile:

So if all you want to do is pin a transform’s translate values to a curve, it’s as simple as using a pointCurveInfo node, connecting up your curve and setting the u value you want, and then using the output position to drive the transform. If this is enough, and you don’t want to tackle the heavy stuff yet, that’s cool - just make sure you either use the worldspace of the curve, or its pivot is at the origin.

If you want the control to rotate, to point along the curve as well, it’s a bit more tricky - you can either use an aim constraint node, connected to the pointCurveInfo’s tangent vector, or you can construct a full coordinate frame at that point (although this works best when using an up-curve as well, otherwise you get flipping).
To do this, you would generate three orthogonal vectors from the normal, tangent, and the cross-product of those (using the vector product node), and then feed those into a 4x4 matrix node - from then, anything you multiply by this will be snapped to the curve at the right orientation.