September 2013
Those final baby-steps
Aside from shading, Rose is close to being complete – all that’s really left are her eyebrow blendshapes. I’m not very motivated to model them, though, because I’ve lost my kinda taste for pushing and pulling points. Fortunately Zbrush can be much faster, even if I’m not quite used to its interface yet.
Something else I ended up doing out of boredom, was using Rose as a starting point for a new Daisy model. Unlike her old model, this time I made sure to use proper reference drawings –
It’s still rough, but it’s a start.
Hello, karma?
And here I was feeling so good about my bindPose tool. I had added some functionality that Maya’s dagPose command doesn’t seem to have. I pat myself on the back, job well done. Except it turns out the dagPose command is a little more complicated than I originally thought. It still doesn’t do what I need want it to do, but what it does do can be a bit… odd, depending on how you’re interacting with it.
One of the procedures I wrote over the weekend is meant to save out the member, parent, and worldMatrix values from a dagPose node to a mel file, so the node can be recreated in another file. But while testing it on Rose’s bindPose, I noticed that the values didn’t match up – some of the members would have no worldMatrix values, for example. Looking into this, things got weirder and more frustrating.
If I used `getAttr -size bindPose.members`, I would get a value of 302. Using `dagPose -q -members bindPose` would return a value of 246. A more brute-force method returned a value of 217. But if I loaded the node in the connection editor, there were 305 member slots, and they all appeared to have incoming connections. Even more confusing was that, while the getAttr command said there were only 302 members and parents, it said their were 305 worldMatrix entries.
What I’ve found out, is that even if you tell the dagPose command to store only specific objects, it appears to also store any objects above those, as well as their parents and worldMatrix values. But when queried via the dagPose command, these extra members are not returned. If at some point you reparent an object, and then delete the groups that were once above it, those objects’ connection to the dagPose node will obviously be removed, but their worldMatrix values remain.
For now, what appears to work is to use the `getAttr -size` command on all three attributes, then using the highest value to limit the loop that processes the objects. It’s a hack solution that I have a feeling will cause problems later, but for now it appears to work.
Hello, Necessity
I was hoping I’d be done with scripting for a while, but then necessity reared its head – After running into the old “skin was bound at a different pose” error, and the “Go To BindPose” screwing up character’s rig, I decided to write my own bindPose tool. There’s no reason “restoring” a bindPose should shoot a character’s jaw up through their head…
When the UI is loaded/refreshed, every dagPose node in the scene is selectable from a drop-down menu. If a skinned object is selected with the UI is loaded, its bindPose node is automatically selected.
Selections between the member and parent lists are synced up – select a member object will also highlight the stored parent. The pose can be restored for all nodes, or just those that are selected (something the dagPose command doesn’t appear to do). Poses can be restored globally or locally. And just to be extra careful, the current pose can be saved to a new node, so it can be restored later.
With the ability to copy and paste poses, this script could be a useful animation tool… but that’s not its intended purpose. Instead, I’ve started to write a separate script, modeled after 3DSMax’s copy/paste tool for Biped –
For now it’s just a UI, but getting it to work should only be a matter of time… preferably after I finish Rose.