Saturday 23 February 2013

Mega Update: Rigging

I haven't posted anything in a good while now, so I should get back into the swing of things. To that end, I'm going update here with a chunk of what I've been up to in my studies.

We're now in production for Major Project, for which we have to produce a volume of work, split into four sections. My four sections are rigging, two sets of game animation, and some unity development. Currently I've finished rigging, and am moving on to animation, which I'm stuck into at the minute.

For this rigging section, I've rigged two of the characters for Echoes: the dragon and the player character. As I was working on a tight time budget (for me at least) of two weeks max for each, neither are as fleshed out as they perhaps could be, but I think I managed to get a fair amount of features in so the animators shouldn't have problems.

The first character I rigged was Ruth Beresford's excellent dragon. He's a nippy little dragon, rather than a hulking beast, with a bunch of fun design features; the frills in particular being great fun to set up.

Overall I was pretty pleased with the dragon. He's fairly feature intensive, with a few things I'd not done before. I wasn't sure the best process for animating the dragon, but I assumed FK wings and legs would be default in the air. When he landed he'll move like a quadruped, so IK wings and legs would be needed. Not knowing the best course for everything I gave him IK/FK wings, legs, spine and tail.

I also tried to keep the rig as simple as possible, but also give the animators full control. The frills for example, are controlled by just one rotating controller that pops them up and down through set driven keys attached to it's rotation. The finer detail bones can also be controlled by switching on Manual Feather Control too, in case the animators need them separately for something.




For the chest and wings I decided to try to create variable parenting. For the chest in particular, I wanted to give the animators the option to have it follow the hips, making it easier to offset. I set it up with hypershade nodes and condition statements to create a 3 way switch setup to control parent weights.




Another feature I used with the dragon rig is filled controllers. I found these were much easier to select on the fly, as they had a larger surface area than the usual nurbs curves. The drawback was that they took a lot of space up, and made it harder to see the model. They also took a lot of time to set up, as I had twice as many shape nodes to deal with. I thought the best approach would be to create them for the dragon, and have a switch to turn them on or off. Then I could just observe the animators using it and see how many found them useful.


The most challenging things to rig were the wings. They were a complex system that I'd not rigged before, and I found it particularly difficult to make them curl in without clipping. I got decent furl/unfurl and curl in controls going in the end, mostly through the Ruth's excellent topology work.



---------------------

The second rig I made was for the player character, modelled by Dean Paupe. Having done bipeds before in Maya, I was less daunted by this character than the dragon. The player character rig is a little less feature intensive, but it still contains a few little bits to help animate.

The key things that differentiate the fae are his legs and his staff. I played around with a number of leg setups, to cover the IK chain with maximum control. However, in the end I found the proportions of the model were suited to just having a three-joint IK chain with a pole vector controller to twist.

The staff required a few tricks to get right. Essentially I knew that to animate attacks etc the best option would be to animate the staff and have IK hands follow. To this end, I needed to be able to snap the hands to the staff.

The solution was a simple parent constraint weighting set-up. My main criticism is that this is reliant on the transforms being zeroed, so it takes some manual interpolation to take hands off the staff after a complex motion.

A little testing also showed me the need for motion trails that originate at the ends of the staff, in order to allow nice clean curves. I simply placed nodes at each end of the staff for this purpose.








I also needed to attach the staff to his back when he's not using it. This essentially works in the same way as the hand snap, with a slight edit in that it also scales the staff down slightly. The purpose is to make it less obtrusive, and though we were originally wary of scaling it, the scaling was much less obvious to an outside observer than we thought.







------------------

For both rigs, I also created an IK/FK limb snapping script. I found that when animating the little girl, a lot of the animators were finding it problematic to manually match the arms up when they wanted to swap between. I had a limited experience of MEL scripting, having created simple workflow tools to help me out previously.

There were two parts to learn here, the first was how to actually perform the snapping operation. I did this following a tutorial by Zeth Willie, who explained the concepts behind the vector operations incredibly well. The tutorial was in Python, and I converted it to MEL for my usage. Not due to any views on script superiority, I just wanted to get to grips with MEL syntax better, as its the more complex of the two. Converting the language did help me to better understand what I was scripting, as it makes it impossible to simply copy it out. I got stumped a few times on syntax issues (the difference between ` and ' being a nuisance I found to a beginner MEL scripter).



The second thing to learn was the ui creation, which was much simpler than I'd anticipated. The scripting required was pretty simple, and I managed to make a UI that suited my needs reasonably quickly. I then linked up the scripts by creating sequences of commands for each button. They select the appropriate controller, and then run the appropriate procedure. As the scripts define their object variables using message attributes, I was able to make the script work for both the Dragon and Fae rigs.


No comments:

Post a Comment