Wednesday, November 4, 2009

Offsets

I've been having an interesting thing happen on about 25% of the rigs I've been working on, on the right arm only. I have since figured it out, but I was wondering if anyone had any feedback on this.

I would set up the triple arm in either one of two ways - either using a blendColors node to average the rotations between IK and FK, or just orient constraining each and using set driven keys. The setup itself didn't matter. Upon getting all of the controls for the arm set, I would go to test out the blend. On the right arm, if the wrist wasn't rotated in either FK or IK, it would blend fine. However, if any rotation was there at all, it would flip halfway through the blend.

First, I thought I had messed up somewhere, but then this was happening on more than one rig, and I couldn't figure out why. Everything was frozen, everything was zeroed, all history had been deleted before applying controllers (and after building them). Interesting. I also noticed that even just translating the IK wrist would cause the wrist to go to -357ish, which made no sense to me either.

Then I saw the offset of the orient constraints were at either 180 or -180, most often on the Z or X axis. Odd - the there was nothing unusual about the trash groups or the controls themselves. So I undid the constraint, then added a -180 rotation to the trash group, and re constrained it. Bingo, no flip, no crazy IK wrist rotations. Then I tried adding the rotation (for both IK and FK wrist controllers), and re-freezing transformations. No flip.

The fact that the rotations are on the trash group means this doesn't affect the actual controller at all, but what I'm wondering is why Maya behaves this way - all the controllers were zeroed, frozen, and had all history deleted. All of the skeletons had correct joint orientations, and this only happened a few times, on various (most bipedal) rigs.

Then I thought maybe it was something in the way my joints were oriented. So redid the rig a few times with a few different joint orientations, and the same thing happened. Hmmm.

Does Maya have something to do with this? Is there something somewhere that affects things that are rigged in the 2nd and 3rd quadrant? It's not some huge deal that slows things down, but why should I have to rotate my trash groups 180 degrees and then freeze transforms to get rotations to blend? I notice sometimes I get interesting offsets on the right foot as well, but never to the point where it has caused the rig to flip.

Just something interesting I've come across. Rotations are quite complex, this I know, (entanglement theory - gahhh) but this just seems odd to me.

10 comments:

  1. Oh man, I spent 45 minutes of my 1.5 hour talk at the Blender Conference this year just talking about rotations. Not package-specific. Not even computer-graphics specific. Just the raw concepts and properties of rotations. It wasn't comprehensive, but it covered the basic issues most relevant to animation and rigging.

    Some guy in the back row taped it, but he never posted the video online, and I have no idea who he was. Gah...

    I wish I could post it. I don't mean to sound like an arrogant git, but it had really good info in it that I've never even seen acknowledged anywhere else in the industry.

    You might be able to gleam some of it from the slides: http://www.cessen.com/misc/index.php?page=bconf_2009

    Hrm... maybe I should just film myself giving the talk again. I wouldn't even have to be sleep deprived then.

    ReplyDelete
  2. Haha, I love the intro slide to that XD! Fantastic. And if you did tape yourself talking, that would also be great! You're not an arrogant git, by the way.

    I just found out from the modelers that it might have something to do with the normals, believe it or not - since Project X is the first time this has ever happened. It's bizarre. Easily fixable, but bizarre.

    ReplyDelete
  3. i can't totally understand what your problem is from the description u wrote...but from what i can gather the problem seems to be the (offset of the orient constraints)
    sometimes when doing an orient constraint on things, with an offset can cause problems.

    when i had issues doing orient constraint on ik wrist joints. i use a few different fixes to correct that problem depending on what the problem is...

    but it would help if you have a example file with a description for me to look at
    if it's a small file you can email me at
    ZhenTZhou@gmail.com

    ReplyDelete
  4. I'm actually having this issue and staying up late every night because of it. I'm glad I found this blog but I need to ask, What is a trash group? I want to fully understand this so I can finally solve this problem.

    ReplyDelete
    Replies
    1. It's a fancy name for a null group! Basically something that you can dump transforms on, a garbage bin for non zeroes, if you will :]

      I hope you can solve your problem! And sorry this blog hasn't been updated in a while - work is keeping me busy!

      Delete
  5. I've just come across a separate problem which I might have only seen once before. Seems to be Maya not calculating the offset correctly for the constraint.

    To fix I just tweaked the offsets on the constraint, but as for why I'd get +/- 180 rotations then apply down to the joint I don't know...

    I know this is an old post, but it was a helpful read so I thought I'd throw some more into the melting pot ;)

    ReplyDelete
    Replies
    1. Worth noting that parent constraint worked fine...

      Delete
    2. Interesting that a parent constraint solved the problem...

      I haven't actually run into this in Maya 2012 lately, but it's always at the back of my head to check just in case the offsets aren't being calculated properly somewhere.

      And thanks for adding your voice! I do check this blog regularly, but since I'm not rigging in Maya at the moment I tend not to update here as much :]

      Delete
    3. Might as well add this, too: I'm working on rigging a biped model for class, and the ball joint in my foot was getting flipping (180,-180,-180) when I applied an orient constraint to it. The null control group feeding the orient was zeroed, and the joint was zeroed as well. Switching to a parent constraint, set to rotation only, solved it. My other foot uses orient constraints, with no issue. Weird-ass problem :/

      Delete
    4. Josh - what version of Maya?

      Delete