How to animate axis rotation along a custom orientation

Hi folks, I have a very simple question (but I failed to find an answer in looking through the forum, hence pls. apologise if this has already been discussed - in that case pls. refer to thread and I will close this and link).

Problem: I have constructed landing hatches that are supposed to open in a rotating motion alongside an axis that is defined by the shape of the hull the hatch is resting against. I defined a custom orientation by using the outward pointing face and if I go into that orientation in object mode, I can rotate the hatch fine along this axis.

But if I add keyframes for close and open position, the extrapolation of the animation is calculated linear (or with acelleration / decelleration) for each global axis rotation which results in a flopping motion that is not smoothly around the intended axis of the custom orientation.

The reason for this problem is clear to me: Obviously the rotation for each global axis that cumulates in a smooth rotation around the custom axis has different timings (non linear vs. the distance between end points). But I have no idea:

  • if this can be solved in normal keyframed animation (I want to use constraints do drive this and a transformation constrained to get a chained animation of opening hatches, extending landing gear, etc.) - if yes, how do I do it?

  • if it cannot be solved, is there a way to do this in bones?

I am pretty sure there is a simple answer (such as “click this button”, but I fail to find it). Apologies again for my limited knowledge of the depths of Blender :smiley:

ok, I found a solution myself, but wanted to post for others. I put a proxy EMPTY in between:

  • I added an empty at the origin of the object I wanted to transform (note: the origin was already set to be at the centrepoint of the custom orientation axis I want to rotate around)
  • Now I brought the axis that I wanted to use as rotation axis into alignment with a global axis (in this case the Y-axis) and noted the angle difference for each rotations (X,Y,Z). I applied the rotation to the object to enable it to rotate around a global axis now.
  • I added a transform constraint to the object to steer its rotation from another object; I made the transform rotate the object around the global Axis in local space.
  • I parented the object to the empty and rotated the empty to the custom orientation (simply dialled in the numbers of rotation in reverse that I noted down in the first place)
  • Now I can smoothly rotate the object around the custom orientation axis through the transform - this now even works while I move and rotate the overall object that the empty is parented too

There might be a better solution through enabling some options (or do some other tricks - I am very sure that some people will say… ahh, the poor man’s uneducated solve :eyebrowlift:), but as a fix this worked for me. Basis behind this: If you do a transform of an object in local space, it keeps this transform even against its local position, scale, orientation even if it is transformed in world space through a parenting relation to a different object.

@Chris Kuhn: This proves I learned from your book… a bit :slight_smile:

Hope this helps someone facing a similar issue. Please still post alternative solutions if you have (and how do I put the post prefix to SOLVED?)

To get the prefix SOLVED, edit your first post in Advanced Mode, where you can see this option.

For multiple “hatches” to easily rotate along some axis that is not a global one, I prefer to use an armature. This has several advantages:

  1. All the actions are contained in one object, i.e. the armature, this makes for more “economical” animations.

  2. Bones can be laid at any angle relative to the global axes with ease.

  3. Transform constraints or drivers to control and automate movement can be easily added.

  4. Sequencing routines can be easily made so that you can simply move one Empty, or bone to sequence the opening of a series of hatches, like undercarriage doors, the lowering of the undercarriage, then the closing of some of the doors as would be the case on a jet airplane for example.

I have prepared a tutorial on my website clockmender.uk to do exactly this type of automated animation. The tutorial can be found under the menu item “Blender Tutorials” => “Aircraft Control Surfaces” then at the bottom of this page there is a link the the U/C tutorial, it’s done this way because the U/C bit uses principles established in the Control Surfaces section. Deployment of the landing gear and all other aircraft manoeuvres, such as rolling the aircraft by moving both ailerons, is all controlled by moving a series of control empties. On that tutorial a complex sequence of door and u/c leg movements are all controlled by moving one empty along one axis over a period of frames.

I hope this helps you!

Cheers, Clock.

PS. It helps us help you if you post either an image of your model or a blend file that shows exactly what you are trying to do.

Yes, thank you for both tips. I will look at your tutorial as the use of bones does present a good alternative to rigging through constraints. I have chosen the latter for my project as I have some experience there (and lack it in using bones). Your tutorial can help me close that knowledge gap. On the actual sequence animation I have a solution as I use one transformation (of a lever) and set up transformation constraints for each step and object that relate to that lever to drive the sequence. This way I only have to animate one keyframe. For all other sequence animations I use an Add-On similar to Animation Nodes (but commercial, hence I do not mentioned it, not sure what the forum rules are, but it is not from me).

Picture of what I mean attached - but to actually see the axis custom orientation alignment you have to dismantle the object significantly.

Attachments


Glad you got it sorted, the more complex the animations, the better it is to use an armature, that way all your actions are combined in one object and the animation is more economical to run.

Cheers, Clock.