Mirror Rig Script Demo

Posted by on Apr 5, 2010 in Featured, R&D | 7 comments

This script is still a WIP, and I’m not sure that it will ever officially be considered complete because there seems to be a new problem waiting around every corner. You can see, after the mirroring is done, that on the mirrored leg there is still a few twist helpers not properly aligned and one of the bone chains for the foot are orientated backwards. Solve one and run into another! But, its still fun trying, and it is working half-decently right now, so I thought it would be cool to put together a video of it in action.

The video shows the script processing with a “sleep” command embedded in the for-loop that is mirroring the rig. I put the sleep command in so that you can tell there are no camera tricks with clever cuts being made, as well as to actually have something to look at. Without the sleep it would literally just be me pressing a button, waiting 20 seconds or so, then the other half of the rig appearing magically. Not quite as interesting to watch :)

7 Comments

  1. there may be some little problems with the script, like you said, but that’s pretty damn amazing! I can’t really think of any other tutorial or R&D piece that comes this close to being able to successfully mirror over a fully built rig. This is pretty keen!

  2. Thanks Julie! I hope I can get it stable enough to be able to do a release some day, even if just a beta.

  3. Hi
    stumbled to the blog and saw this. nice script. but still understanding how it is working… with this you can mirror any hand-rigged rig? if yes, how you define how transforms will be oriented?(in different rigging styles td may want different orientation of transforms)
    Im interested because i also working on something similiar, but more powerful and customizable. Im started with implementing in maya. you can see the old video here:

    http://www.youtube.com/watch?v=ktIbU_lhVLY

    and also read about this here http://xeash.net/?p=11

  4. Yeah, this is all still in the early stages and nowhere near a final tool. Just working on getting the process fleshed out. I had gotten it quite a bit further since this video was made, but haven’t had time to do anything on it for a little while now. The plan now is to take what was learned from this tool and go in a different direction. Can’t really talk about those plans right now though.

    Not totally sure what you mean by “define how transforms will be oriented”. I had just started creating a very minimal UI in the last version of the script though which handled this. It just had two buttons, one for defining which nodes belonged to the rig, and another that defined which nodes required an extra transform applied during the mirroring process. This would usually just be the control objects and their parents to allow for rotations to be symmetrical. My goal was to keep setup to a minimum so it remains a quick and easy process.

  5. Well yes im also in experimenting mode, however i decided to do all in C++ via my own math and then just convert result to native app math for speed and additional flexibility.

    >Not totally sure what you mean by “define how transforms will be oriented”.
    You see im just guessing that you doing a tool which would be able to mirror YOUR rigs, with YOUR rigging style, however there is numerous styles of rigging and numerous ways to mirror rig. So my intention is, to keep that in mind, and do a tool which allow you to mirror rigs in ANY style.
    Anyway good luck with this. Im hoping you’ll share with community some tech info behind this and maybe video demo.

  6. looks cool, but agree with Xeash that if it’s not Rig-Style dependent then that might be the right tool really. So it dependent to your style of rigging? Or no?

    But overall nice effort :)

  7. Oops. I didn’t even realize that Xeash had replied again :S.

    The intention of the script, and how it was designed, was to mirror rigs regardless of how the rigs were set up. It has been written more with Max in mind rather than my own rigging style, although my rig rigging style is obviously what has been used in testing so far. There may be a few limitations, which as requiring list controllers, but those limitations are less about rigging style and more about Max; after all, if you have a constraint assigned to the absolute position track, you will not be able to apply a position change to that node as there is nowhere for those values to go. The lack of UI, of course, limits the extent to which the mirroring can be customized at this point, but at its core it is not dependent on the rigging style.

    The newest version, which hasn’t been touched in a while, had a very minimal UI. It was all of three buttons: “store selection as original nodes”, “append selection to symmetrical nodes”, “mirror rig”. “Append selection to symmetrical nodes” allowed you to choose, say, your control objects, and then they would mirror and then be multiplied by another transform to make it so it rotated perfectly symmetrical to its respective control on the opposite side of the rig. This added just a bit of customization, but of course it could be taken a lot further.

    What you’re seeing in the video is the tool working as just a proof of concept; just basically wanted to see if it could be done. It is flexible in the sense that it will still work with any set up (that has been tested so far. There are surely some holes in it), but not flexible in the sense of options for the end user. There can definitely be a lot of work done to the code to allow more flexibility and customization for the user with what to do come mirroring time, but right now its still in its alpha stage and I wasn’t thinking about the front end yet at all lol. Only posted a video because I was surprised and excited it was working, as I really didn’t think I was going to be able to get even this far with it :).

    I plan to get back to this at some point; probably going to start it over and take a different approach though. Up until this point has been a huge learning experience, and I am certain there is a better way to go about tackling this. The number of workarounds I have had to implement into the script to get around silly Max stuff is huge, and its still not working 100% of the time. If there has ever been a coding equivalent to counter-animating, this is it lol. Not elegant in the least :).

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>