I am trying to rig a series of valves which are pushed down by a lever:

enter image description here

Currently, I have a Copy Location object constraint on the valves which copies the z-location of the bones at the end of their respective levers. I know this is technically an approximation, but it's close enough for my purposes.

enter image description here

The problem is, I can't figure out how to set this up so that it works when the valves aren't aligned with the global z-axis. I need to be able to replicate this behavior for the other valves, which are at arbitrary rotations relative to the global axes. I also need the rigging to remain intact when the entire armature is moved or rotated.

What do I need to change the Target/Owner settings of the constraint to in order for this to work?

Do my valves need to be parented to anything specific within the armature?

Is there a better way entirely to rig this kind of set-up?

  • 1
    $\begingroup$ You need to change the Target and Owner spaces from World to Object $\endgroup$ Apr 30, 2021 at 23:45
  • $\begingroup$ The best I've been able to do so far is to set the Target to "Local with Parent," and the Owner to "Local". I also think that part of the problem initially was that my target bone needs to have the same orientation as the object for it to work. Still, when I set it to Local with Parent, my object gets moved all over the place, so I don't really understand what's happening. $\endgroup$
    – Rekov
    May 1, 2021 at 3:34
  • $\begingroup$ can you provide your blend file? $\endgroup$
    – Chris
    May 1, 2021 at 9:30
  • $\begingroup$ I've mostly got this working. I ended up just giving the valve a bone, putting a copy location bone constraint on that bone. The bone constraint works because it's within the same armature, so I don't have to parent the bone to anything. $\endgroup$
    – Rekov
    May 1, 2021 at 14:40

2 Answers 2


This was done without bones and only 1 (track-to) constraint for each rocker-arm push-rod. (Blend file below)

It's only necessary to build and animate one rocker assembly to begin with and that's described below...

The method used to move the valve and only on contact with the rocker-arm is firstly to set the valve's origin point to it's very top center vertice. An Empty is added at that location to give us a reference point to return the valve to after the parenting process, described immediately below.

The rocker's animation (rotation) is manually keyframed. It's then stepped a frame at a time until it comes into contact with the top of the valve rod.

The valve is parented to the rocker at that frame (CTL-P) so it's locked to the rocker contact point. (Child = valve)

Once played the valve's derived action can be then be baked from the frame of first contact up to the frame where it's rising again and parting from the rocker, inclusive. (in the bake panel tick all option boxes).

The bake leaves us with no parent constraint and a set of keyframes at our disposal. The X & Y axis' channels can be removed, along with all the rotation and scaling channels.

The only animation channel remaining is Z axis LOC and with the frame range already limited to those of physical contact, the valve will only move straight up and down when in contact with the rocker-arm.

Note -

Blender can introduce extraneous interpolation curves when keyframes are close to each other and these can cause the valve rod to penetrate the rocker's surface slightly. If that's happening noticeably, simply remove the intermediate keyframes between peaks in the Graph editor. That will smooth things out and should leave you with a clean, U shaped curve. There's only a few KF's to worry about.

Now to the rod that pushes the rocker-arm -

Actually it doesn't do that. The yellow rocker is keyframed to rotate back and forth and the push-rod is parented to the rocker at the hinge pin. The push-rod's origin point is set to the hinge-pin's center.

To keep it's other end pointing at a stationary target, it's given a 'Track-to' constraint. The target is an empty which is sitting directly below but slightly offset along the X axis to prevent it wanting to spin 180 degrees with each half cycle.

To hold it all together so the whole thing can be moved/rotated and even scaled without ill-effect, a 'Nav(igation) Empty' (the large circle) acts as a Master parent for the rocker, valve, and 'track-to' empty, along with the main shaft that will support all the rocker-arms.

It's the Nav-Empty that's pulled around the scene, rotated etc. not the components.

Once the first assembly is working, it's duplicated and their timing and locations offset to suit. Make sure you DON'T include the Nav-empty or main shaft when duplicating


If the approximation isn't a problem, you can make your valve bone copy the loc of the target in world space (both), and THEN limit it's local location on X and Z local axis, so it will move only on its Y axis and it will work in any situation and rotation.

In my example all three little bones are child of the main bigger bone and the target bone has a copy rot constraint targeting the third little bone.

enter image description here


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .