I uploaded an early deform test of the face now that I have finished the skinning. Im not entirely sure why the background of the still image is so pink. The whole thing is grey when it plays… YouTube is strange sometimes.
Yesterday was the deadline for our first hand in. Its a chance to collate everything we have done so far and hand it in to the tutors to get some feedback before the actual deadline. Obviously nothing is finished, because we still have three weeks of work left to do, but its nice to be able to show the progress so far.
When I hand in the final versions of these I will be adding text to explain the rig demos and make them a bit clearer.
Whilst I was skinning I discovered yet another mistake with my leg (and arm) rigging. When constraining the three tibia joints so that they would always stay the right distance from knee and ankle, I used a parent constraint. I had thought this would mean they would twist nicely when the foot was rotated. What I had not thought about was that this would of course affect their rotation in all three axes, and not just the one twist axis I wanted. When I started working on the leg and looking at the movement during deform tests, I realised my mistake.
The joints were rotating and so rotating the leg mesh on an axis that the leg shouldn’t be able to rotate. I had to delete all the tibia and femur constraints (including the parenting to the deform skeletons) on the IK chains. I also had to delete all the skinning I had done so far, as the deform joints were also out of position.
I used the FK joints to reorient them correctly and then used a point constraint rather than a parent constraint to control their positions relative to the knee and ankle. I then wired up the ankle and wrist controller’s on the twist axis to drive the limb’s rotation. I simply wired up each of the tiba/femur joints to have 0.25 of the twist rotation of the ankle/wrist. Combined with the cumulative rotation of the parent chain, this caused the three joints to rotate 0.25, 0.5 and 0.75 of the ankle/wrist rotation.
Then I just had to parent constrain the deform skeleton once more, wire up the various switches and I could start skinning again.
Suffice to say, lesson learnt. I will be thinking much more carefully about which constraints I use in the future.
When first starting the skinning, I like each vertex to either be 100% influenced by a joint, or not influenced at all.
I can define areas like the pelvis and the rib cage very clearly, and then seperate up the vertices in between and give influence to the joints in the spine. This results in deformations that have very sharp edges. However, it provides a very quick way to establish which areas of the body should be moving with which joints. It also removes any unwanted stray influences from joints that are nowhere near an individual vertex.
Once that is complete, I can start to smooth the influence so that multiple joints can be effecting any one vertex. The smooth tool is particularly effective for this part of the process, though it does occassionally cause an unwanted joint to gain some influence over an area of the mesh that you don’t want it to. However, by swapping between joints and smoothing gradually the deformations become much cleaner.
So yesterday, I finally got the elephant rig to a point where it could be referenced into the animator’s files. One of the major things I worked on was updating all of the controllers so that they are clearer and fit the model nicely. I foolishly assumed this would be easy, but I hadn’t reckoned on the awkwardness of the curve creation tools in Maya. It took me quite a while of just repeatedly trying to create shapes and deleting them as they failed to work. I think my determination to create things that were perfectly symmetrical possibly did not help the situation, but an assymetrical controller just doesn’t look as neat and clean in my opinion. Eventually I hit upon the idea of using the snap to vertex tool and using the edges and vertices of the elephant to help me create controllers that fit nicely to the contours of the elephants body. Having drawn a selection of curves I needed to then join all the individual curves together into a single item. This involved reparenting the individual curve shapes a single curve node and then deleting the rest of the empty nodes. Frustratingly I could find no way to tell Maya to actually combine all the shapes nodes on each curve into one single curve, but each controller selects the entire item wherever you click it, so it still works, its just not as clean as I would like it to be. I then scaled the controllers out from the body slightly and coloured them. I had hoped I could then parent these new shapes to the controllers already in existence (as I had with each individual curve to make the new controller), but every time I tried, the new controllers were rotated strangely and moved away from the body. This was due to the difference in positions of the pivots of the old and new controllers. Hoping I could avoid having to reposition each new controller I decided to instead break all the constraints and set everything back up on the new controllers. It turns out I still had to reposition the pivots, and so rearrange the shapes, but at least I knew I didnt have to spend time trying to delete the shapes of the old controllers, I could just remove the entire item.
I did, however, forget to redirect the spine rotation to the new controllers, so I had a bit of a scare later in the evening when I created a global control and tried to check that everything moved as I wanted it to. When the elephant rotated 90 degrees, the spine flipped, presenting a problem I had first encountered in my 2nd year when rigging a quadroped in 3ds Max. I panicked for a while that my IK spline spine was in fact broken and I would have to come up with a completely new set up. However after I checked the IK I realised that in creating the new controllers, I had not told it to use them to decide the rotation of the spine. Thankfully, this fixed the problem.
I also needed to update the rig with the new low poly model that my artist had altered for me. I brought the mesh in and whilst trying to work out how to load the skinning from the old mesh to the new mesh, I found an option that instead replaced an old mesh with a new mesh. I tried it out and it worked brilliantly. The old mesh changed to the new mesh. However, I now had two versions of the new mesh, one that was skinned, and one that was not. Assuming that the unskinned mesh was no longer needed I promptly deleted it. A couple of hours later, when testing some other part of the rig, I discovered my mesh no longer seemed to be moving with the bones. Confused I saved the file under a new name, closed it and reopened it. To my horror, the mesh was now invisible. The outliner still showed all the various parts of the mesh, but I couldn’t get them to appear.
I hastily opened my previous iteration only to discover that that file suddenly had exactly the same problem. Desperately hoping I hadn’t somehow broken every single version (and so lost all my skinning) I tried the next step back. To my relief the old mesh was there and skinned and working absolutely fine. I had simply lost my day’s rigging work, but nothing else. Deciding that replacing the mesh clearly wasn’t the best method to update my rig, I started working on saving off the skinning so that I could load it onto the new mesh. Frustratingly it seemed Maya was only giving me the option to load each bones skinning one at a time. It was doable, but a bit pointlessly time consuming. Fortunately, I knew one of my classmates, had successfully, and easily, loaded skinning onto new meshes during his project. I asked him about it and he showed me a quick and easy method. It involved skinning the new mesh to the bones (but not editing it at all) and then telling the new mesh to look at the old mesh for the skinning values. Maya can load the skinning in a variety of ways, by volume, by UV map etc. It was brilliant and loaded the skinning onto the new mesh perfectly. I didn’t even need to tweak it, though Joe had warned me I might need to. This is great to know as I now know I can quickly skin the high poly elephant to the rig (and tidy it up afterwards) as soon as it is ready. I will not have to go through the time consuming process of skinning from scratch again.
The last thing I needed to build was dynamic tail. Having already gone through the long process of working out how to do the trunk, it was simple a case of repeating the method on a much simpler chain. The dynamic output curve became a blendshape for the spline whilst the controls affected the dynamic input curve. Again, unfortunately, the rig doesn’t update its position until the animation is played, but, to my current understanding of dynamics, there is no way around this.
I also created a control for the tail that will rotate all three FK controllers at the same time. I actually created three of these for the trunk as well, so that an animator can control the entire tail (or a section of trunk) without having to select a whole bunch of controllers. Every controller I create is parented to a group (with the suffix _SDK) and that group is then parented to another group (with the suffix _0). The _0 group becomes the null group, which provides a 0 point for position and rotation. The _SDK group allows me to create batch controllers whilst still making the individual controllers able to tweak the bones position. I simply wired the rotation of the batch controller to the _SDK groups of the relevant individual controllers. When the batch controller is rotated, each _SDK group wired to it also rotates. The individual controllers parented to the _SDK groups also rotate (due to the parenting) and so rotate the relevant bones. However, because the controls are not wired to anything, the animator is still able to tweak the position of the bones individually at any time.
I then set up a switch for the tail to allow the animator to blend between dynamic and FK. Like the trunk I also set up some attributes to allow the animator to change the stiffness and flexibility of the curve dynamics if they wish.
Finally, I added some empty attributes to various controllers ready to be wired up to blendshapes when I have the highpoly mesh. I created them in advance so that it is less likely there will be any problems with the referencing when I update the rig later on. I wanted to make sure that everything that might be animated was already in place, and so it is only skinning and wiring and not controllers that will change in future files.
And finally, its all over. Im just collating all my files together ready to hand in. Can’t believe how fast the time shot by. Also can’t believe its almost time to be a 3rd year. Crazy!!
Anyway, here is the final showreel of my 2nd year work. Unlike the longer coursereel, this does not have the entirety of my work on it. This simply has the best of what I’ve done during this major project. Plus it has music. Woooo.
The skinning is finally almost finished, and I am now working on getting the deforms as smooth and natural as possible. One of my biggest problems has been the deformation of the back leg. When the knee twists away from the body, it causes the mesh behind the leg to sink into the body and form a large indent. There are several possible solutions to the problem. The best one would be to create an extra bone linked with the leg that the mesh is skinned to that can be animated to force the mesh back out when the leg twists. However I am already behind on this project and although it would be the neatest and most effective solution, I simply do not have the time available to experiment and get it working properly. As such, I have instead created some simple morphers that can be switched on and off to fix the dent when the leg is brought forwards/twists.
Well, its Major Project time already. How has this university year managed to rush by so quickly?! Can’t believe the first term is almost over. Anyway, major project time means major decision time. We basically need to do four three week projects, two of which are collaborative and two of which are personal. However, there is a huge amount of leeway with what we do and what counts as collaborative or personal. While collaborative does of course require working alongside other people, the personal portion could be a specific section of a collaborative project that only I worked on.
Having discussed with tutors, we have also agreed that I can spend half my time creating rigs, and half my time animating. My main focus is currently leaning towards VFX and specifically creature animation. As such the main thing I currently want to do is find an artist who will create me a realistic elephant model that I can build a rig for and then animate. If possible I will try to find some VFX individuals that might help me composite the animation in to a real video.
So I’ve just spent the afternoon researching the skeletons of african elephants and watching various videos on the BBC motion gallery (which by the way is one of the most awesome resources for animal reference footage).
We have a pitching session middle of next week which hopefully will help me find a partner modeller as well as decide what the other half of my major project will be. In the mean time, more planning and research is required!