In making a character pick up and set an object down, I wish for the object to copy the location of a bone within the character’s armature. Fairly easy.
I also wish for the object to copy the rotation of the bone. This is apparently less easy.
I’ve noticed that, while the Armature has one orientation upon creation, bones within it take a wholly different orientation. I assume this is for some technical reason, but how does one work around it?
In the attached photo, if I turn Copy Rotation on, the red mesh rotates 90° straight down.
Pay attention to your transform spaces. You almost certainly want world->world instead of what you have.
Note that you can just a copy transforms constraint for what you want instead of using two different constraints.
Edit: I’d also avoid “before original” and instead give the constraint on “replace” mode to an empty parent of the rendering object.
Thanks for the reply. The screenshot was taken after trying several variations of transform apace combinations and Mix methods. Everything seemed to provide identical unwelcome results.
Copy Transform yields the same results. The issue seems to arise from the fact that the bones are oriented (at the time of their creation) differently from the mesh objects.
I could edit the mesh of the object which is copying the transform data, but that just flips the problem around. Instead of being unpredictable while copying transforms, it becomes unpredictable while not.
Well, world->world is what you want. But if that doesn’t give you the orientation you want for your mesh object, the easiest solution to that is to use an empty parent:
- Make an empty 2) Give the empty a copy transforms constraint targeting the bone 3) Parent your mesh object to the empty with “keep transform”.
That leaves you free to rotate the mesh object into any orientation desired, regardless of the orientation of the bone.
Although it should also be said, you may want to just parent the object to the bone. Select object, shift select bone, enter pose, ctrl p->parent bone relative. (Or, consider a child-of constraint.)
I’ve tried using empties, but they yield the same results with the complication of an extra object and steps.
Straight up parenting defeats the ability of picking up and putting the object down at will, but I agree that could resolve the conflicting orientations.
I’ll see if the Parent Of constraint helps, but I may end up adding a bone to which no vertexes are mapped, just to lock it into a relative rotation that makes sense for the constrained object.
Got a workaround, I think.
Add an extra bone to the end of armature. We’ll call it the “ghost bone.”
In pose mode, rotate the ghost bone 90 Z and then lock all of its rotation values. This hopefully forces it to always be bent 90 Z from its parent bone. Further testing is required as of this writing.
Apply Copy Transform to the object to be picked up. It should be pointing in a predictable direction.
Keyframe the picking up and setting down of the object via the Influence of the Copy constraint/s. This is likely where you’ll tear your hair out getting poses to match, but it’s more viable than an incorrect 90 turn.
This method should never require assigning vertexes to the ghost bone. If it is properly locked, both the ghost bone and the constrained object are manipulated via the ghost bone’s parent bone.
If necessary, you can break Copy Transform in to Copy Location and Copy Rotation if you need to reference some other object.