Character Rigs & Blendshapes – Maya

Maya Character Rigs – Luxo Jr

 

The first 3D session this week had us carrying on with character rigs (exciting!), so we went over the last couple of weeks as a recap. The skills that we have covered and that may come in handy for the session are:

 

  • How to animate along a curve path
  • How to animate a helicopter rig
  • Using set driven keys

 

Some of these could be applied since we were going to be animating a lamp, which follows the main focus of the lesson – the Luxo lamp and the animation that brought it into the light (pun intended).

 

 

Produced and released by Pixar in 1996, the American computer-animated short film Luxo Jr. revolves around one larger and one smaller desk lamp, the latter of which exuberantly plays with a ball to an extent that it accidentally deflates. By today’s standard, the narrative isn’t that impressive but at the time, it was Pixar’s first animation after Ed Catmull and John Lasseter left Industrial Light & Magic and is the source of Luxo Jr., the mascot of Pixar.

In 1986, Pixar Animation Studios produced its first film. This is why we have a hopping lamp in our logo.

 

 

In technical terms, the film demonstrates the use of shadow maps to stimulate the shifting light and shadow produced by animated lamps. The ‘limbs’ are carefully coordinated and their trailing power cords and articulation add to the believability of the moving lamps. On a cinematic level, it introduces effectively expressive individual characters and a simple entertaining story. We watched a behind-the-scenes video with the creators and I learned that the crowd really went wild when at its first screening. Lasseter explained that they had made something that really touched people’s hearts, and realised that you don’t need to be overly precious with details and character stories to make an impact – “the crowd were screaming and applauding before the animation had even finished”.

 

 

John Alan Lasseter is an American director, producer, screenwriter, animator and former chief creative officer at Pixar and Walt Disney. His aim was to finish the short film for the annual computer technology exhibition, SIGGRAPH, a popular event for industry professionals. He worked around the clock for its release, which reinforced the opinion turnaround that the computer is not merely a type of automation that might endanger people’s jobs, but can be part of the artist’s toolkit and help tell stories, which was realised alongside and after the animation.

 

 

It was the first computer-animated film to be nominated for an Academy Award (Best Animated Short Film). Luxo has since become one of the most significant characters in Pixar and has been compared to the likeness/popularity of Disney’s Mickey Mouse.

It was really interesting to find out some of these facts since my knowledge of Pixar’s mascot was very limited. After our research task, we were given another rig to practice with and create our first character animation. It was a Luxo lamp with a little less detail but rigged enough to animate in a similar fashion as the original video, which I am going to put below since I did use it a lot as a reference.

 

 

Once I had the model open in Maya, I immediately noticed some similarities to the helicopter rig. Like it, the main/base controller was at the bottom, which allows you to move the entire rig and is what we use when moving the model around during animation. However, unlike the helicopter, it is also used to animate movement, not just the secondary one. We didn’t attach the lamp to a motion path since that wasn’t necessary nor was it the type of movement we were looking for. We used the main controller to animate the lamp’s basic movement from point A to B and the second one was for more control and dynamism.

 

Main Controller

 

Secondary Controller

 

Moving upwards, the top controller of the lamp which is around the ‘neck’ is also incredibly important since it is what gives the lamp personality. It allows you to squish the entire model which creates the familiar pose for which Luxo is so iconic. Only a simple movement was required for the entire lamp to bend down in this specific way, moving the controller down, which shows that the rig is fit for purpose, no matter how simple. The animation was considered when the rigging artist built it because they need to make the animator’s job as straightforward as possible and adding in these key movements automatically saves a lot of time and effort, therefore money.

 

Neck/Squash Controller

 

Finally, we have the ‘smaller’ controllers. I say ‘smaller’ because they were responsible for smaller aspects of motion, at least in my head. I see the main and most important parts of the animation as the movement of the entire lamp and the way that its ‘body’ squishes down when it jumps about. Things like the top and back are like the extra elements and smaller details that bring more personality to these core movements. The top controller is for the head which can not be rotated but can be twisted to the left, right, up or down with the move function. You could tell if a particular controller wasn’t built to do something because the arrows would be greyed out. At the very back, the last controller gave you the ability to move the poles of the body as if the lamp is wagging its ‘tail’. Yet again, this shows consideration for how the character will be animated to move.

 

Head Controller

 

Tail Controller

 

Once I had a good grasp of each of these and how the rig worked overall, I felt that I was ready to start animating. We were advised to think about the process through the pose-to-pose animation technique, which involves blocking out the key movements and poses first and then going in between those keyframes to add detail. I also like to think of it as an onion – the more frames you add and tweak, the deeper you go, almost as if working through layers to add life to the character. First, you would just make them move, then you would give them a particular walk, skip or jump and then you would work on their arms, shoulders, facial expressions and even hair, fur, clothes and other extras eventually (in Luxo’s case, things like cables).

 

 

To start with, I created a simple animation by clicking ‘S’, moving the lamp from its starting point to where I wanted it to go and then clicking ‘s’ again. As usual, Maya adds easy ease since that is most realistic and objects usually move like that. However, I didn’t want that so I opened up the graph editor and made the curve linear, which by now, is second nature. The task was to make Luxo look curious about the cube, so my plan was to make him jump past it, stop in his tracks and go back out of surprise and intrigue about the object. With the basic movement down, I then used the secondary controller to add jumps every couple of seconds. This was the hard part since I had to guesstimate when exactly to lift the stand in order for the lamp to have enough time to go back down and then up again between each jump. Another thing I really struggled with is the backwards jump. The animation changes a lot since I realise later on that the jumps are far too small but the one part that I couldn’t get right all the way through to the end was the backwards jump.

 

 

In the same way that I moved upwards with my exploration and explanation of the lamp’s controllers, I moved upwards, and further into the ‘onion’ of detail layers when animating the controllers. Next was the head/neck joint and I used this to squash the lamp down before every jump, extend it mid-jump and then squash again upon landing. This was where the animation started to come together since I had to alter the distance that the stand moved upwards and make the jumps bigger and I was applying two of the principles, squash and stretch and anticipation. The lamp bending down is what gives it enough momentum to jump upwards, hence making it far more realistic already, even without any extra details.

 

 

I went back to the video to see what else I could add before moving onto the smaller motions such as the head. I had to set it at 0.5x speed in order to be able to pause at specific frames and also watch movements more carefully overall and I noticed that every time Luxo Jr. jumps, there is a slight tilt forwards. I decided to apply this to my animation since it was a small change but would add to the realism. Here, you can see my using the rotate function on the main controller so that I could make the entire lamp lean forward when in the air.

 

 

Here is where I began to add animation to the head and tail (except I didn’t have enough time to get to the tail). I made Luxo turn his head slightly when jumping past the cube as if to take notice of it but not fully comprehend what he is seeing. At one point, however, I really wanted to move one of the jumps further back so that it lined up better with the position of the cube, the head turn and also the very first, basic movement keyframes I set. I realised that this would mean I would have to move every single controller’s set of keyframes for the exact time period to the exact frames of a different couple of seconds. It seemed like an awful amount of work and hassle! I had to abandon this idea but I couldn’t help but think about this inconvenience in the animation system. Whilst it is great that when you select a particular controller, its keyframes pop up on the timeline and disappear if you click off because it keeps the timeline decluttered and everything separate and neat, you also can’t see the keyframes in correlation to each other like in After Effects for example.

 

 

I tried animating the head to turn a particular way, not just from left to right but in a sort of twisted pose, as if the lamp was cranning its neck to examine the cube from a different angle. However, when I tried to use the neck controller for this, I broke the rig! The model became disjointed and the connection was severed, which really confused me since it was reiterated to not move something that shouldn’t be moved and I was careful to use all of the controllers correctly. I don’t have a screenshot of this since I had to render and I also ran out of time to animate the tail. I think that my animation could have had more character but I am quite proud of some of the jumps.

 

 

 

One thing I definitely would like to improve is the landing of each jump. I can see that I didn’t show enough impact and this is in part because of the pose to pose technique. As I said before, to move even one keyframe from an earlier stage in the animation would mean having to find all of the relevant keyframes of all of the other controllers and move them exactly in the same way too. This is why I couldn’t change the position of any of the original ‘jump’ keyframes even though more time was needed in between so that I could add emphasis on when the stand touches the ground by making it stay longer there. Luxo would then have some more time to squish down more and it would feel more natural. For my first time animating a character such as this one though, it doesn’t look entirely crazy or unbelievable so I’m quite happy with my attempt.

 

Blendshapes

 

I really enjoyed the following lesson because I found out about an entirely new animation technique that seems very handy and I am surprised that I wasn’t aware of. It is, in fact, possible to deform an object based on a series of shapes. That object is called the base/master object and the deformers are called blendshape deformers, each with their own set of target shapes that can be applied to the master object. This can be quite useful for animating facial expressions since you can have one deformer for the mouth, one for the eyes etc. in order to keep the shape animation calculations separate for different parts of the face. You can also create a group of objects to be deformed and apply a blend shape deformer to that group, which can be beneficial for more complex shape deformations. The main reason that it is best to create separate targets for each expressive area of the face is that it enables you to mix areas of expression during animation. E.g. Instead of making an angry face target, and a happy face target, you make an angry eyes target, angry mouth target, happy eyes target, and happy mouth target.

 

 

We were shown how to do this first with some simple objects as examples. In Maya, we created a sphere and duplicated it a couple of times. Then, in side or front mode, we selected the top third of the last sphere’s vertices and scaled in. With the sphere next to that one, we scaled in the middle and finally with the one next to the original, we scaled in the bottom. I found myself staring at a rather strange collection of objects but could guess where the demo was going.

 

 

This next step was crucial, and if not done right, would mess up the whole point of the process. We had to first select the three malformed spheres and only then, shift select the original as well. What this does is tell the program which of the shapes is the master one, a.k.a which one would be transformed. Obviously, we wanted the original to be changed so that was selected last. Afterwards, we went to ‘deform’, ‘blendshapes’. I was happy to find out that these were the only steps that needed to be taken since, after that, all that was left to do was go to ‘blendshapes1’ in the attribute editor and locate the sliders. One by one, or even all at once, you can move the sliders and watch the changes be applied to the master shape according to the three frames. I suppose that’s where the name comes from because it really is like you are seamlessly blending the different properties onto the base.

 

 

At this point, you would usually animate but since it was just an example, we deleted our spheres and imported a male head instead to really practice and see blendshapes in action. I duplicated it like before and, obviously, since it was a move complex mesh, we wouldn’t be working just in vertex mode again. It wouldn’t be the best thing to do since moving solely the verts creates very minimal, jagged and unnatural looking shifts on the fact. Instead, you turn soft select on and adjust the radius so that you can move different areas of the face to different extents.

 

Moving just the verts

 

Moving the verts with soft select on

 

Once each of the faces was manipulated in different ways, I repeated the same steps as before and selected the three blend shapes first before also grouping in the original and then going to ‘blendshapes’ in the deform section.

 

 

A good tip, once this step was complete, was to hide all of the blendshapes and move the original front and centre. Not only does this keep the focus on the master shape, which is the one that is going to actually move and change, but it also allows you to get rid of the highlighted mesh when it is selected. By clicking one of the hidden faces in the outliner, you can see the head much more clearly and animate it without any of the topology distracting you. I found this insanely useful and I wish we would do it more in other instances as well. To actually animate the sliders, you right-click them in the attribute editor and choose the ‘set key’ option. The value box turns red to show that this has worked but you couldn’t see any keyframes on the timeline. This wasn’t too much of a bother at first, but I had to find out how to fix this later on.

 

 

Here is the animation for the first male head. I put the first slider to max, then back down, and repeated this for each one until the end, where I blended them together.

 

 

The final task of the day was to download a free-to-use model and apply the blendshapes technique to it, for experimentation and just to make something that looks cool. I took this opportunity to use a professional model and I chose one that looks excellent. It has a lot of detail and apart from the closed eyes, it would be perfectly ready to be animated as a character so I am quite surprised it was free. I may have made it hard for myself, however, since once I went into vertex mode to start making the blendshapes, I realised just how dense the topology was precisely due to all of the detail.

 

 

It was quite miraculous and funny to me. I had never worked on something with so many verts before, nor could I understand how animators did it. I wasn’t about to give up yet and figured that if I could roughly see the facial features, it was good enough. And with soft-select, yes, it was manageable, although still very hard to see and annoyingly slow. Maya took its sweet time trying to comprehend what I was asking it to do and I’m surprised that I actually managed to complete all three blendshapes in time despite the lagging.

 

 

Look at this detail!! 🤩

 

Once I had an animation for each slider, and I took my time with this one since I really wanted you to see each expression clearly on this amazing model, I realised that I had made two keyframes a little too close to each other. I couldn’t actually see them, but I could tell that there was too small a gap between a particular expression change. I had no way of rectifying this however since I couldn’t actually see the frames on the timeline. To Google, I went! It turns out that the node has to be selected in order for the blendshape keyframes to appear. After some hunting, I found the right button in the bottom right of the attribute editor, where it says ‘select’ under the ‘nodes – blendshape1’ section.

 

 

Once I liked that they popped up like magic and I could space them apart as desired and even delete any that I didn’t like. Thanks to this and the fact that I went ahead with the model even though it was rather complex, this is how my animation turned out:

 

 

I’m quite pleased with the results from these sessions and I am really happy I went for four different faces for my final blendshapes animation since it looks cool in my opinion. I can see exactly why they are such a popular animation technique since they really do save a lot of time and I could see them being used for character poses too or other repetitive changes that occur within an animation. Blendshapes allow for more versatility and faster character animation overall. They also ensure consistency, since the animator isn’t having to redo one specific expression, again and again, each time it’s needed.

Leave a Reply