06 May, 2009

Scale Constraint on Joints

It does not work properly. As I had posted earlier, joints use a special scale connection with inverseScale attribute (only joints have this tranform property) when you create a chain hierarchy. This gives a special behavior when scaling a parent joint. And using scale constraint messes up this inverseScale calculation in joint transform and so the child joints scale weirdly when scaling the parent joint.

So use connection and a blend node(blendColors) on a joint chain to blend between scale values.

edit:
From reading on forums I get that the problem is with constraints not taking "segment scale compensation" into consideration. So orient constraint suffers from the same problem. I had encountered this problem when working on a stretchy setup on arms.

6 comments:

  1. Hey Maulik,

    I just ran into the same problem (and this came up when I Googled it) - only I didn't use a blend node at all, just an expression. Did you ever figure this out?

    ReplyDelete
  2. Hey Jessica,

    I am not sure what exactly you are doing. The problem is that the constraints don't take "segment scale compensation" into account. I don't remember if I solved this, but one of the ways could be to use a group transform on top of joints?

    -M

    ReplyDelete
  3. what do you mean when you say,

    use a blend node, is that literally a blend node? (i cant find reference to those in maya help) or an expression or script?

    ReplyDelete
  4. to clarify, i have:
    -an ik joint chain with its own stretch expressions,
    -an fk joint chain with its own stretch expressions,
    -a bind joint chain to which all my geometry is attached,

    i want to attach the bind chain to both control joint chains and control the blending of scale values between them with one master slider (ie: the ikfk switch)

    the scale constraint "sounds" like it is what i want, but im getting dodgy scaling on my child joints.

    any ideas?

    ReplyDelete
  5. Hey Jordan,

    There is a node called blendColors that you can use to blend two float values. And there is a slider to decide how much each of input goes into output.

    To blend, translate, rotate and scale values you can use this same node.

    -Maulik

    ReplyDelete
  6. thanks, that fixed everything!

    ReplyDelete