Rotation and translation with a single controller


#1

Hi,

Maybe it’s something simple, but I can’t seem to get it working correctly.

Basically, if I rotate the main controller, translation is now in 2 axis. How can I set it up, so that translation would work in 1 axis after rotation. Is it possible with 2 controllers at least? I’ve tried it with constraints and parenting so far.

Any idea is greatly appreciated.


#2

I imagine you want to rotate the translation axes when you rotate the control object; for this to happen, its parent has to rotate instead.

One way to do it would be to instance the control object’s rotation controller to its own parent’s rotation controller (possibly replacing it) and make the control object’s rotation controller have no effect. That way you’ll be rotating the control object, but the actual rotation would be happening at its parent.

I don’t know how this would be done in Maya, but in Max It’s rather trivial:

  1. place and link stuff the way you want, freeze transforms of the ctrl
  2. open trackview, find the zero euler rotation track of your ctrl object; select it, RMB and choose copy
  3. select its parent, find its rotation track. If it isn’t a list, RMB and “Assign Controller”, pick rotation list. Select the “available” track in this newly created list controller, RBM and pick “paste as Instance”
  4. If you leave it like this you’ll get double transforms on rotation. Select ctrl object, find it’s zero euler rotation track, double click on the list controller it belongs to, a dialog will open, select the zero euler in the list, set weight to 0.0

#3

cur10us, Maybe you should post a pic explaining what you want to do…


#4

I imagine you want to rotate the translation axes when you rotate the control object; for this to happen, its parent has to rotate instead.

One way to do it would be to instance the control object’s rotation controller to its own parent’s rotation controller (possibly replacing it) and make the control object’s rotation controller have no effect. That way you’ll be rotating the control object, but the actual rotation would be happening at its parent.

Thank you, Zhalktis for the explanation. Yes, that’s exactly what I want to do. Though I am almost unfamiliar with Max, now trying to find the Maya alternative. I connected the child’s rotate attribute to the parent’s. Because it gives double transforms, I turned off “Inherit transforms” on the child. But in this case I’m back in square 1…

cur10us, Maybe you should post a pic explaining what you want to do…

sorry, you are right.

Here I rotated the controller 45 degrees, and now because the controller isnt aligned to the world , translation in 1 axis changes 2 channel attributes.


#5

You need to inherit the transforms, you just need to make the rotation controller on the control object have no effect (for control object). I’m sorry, I don’t really know the common practice to do this in Maya. Perhaps there’s a way to negate its rotation using another controller.


#6

Thanks , anyway. it sounds something really simple. Waiting for more ideas.


#7

I remember beating my head against this one. I’m pretty sure it’s not possible, or at the very least would be pretty unstable. Since it’s a lot of work just to make animation slightly easier, I assume what you really need is a clean output value for how far in a given direction the control is going. Try this video: https://www.youtube.com/watch?v=QpDc93br3dM
It goes over how to make an autorolling wheel rig using expressions. It drives the wheel’s rotation based on a vector derived from the previous frame.

Edit: Just noticed that someone else posted the same video on another thread.


#8

I don’t think it’s possible to do this with one single controller, if you figured out how you would probably make a lot of animators very happy :wink:

There’s different workarounds on these kind of challenges though, but as there’s downsides to all of them you have to choose which solution to use based on your requirements (you need to know what you will animate). Very often you get away with having a “gimbal controller” as the root-controller, this will only be used for rotations, the controller below will be your main controller (rotate/translate), then you may also throw in a translation-controller at the bottom. That way you have control over gimbal locks, and you’ll always have a one-axis translation controller at the bottom.