Set-up Bone so Tail is Always Z = 0

(Evertrainz) #1

Hello all, I need some help. (While having pressed 1 on the numpad, looking from the front) I’m trying to get a bone, that starts out horizontal, Z = 0 and facing left, to always have the tail end on Z = 0. All while the head of the bone moves up constantly for some distance.

For this, there can’t be any stretching of the mesh. It has to be done with a combination of rotation of the bone, along with the movement of the bone’s tail along the X-axis.

In the attached .BLEND file the tail must maintain contact with the X-axis. I’ve tried changing the F-curve formula types for rotation, but nothing works.

Hope someone can help!


cPivot.blend (505 KB)

(Evertrainz) #2

Here’s an idea: is there a (highly) advanced version of the “Copy Location” constraint?

What I mean is that:
• It takes the input axis location of the target object
• Performs a complex mathematical function
• Outputs that location to the constrained object on a separate axis

That way I could use Pythagorean to control the location of the bone tail. Or use an Empty point that rises up, copy the Z-value of the point, perform the above constraint with the P. Formula, and output that value to another Empty that slides along the X. Parent the main bone to the rising Empty, and Track it towards the sliding Empty.

(Evertrainz) #3

Thanks for the help! I used Animation Nodes and using the formula I got the transform values associated with the Empty and it works.

(Clockmender) #4

Sorry Ron, I have been away on my hols and have only just seen your post… :rolleyes:

I would also say animation nodes - you can use the Expression node for complex mathematical calculations in a single node with multiple inputs. However, some functions are not available in raw form just yet - like sqrt( ), but you can use math.sqrt( ) instead - also math.sine, etc. For Pythogorean calcs this works in a single expression node:

math.sqrt( (x **2) + (y **2) ) - where x and y are two inputs from other nodes.
Which produces the square root of x[SUP]2[/SUP] + y[SUP]2[/SUP] rather than use lots of Math nodes. I understand from the developer that more functions will be available with version 2, obviating the need for the math. bit. I am currently investigating rigging my train - two bogies - using animation nodes rather than drivers, it seems to be a better option, but will take me some time I think. I will post it on my Animation Nodes WIP when I have done it. I want to port all my complex drivers over to Expression nodes in time. :spin:

I haven’t looked at your file yet - later today is an option and if I get any more bright ideas, I will let you know.

Cheers, Clock.

PS. Just PM me if you don’t see quick responses from me for mathematical questions, I am ultra-busy just now with my new glider, new ISP, new email system, new website, blah blah blah…:yes: I know there are not too many mathematicians on this site, but I will always help and a PM will nudge me. :wink:

(Clockmender) #5

OK. So I took a quick look at this and had this idea, not sure how this compares to what you did: :wink:

Animation Node Tree:

Blend File: cPivot-clock.blend (636 KB)

You will see some input boxes to control the animation - like the animation start frame, duration, etc. I built this in a hurray while Mrs. Clockmender was not watching (I have jobs to do for her…). Hope this helps you. Just press Play to see the animation. :stuck_out_tongue: I think I could do a better job with more time, which I don’t have just now. :frowning:

Cheers, Clock.

(Clockmender) #6

Or you could do it with bones thus:

Blend File: cPivot-clock.blend (646 KB)

Just press Play again. :smiley:

Cheers, Clock.

PS. Don’t forget to check “Autorun Python Scripts” in User Prefs > File Tab as I have a scripted expression in there. :yes: