Unexpected behavior: local->local copy rotation twist axis

I’m trying to set the position of a bone by using one bone to track to (via damped track) and a second bone to establish twist. But I’m getting unexpected behavior when using the copy rotation constraint limited to a single axis. I made a quick demo file:


Demo armature in edit. Only parented bone is PointTarget which is parented to PointTargetParent (in order to move PointTarget while maintaining distance.)


Demo armature in pose mode. PointTargetParent has been rotated arbitrarily and TwistParent has been rotated in its local Y axis (which is the same as the global Z axis.) Constraints for PointAndTwist are shown on the properties view.

So what’s clear from this is that rotation from TwistParent is creating rotation in PointAndTwist that is not in PointAndTwist’s local Y axis. Any explanations? Any recommendations for alternate ways to copy local twist from an arbitrarily positioned bone? (Locked track won’t work because the constrained bone can rotate to any position relative to the TwistParent.)

Blend file is attached.

strangeTwist.blend (87 KB)

Edited to replace the blend, which apparently I’d played with before saving.

Hey; Are you wanting ‘PointAndTwist’ to point at ‘PointTarget’ ?? if so just change the ‘stack’ order of the constraints.

I would do that, but my understanding is that damped track can affect the twist. If I evaluate the damped track after the copy rotation, I’m no longer guaranteed the unchanged twist of the source bone.

Hey; If you are rotating ‘TwistParent’ to get ‘PointAndTwist’ to copy its(TwistParent) rotation,and ‘be in-line’ with the other 2 bones, then you will want to switch the stack order, works for me. If I am rotating or moving the wrong bone, then further explanation is needed.

EDIT; clear rotations, tab into edit mode, fix your bone rolls, switch constraints around.

Another way…
copy the “PointAndTwist” Bone…
Scale it down and rename it PointAndTwistPAR and make it the Parent of PointAndTwist…
Delete the Copy Rotation from the PointAndTwistPAR bone
Delete the Damp Track from the original PointAndTwist bone…

This separates the two constraints out to two separate bones and keeps them from interfering with each other…

note the Parent bone will always hold sway over the child bone…
Thus move your Constraints around accordingly…

Thanks, not quite what I was trying to do, but no matter. Like I said, I believe damped track can introduce some twist, so doing it after a a Y axis rotation isn’t the same as doing it before and replacing its Y axis rotation. But the twist, if present, is certainly slight enough that I could get away with it. Well, probably, you never know that something doesn’t work until it doesn’t work.

Yeah, that’s the problem with that, that you end up acquiring whatever rotation the parent acquires, in addition to the rotation you’re copying.

I’ve been having trouble with some structures that ought to work that were designed to measure twist and apply it to other bones, and I think that my misunderstanding of (or the buggy nature of) some of these transformations is responsible. The “transformation” constraint has the same problems as copy rotation, where rotation applied to only the Y axis isn’t guaranteed to keep the tail in the same position.

What I’m doing now is using locked tracks instead, which are working flawlessly, but are often very cumbersome, requiring that I make additional marker bones to create twist-to positions.

Hey; Have you even tried to switch the order ??

bandages Originally Posted by ajcdfin https://blenderartists.org/design/baorg2012dark/images/buttons/viewpost-right.png

[QUOTE]Hey; If you are rotating ‘TwistParent’ to get ‘PointAndTwist’ to copy its(TwistParent) rotation,and ‘be in-line’ with the other 2 bones, then you will want to switch the stack order, works for me.

Thanks, not quite what I was trying to do, but no matter.[/QUOTE]

Can you explain what you are TRYING to do ?

I believe damped track can introduce some twist, so doing it after a a Y axis rotation isn’t the same as doing it before and replacing its Y axis rotation.

I don’t even understand that :confused:
To be honest my goal is/was to help you, I can’t help you if you don’t help me.:smiley:

I’m sorry if I’ve given some offense. I appreciate your help. If my tone communicated some kind of irritation, it’s unintentional; I’m not irritated.

Have you even tried to switch the order ??

Yes. That’s why I wrote, “But the twist, if present, is certainly slight enough that I could get away with it.”

Can you explain what you are TRYING to do ?

Like I said, it doesn’t matter in relationship to what you were saying. But since you asked.

In the case of the demo model, it doesn’t matter where PointAndTwist is in relationship to PointParent. PointParent is only present in order to keep PointTo at a fixed distance.

I tend to approach these problems abstractly, which I know is unusual. You’re probably asking about the specific thing I’m trying to do. It would take a lot of words. Even looking at the rig would take a lot of time for somebody. But I’ll link a copy if you want. When I realized this was an issue I was working on the spine. The rig still needs some work but I’m happy with the spine behavior with the workarounds that I’ve got. The spine is controlled by three bones, a center that can be rotated or moved, a ctrlSpine that can be rotated or moved, and a spine pole that can be moved. Scaling affects center and ctrlSpine, but it’s not necessary. The goal, as always, is to increase the range of motion, give good interpolation, and reduce visual clutter/collapse controls to as few control bones as possible.

Hey;

I’m sorry if I’ve given some offense.

No, don’t think that, your fine. I just wanted answers to the questions I asked. Also you keep referring to ‘twist’, which for me is ‘rotation’, but on what bone or axis. Having looked at your ‘BIG’ file you linked to…‘WOW’…thats my first thought when I just appended in your ‘rig’ to an empty scene. I could not even believe the ‘bone’ count, I would have bet money it was a ‘transformer’ or ‘cyborg robot’, you can imagine my surprise when I actually opened your file. I just want to mention two observations about both your files. First thing is ‘Bone Roll’, which is very important, your rig will not work as expected in ‘pose’ mode if you over-look this. Second is ‘rotation’ modes, there is a reason why there are 8 of them, also use the ‘locks’ in the transform panel. All I can say is good luck with that ‘rig’. As far as your ‘demo file’ goes, I still maintain my solution is valid. If you have time read this…it should still be valid until 2.8

Thank you. When I talk about twist, I’m talking about rotation in the roll axis, the local Y axis. Sorry, I should have been more clear.

@bandages
outstandingly good bone controls on this Rigg…
you should be teaching us how to do some of those things…
keep up the good work…!

Yeah, that’s the problem with that, that you end up acquiring whatever rotation the parent acquires, in addition to the rotation you’re copying.

well it makes some since once you read ajcdfin link…

http://aligorith.blogspot.com/2013/0…y-problem.html

it’s not a very long article…

Nathan Vegdahl talks about this very thing in this video

skip on over to about 18:00 in the video to see the information I’m speaking of

So adding in an extra bone in between the parent relationship can allow to skip over some of the depsgraph goofiness that one runs into from time to time…

and although bones take up some space in a rigg they don’t take up much… especially if they let you do what you want to do…

Thanks. This isn’t something I understand well. (I’ve done some shader programming so I understand transformation spaces, but not how to use them in relationship to bones.) Can you recommend any good resources to learn about when to use various rotation modes?

also use the ‘locks’ in the transform panel.

I’d like to hear more from you regarding this, because I don’t like locks myself. My philosophy is, it’s better to give the animator the tools to do what they want, and let them make the decision to do something stupid; if they only want idiot-proof transforms, they should stay on the control layers (and maybe even then I won’t give them to 'em :P) But I’m a RMB-g animator, not a click-and-drag animator, and there might be some reasons for this that I’m missing?

If you have time read this…it should still be valid until 2.8
Thanks, that is useful. Definitely hard reading for me though :slight_smile:

Thank you very much noryman, that means a lot to me. This still has work to go, and I’m still learning my way around Blender rigging. I’ve done rigging in a different environment with really limited tools, and here I’m a kid in a candy shop. Can’t say I’m ready to teach yet, because I’ve tried things that didn’t work and I don’t yet know why, but feel free to ask or pm about anything, I don’t mind helping people as much as I can.

edit: missed the vid, I’ll check it out.

@bandages - the video Norvman linked to and all his (Nathans) vids are a MUST watch if you plan to rig and animate in Blender.

Here are two links about rotation modes;

https://wiki.blender.org/index.php/User:Pepribal/Ref/Appendices/Rotation
https://blender.stackexchange.com/questions/47545/when-should-i-use-quaternion-wxyz-and-how-should-i-handle-the-w-quaternion-rot/47552https://blenderartists.org/forum/showthread.php?447004-Blender-Euler-Angle-Axis-Angle-Quaternion-Rotations-w-x-y-z-Explained

excellent links ajcdfin I haven’t seen those before…

Thanks. I’m still not seeing anywhere where I’d want to use anything but quaternion angles on this rig.

Video is definitely useful, will give better ways to control spine bend angle than what I was doing. Guess I’ll remake it. Again :slight_smile:

@bandages, Not trying to change your mind, just give you tools to learn from. I posted another link in #14 that I just ran across plus here is a link to Nathans explanation on rotations - watch this one and the next 2 - they are really helpful.

I know, and I appreciate it. Thank you.

Trying to do some rigorous tests as opposed to eyeballing. This is an edit because I realized a flaw with my first test. Don’t know how to get rid of the original picture.

Here I’m trying to take Y axis rotation from a bone. Bone is unparented, acquires rotation from damped track, locked track constraints. Goal is that a coincident bone, pointing in the same direction, acquires the exact same transformation.

Another bone using damped + locked (to a separate locked axis target, parented to the source bone) acquires the exact same transformation.

Bones using copy rotation followed by damped track do not. Same with bones using copy rotation, parented to a bone with a damped track; same with bones using damped track followed by copy rotation with offset. Transformation constraint was untested, but I expect it to behave the same as copy rotation. These also have some twitchiness to them (in the attached file, as marker crosses the x axis) not present in the source bone.

I think that if I want to do this precisely, I have to figure out ways to use locked track constraints.

rigtest.blend (83.2 KB)


Attachments