Sunday, December 25, 2005

Finishing the prototype

I think the prototype rig is done. In the last week, I've added a pseudo forward kinematic style forearm orientation to my hand control. As well as getting a true FK arm working, with synchronization to the IK arm after switching, and vice versa.

The forearm orientation works especially well. I've gotten it optimized and working without an expression. This means the hand controller rotates with forearm, and the rotation channels are completely relative. So if you rotate the arm in IK or FK 90 degrees, but haven't rotated the hand, the hand rotates that same 90 degrees but the channels stay at 0 0 0. Based on the comments at Jason Schleifer's web site, a lot of people have not had any luck accomplishing this.

Keeping to my rigging philosophy of being able to alter the rig midstream in a shot and animating that alteration, I've added synchronization of the forearm follow and isolation settings so there's no jumping between states.

At first I borrowed Daniel PK's solution, which required an expression. But using part of his methodology, I was able to make an optimized direct connection instead.

The only limitation I'll state on the FK arm, is that stretchy doesn't work in FK...it snaps to an unstretched state if you had the arm stretched out. Also, you can't switch from bending the elbow backwards (as in "successive breaking of the joints") in FK, to IK without some unfortunate side effects. IK just doesn't support backward bending on the elbow. I could make a pseudo IK controller that would enable such things, but I think the arms already have enough choices for animators as it is, with IK/FK, FK rotation on IK hand, and six animatable and synchronized space switching choices, plus isolated shoulder rotation on both FK and IK.

I did a chopped up, lo res version of the character, which can be interactively switched (even animated between resolutions). Amazing as it seems to me, I had to actually write my own tool to chop the character up into separate objects to parent the segments directly to the bones. I posted this up at HighEnd3D (sg_polySeparateObject.mel). Really simple script, and amazing that this function isn't built into Maya.

In addition to the arm controls, I also completely altered the way the eye control works after input from Jeff Cooperman. It is now a rotational control, with an isolated option to aim at a control target, which itself can be constrained. Unconstrained, the eye position is synchronized between the isolated and rotational controls. Also added an eyelid shape control.

I optimized the rig speed Saturday, and saw a 6-8x increase in speed. It's now totally realtime in interaction, and tests so far play at full 24fps speeds.

I should begin working on a rigging demo Tuesday.

Planned Improvements:
Character interface
Ground-up skeleton rebuild with new tools.

Scripts
Besides the polySeparateObject script, I'm starting work on my skinning script. This will be used with my rigging tools. The rigging tools will create spokes eminating from the main bones, which can be user adjusted, to improve precision of proximity assignment. In the prototype this has worked well.

To facilitate reasonable rig speed, I'm working on a script to take assignments made to the so called "SPUR" bones, and add them to the parent bone, thus boiling out a great deal of soft skin cluster assignment that slows the rig noticably. This is an ambitious script, and the technique will significantly reduce the need to "paint" weights.

The challenge in this will be how to manage keeping SPURs that can be used for FFDs and pseudo muscle controls.

I've already gotten the portion of the script which allows me to read which vertices are assigned to what bones, and at what weights. I'll need to parse these, transfer and or add these values to the parent bone. Much of the code for parsing exists in syncOb.mel. Thanks go to Mike Hovland for pointing me in the right direction for locating the weights on the vertices/CVs.

I'm not including the various character specific scripts for synchronizing switching on the head, eyes, hands, shoulders and feet. Or the obsolete script for IK hand pseudo FK.

This week I should start working on graphic interfaces.

0 Comments:

Post a Comment

<< Home