← All ideas
  • Published 22 Dec 2020

Transformation offsets of Copy Rotation, Copy Location, Copy Scale constraints

Right now we have Copy Rotation , Copy Location and Copy Scale constraints that copy corresponding transforms from target bone/object. But there is no way of adding any offsets to copied transforms through bone transforms or constraints options (there is a workaround with empties that I'll describe later). To simplify everything I'll describe only Copy Rotation behavior but Copy Location and Copy Scale constraints behavior is pretty much the same.

Default Copy Rotation constraint behavior

Image Both rigs have an arm bone chain with different bone rolls of upper arm bone. If we simply copy rotation of that bone we'll end up with different arm orientations on bone's local Y axis (one can notice that - wrists are not aligned). And there is no way of fixing that. Child Of instead of Copy Rotation also will not help here because rest pose of both rigs is different.

Workaround with Empties

Image Here instead of Copy Rotation directly from target bone we:

  1. Create an Empty and add Copy Rotation and Copy Location constraints with bone from which we want to copy rotation as target;
  2. Create Empty.001 and make it child of Empty ;
  3. Add Copy Rotation constraint to the bone to which we want to copy rotation with Empty.001 as target;
  4. Add all the rotation offsets you want to Empty.001

That's the most common way of doing retargeting from one rig to another in Blender and used in such addons like UEtoRigify. As one can see that's a bit overcomplicated way of handling offsets and also overloads a scene with lot of empties.

There are few ways of how we could solve that to be more user friendly and to unlock more options to riggers and animators in use cases different from mocap retargeting:

Proposed №1: Add Rotation constraint

Image The best way IMO is to add additional constraint that adds Rotation , Location or Scale offset to bone/object. Basically this constraint will just add defined values to rotation, location or scale. That also will open a whole new world to riggers.

Proposed №2: Add Offset option to existing Copy Rotation , Copy Location , Copy Scale constraints

Image We could also have additional option in Copy Rotation , Copy Location , Copy Scale constraints where one could define offsets of constraint.

Proposed №3: Delta Transforms

Image Empties and other objects have this option by default, one can specify delta transforms. These are the transforms added to original transforms. But there is no such feature for bones! So implementing bone delta transforms also is an option here. But that implementation has a limit of just one delta transform. With Proposed №1: Add Rotation constraint approach theoretically we could have as much transformation additions as we want.

Copy Rotation constraint example .blend file

proposed_bone_to_bone_constraint_comb.png

100%

Development Status: Open

Upvote 11 Downvote 0
den33.info
22 Dec 2020

4 Comments

bassam

An offset would be nice in the constraint; it would also be nice if by default it was created so that the bone didn't transform (or you could have a set offset button, or both)

As far as the 'add rotation' button, what would be really cool is to have a 'transform' constraint, with an option to be used for 3D transform - and then the gizmos in 3D could attempt to set it (there's some space calculations/reverse calculation involved depending on your constraint stack setup, so it might not be that nice in every situation, but it could be nice - also it would be a bit annoying as you could potentially have multiple transform keys in your animation)

1
buzzkirill

I would also love this

Stan_Pancakes

Can't you use the Transformation constraint and offset rotation via its mapping? (It's a question, not a suggestion).

den33.info Author

* @Stanislav Blinov * Yesterday I got a response from Juan Pablo Bouza about how to achieve proposed behavior with constraints. So yes, that's possible:

  1. Simply add a Transformation constraint in local space after the Copy Constraint which is in world space
  2. Set the root bone (or any bone that you know won't be moving) the target
  3. Set Transformation Mix to After Original
  4. Then you just edit the "min" values of the constraint's Map To

This is already much better than having a lot of dummy empties! However requires one additional dummy bone. Also it's not very user friendly.

Example .blend file

1