[Closed] Reseting scale on a scaled animated rig
I know you’re not supposed to scale nodes at the object level. And I know that it’s even worse to scale an entire rig. But I did it anyway.
The rig is just an FK heirarchy made up of geometry and some point helpers. Oh, and it’s animated already.
So now I’m trying to write a Maxscript that goes through each node in the heirarchy and replaces it with a new node with a scale of [1,1,1], and also copies the animatioin data to the new nodes.
The copying of the animation data is where I’m having problems… when copying position data from an object of one scale to an object of another, the absolute positon of the animated node changes.
Does anyone know how to get around this problem?
Thanks!
Instead of copying the position data, you should copy the position controllers.
Stev
Thanks for replying.
Unfortunately such a simple and elegant solution won’t work in this case (at least by itself). If you transfer a controller from a node that’s been scaled to one that’s not, it may not work as you would expect.
Ok, I found a sloppy, non-mathematical solution to my problem. Maybe after I digest Bobo’s new DVD on matrix math I’ll be able to do this stuff more elegantly… until then I’m forced to think more like a desparate artist than an accomplished mathmetician.
The heart of my problem was the fact that transforms are measured relative to the node’s parent. Likewise, the value of a node’s position keys are multiplied by the node’s parent’s scale when the world-space position is calculated. So when I reset the scale of my nodes back to 100% ([1,1,1]), the animated child oblects’ positions in world space were changing. That was bad, because I wanted all objects, animated or otherwise, to keep their world-space positions.
My sloppy workaround involved creating temporary point objects that were animated (through scripting, of course) to follow the child object’s, keyframe for keyframe. This allowed me to generate a new position controller for each node that works with a parent with a scale of 100%, while keeping the same world-space positions as when they had a parent that was scaled <>100%.
Hmm… I’m affraid I’m not explaining clearly enough to make sense. If anyone wants more info on what I did, let me know, and I’ll clarify or post code or something.