I’ve written a few functions to serve as utilities for the overall rigger to use, including a joint splitting function and some renaming functions. I’ve also switched from using maya.cmds to pymel.core. I still don’t have a good grasp on using pymel in a pythonic way, but even just using it in place of the maya commands is making things like renaming duplicates a lot simpler.
I’ve started re-writing the old code I had for the torso as class Spine(), using the Control class I wrote earlier for making controls and offsets.
I’ve found that making it work nicely for a variety of (mostly unforeseeable) different skeleton structures is an interesting challenge! I’m going to have to do a number of tests before I’m anywhere near happy with it. Right now I have it set up to build the spine in from a parent and child unless a list of joints is supplied. From there, unless otherwise specified, it builds a ribbon spine structure by building curves with a CV at each joint and lofting across. It then duplicates the spine joints, binds a duplicate nurbs surface (which is sent as a blendshape to the bind nurbs surface) to these duplicated driver joints, creates a follicle at each joint and parents the original joints to those follicles. Those joints then will be used as the bind joints.
The new driver joints are sent through then as the new spine joints, from which it builds the overall spine controls system. If no ribbon spine system is created, it’ll just use the original spine joints.
I’ll probably write a function for creating new inputs to the bind nurbs surface with a few default options (e.g. stretch/squash deformer (which would turn off the traditional stretch)).
At the moment the ribbon is built from the pelvic joint (if there is one) up to the last joint in the list of spine joints (whether user-defined or generated by the insertJoints utility function). I’m thinking it should probably only be a ribbon from the root up, but I’ll do some tests with it as is once I finish building the control structure and see which runs better.
I’m also currently building it in a way that works for bipeds, but I haven’t yet taken much thought for quadrupeds…. I don’t want to have to rewrite too much of it when I start working on the quadruped portion of the module.