20 April, 2009

Direction connection for rotation

From my experience so far, connecting rotation values directly is not a good practice. There are some pre-conditions that have to match in order for this to work. So you end up loosing quite a bit of flexibility and you have to make 110% sure that those conditions would not change after you make connections. Here are some main conditions that I learned.

1. Rotation orders have to be the exact same.

2. If local rotation axis between parent and child (relationship considering how connections are made) do not align all the time this will not work properly. So rotating parent will rotate child differently.

So if you still need to use the connections and solve at least the 2nd problem, then you need to create a node network that will find the offset between local rotation axis of both objects and then assign rotation value to the child object accordingly.

2 comments:

My way around this is to just run a delete parentConstraint to align a controller to a particular joint, then group that in a position trash group to take over the rot values, and then I have a zeroed controller. Usually this works, but every once in a while I get some weirdness that happens, especially with hands.

Yes that's generally a good practice. But connections are more trouble when you try to control another control/joint using just connections, esp. rotations. Connections would give you better speed than constraints but as I mentioned there are these conditions that this method needs in order for it to work. This was a good learning experience.