Monday, February 22, 2010

Still alive...

The cake is a lie...

Just doing a quick post to keep this thing going. I don't have anything to show for the past two weeks... yet. I've been doing a lot of rigging work which is all very technical and not very visual. Long story short, I got my Nazi Grunt character fully rigged and weighted, which made me very happy. Then I exported him to the UDK for testing, and that did not.

Maya uses the Y-axis as its world-up, while UDK uses Z-up. I've been doing all my modeling and character prep in Z-up space, but the autorigger I've been using doesn't play nicely with Z-up, so I did all the rig setup in Y-up. Needless to say, that causes problems. Additionally, the autorigger adds a lot of extra bones to handle IK/FK arms, legs, and spines, and those get exported to UDK as a mass of crazy. Had to figure out how to pare it down to just what I need.

Technical Stuff
For those interested, here's how I solved these multiple problems:
1) I saved the whole rig to a new file, where I stripped the skeleton of everything except the smooth-bound joints. I then parented the floating joints (spline-IK spine) to the root spine joint.
2) I then exported a skin weights map to preserve all the weighting I'd done this weekend, then removed the mesh's smoothing skinning.
3) With the mesh and skeleton separate, I was able to rotate the mesh to orient correctly, and could freeze the rotation of the skeleton's root joint. This solved the issue where my animations played along the wrong axes in UDK. Previously, even with the controllers pointing correctly, the actual skinned bones were receiving translates/rotates along the wrong axes.
4) I smoothbound the rotated mesh to the skeleton and re-imported the skin weight maps. Because I have some mirrored UVs to save on texture memory, I had to re-paint some of the weights and mirror.
5) This file was saved, then imported into the file with the full rig. I deleted the mesh attached to the full rig, then parent/orient constrained each of the bound joints on the imported file to the rigged joints of the existing file.

This gives me a certain level of compartmentalization between the rig I'm animating versus the rig that's actually moving the mesh. I can now change around the controller mesh in various ways without affecting the bound skeleton and mesh. If, for example, the leg rig turns out to be something other than what i wanted, I can remove the control structure, create my own, and I don't have to worry about re-exporting a new version of the skinned mesh to the UDK or having to update any exported animation to account for new/deleted bones, or changed proportions.

The downside to all this is I've realized that I have to do this to Chester, too. Not as bad as having to figure it all from scratch again, tho.

No comments: