Sunday, 21 August 2011

Animation Storyboard












Animation Project

Robot Background & Setting

My robot name is Toby, Toby is initially doing his assigned work, he is doing it in a very systematical and consistent way, he imagines it was to be another ordinary day at work and hence was in a very monotonous mood.
The scenario in which Toby would be is scenario 3 where there are boxes that are moving slowly at first but then gradually accelerates.

Self Critique
Overall I felt that I did my animation to the best of my ability, even if I did not use that many principle of animation in my work, I felt that my animation was still generally well done enough to portray the emotions and reaction of my robot clearly enough to the audience watching my animation. Another area that I felt that I have done well in general is the application of timing in my animation. However I am not pleased with myself for not being able to use the graph editor in my animation as I regrettably was not well-versed enough about the graph editor to use it to better my animation.

Animating of the robot arm to carry the boxes
Initially I was discussing with my tutor on how we can make the boxes come in for the robot arm to carry it, he suggested using a camera that shows only certain area of the scene so that we can make it seem as though the boxes are moving in via a conveyor belt.. He suggested that the camera could be positioned at such an angle that it showed the robot arm picking the boxes up but also in such a way that when the conveyor belt moves quickly the boxes that the robot arm failed to picked up would drop downwards and out of the camera view.
Hence taking his advice I tried to plan my animation to do so in such a way, making some modification of my own such as adding another platform where the robot arm would place all the boxes it had collected so far, that platform would move out of the camera view each time a box is placed on it to give the illusion that it was transporting the box it had to someplace else.
As for the animation of the robot arm carrying the box, I simply did it using the same method which the online Maya tutorial demonstrated, which was setting the constraints of the boxes by key framing them at the appropriate time. I initially made an error of not key framing the parent constraints selectively and as a result it screwed up my animation however I rectified that mistake and everything worked perfectly as I had planned so far.
Below shows the animation that I had hoped to achieve at that instance, it was generally easily done and it only took me a day though looking back I should have finished this much sooner, unfortunately I did not paid as much attention to the “selective” key framing of the box and therefore wasted time here.



Parent Constraint (Oh God…)

This was by far the worst time eater I had doing this Animation project, initially I assumed duplicating the boxes and merely setting new key frames for them zooming down the platform/conveyor belt would work unfortunately it didn’t and hence started a series of test and methods to get the parents constraint of boxes to work accordance with the “moving platform” and the robot arm to work.
The next method I tried was doing a special duplicate/ other forms of duplicating it, admittedly I didn’t really understand the special duplicating functions hence I didn’t really expect this method to work, however it did work out in a way, unfortunately it wouldn’t allow me to move the boxes into position before the arm control constraint started working which means that once the first box was being constraint by the arm control, all the other duplicates started following the translation values of the first box. (So that didn’t work out too well)
Next I tried duplicating the box but deleting the parent constraints and re-doing it all over again, initially I simply did it the way the Maya online tutorial did it, unfortunately it was here that I found the root of the problem, for parent constraint to work, it needed a rest position, however that also means that object has to remain there and couldn’t be moved from that position unless a constraint was acting on it, in which case for my animation that would means either the moving platform or the arm control to start acting upon it.
Hence I tried looking online for help however I did not find information that would help my predicament, thus initially I was ready to set small objects on the conveyor belt that the audience wouldn’t see during the animation but they would act as constraints moving the box from one position to another however that means it would also result in many key frame being keyed throughout the animation, just I was just ready to disembark on this painful venture, my fellow animator came to suggest an idea to me that would solve my problem.
He suggested using the same box for the animation since the robot arm could only carry one box at a time, it also means I could use re-use that box but it simply required me to re-position the box outside the camera view, hence from there it was just a matter of optical illusion, by making the box that moved on the conveyor belt disappear just as the box that had the constraint appear so that the animation would seem smooth.
It was a genius idea! Not only did that make it easier for me as the animator, it also made sense that this should have been the better approach given that it meant less computing cycle was to be consumed for the animation as well.


Robot Emotions
After solving the problem of the parent constraints I now had to do the robot animation, for this I relied heavily on the example used by Pixar animation of Luxor Junior. I studied their animation of the lamp being surprised noticing their application of the principle anticipation where the big lamp bend over before making a sudden upward jerking to signify a surprised or shocked impression. Adapting that idea into my animation I tried to incorporate that idea into my animation as the boxes started flooding in, however due to my lack of expertise using the graph editor as mentioned above, I faked all of those expression making good use of timing.
After that I asked myself how would I react if I saw something that greatly surprised me, I would examine it closer was the first thing that I could think of, hence I incorporated that idea as well into my animation where the arm rotated left and right to get a closer look of the row of boxes. Once again I made use of timing to convey that idea in my animation, also I used easing in and easing out to make the animation more believable, at the same time maintain motion that was faster than normal to show that it was still in the state of surprise.
Lastly, I wanted to show Toby getting a major shock when it realizes that the length of the boxes coming in stretches for miles before making him place the box at a much faster speed, for that once again I look for reference in the Luxor Junior animation and realized how the big lamp gave a very exaggerated movement of shock when the big ball came, hence using that idea I incorporated that into my animation as well before making Toby move the box at a much faster pace.
Now after putting 2 boxes and looking to see if there was still an endless stream of boxes, I wanted to show Toby being in a state of frustration, for that I consulted my tutor again, and he and I discussed the idea of it being frustrated and then finishing the animation of by whacking one of the boxes of the conveyor belt/platform. I decided that I would make the robot do what I always do when I’m frustrated (besides swearing :P), I would always smack my palm to my forehead and shake my head, since the robot has no hands to smack, I settled for making it shake its head furiously before smacking one of the boxes towards the camera, after playing with the timing involved for the animation as wells as applying the ease in and ease out motion for the robot arm, I succeeded in making a satisfactory animation :D

PS: Unfortunately only the first animation could be showed, I don't know why blogger is not letting me upload the rest of the animation I chose.

Animating Robot Arm


Animating Robot Arm
This exercise was my first ever animation I’ve done in Maya, previously we used the pencil software to learn about key framing and timing of animation, hence this time in Maya I’ve learn to handle an IK system as well as understand the basis of how animation was to be done in Maya. In this post I would not state so much about my process as I find that redundant given how I followed the Maya online tutorial to do my robot arm, I would rather discuss my reflections and thoughts about any point that I had problem understanding or found immensely useful or important.
 Kinematics Systems


I’ve learn via this exercise that there are two kind of system one can use in Maya to animate our models, these are known as Inverse Kinematics and Forward Kinematics.
Inverse Kinematics (IK) handlers are points where animators control to handle the model they are animating, movement of joints are calculated by something known as the IK solver.
Due to this fact, IK handlers are normally used to pose characters that have skeletons, that is to say models that have joints such as a arm or a leg. To do this, we place the IK handlers at position of the joints, that is to say the places where the model’s skeleton will rotate when we animate them. (Example: Placing an IK handler at the shoulder of an arm)
Compared to Forward Kinematics (FK) which requires you to manually manipulate each joint of the model’s skeleton as well as manually control its movement until you have reached the desired pose for a key frame. This can be a tedious process especially when working with a complex skeleton.

IK Handler in Robot Arm

Picture showing only the IK handler
Orange color represents the robot arm skeleton

Skeletons & Hierarchy

Hierarchy also plays an important role in animation, based on how the joints are connected in the hierarchy table, hierarchy not only helps to make a more realistic animation but it also saves a lot of work for animators when working with a skeleton-like structure.
Hence skeletons are basically a system that connects the various joints of a model and arranges them into based on hierarchy.

Example:
When working with an arm, the hierarchy for its joints are arranged in the below order.
This means that when we animate the shoulder, the elbow and the wrist moves along, and if we animate the elbow only the wrist follows, and lastly the wrist movement doesn’t affect the elbow and the shoulder.
Since I’m a coder, I understand hierarchy aspect much better than most of the other aspects of animation, and thus I am able link the hierarchy to a programming stand point of view. In game programming, it is essential that we have code in a fashion known as object-oriented programming (OOP). This is to say that behaviours often exhibited by one of the game objects in our game are linked to a class where specific codes tells it how to behave, however to ensure that we do not repeat any codes (Imagine a shooter game where player is firing of a machine gun, it would make a lot more sense to write a class or function where all bullets has rather than creating a new function or class for each bullet fired).
With that said objects in programming can inherit one another as well so as to save even more time and processing power. Example of inheritance in OOP, an animal has a name and an attribute that states what type of animal it is (reptile/mammal/bird/etc). Hence I could make a lion class, now lion class inherits animal class, hence it has to have a name as well as the type. So when we want to check if the lion is a mammal, we have to manipulate the code such that it links back to the animal class to get the information that the lion is a mammal type class. Similar to Maya animation ideology of inheritance, if the parent which in the code case is the animal class and the Maya case which is the shoulder joint, manipulating the parent means that the any of its child classes/joints would be affected.

Hypergraph
I love this tool if only we could incorporate something like this into my programming software! Basically I understand that the hypergraph is meant to be used as a tool that shows the overview of every object in the scene and their relationship to one another. This way not only can we understand what to manipulate should we want a certain result but we can also easily select them from the hypergraph, example of a case where using the hypergraph would be useful is say when we are animating a tail of a dragon where there are many scales and bone involved, hence instead of doing trial and error to see which bone segment controls which segment of scales we could simply go straight to the hypergraph and see for ourselves, not only that we can select the segments we want to manipulate directly without having to pan and try to select it from perspective view or other views.


Hypergraph showing objects
Selected Swivelbase (yellow) indicates more object parented under it

List of objects parented under swivelbase / base of robot arm

 Create Skeleton Tool
The create skeleton tool is the basic tool for creating a skeleton to rig in Maya. The first click would be the parent joint which is to say that joint would control the subsequent joint clicked. Hence due to the functionality of this skeletons it is important that we as animators think about the structure of the model we are going to animate and how it would move and behave, and then plan out a skeleton system that would suffice the work we would do before rigging the model.

Parenting the skeleton hierarchy
This basically means we parent the model to its skeleton, since it makes sense that we do it this way instead of the other way round as even in real life the skeleton is being wrapped by the muscles and body structure and movement limits are determined by the skeletal structure. To parent the model to the skeleton it is important that the order of the selection is correct, we first select the model node and then shift select the joint / skeleton node we wish to parent it to.

Applying an IK System to the Skeleton Hierachy
We apply an IK system to our skeleton by using a tool known as the IK handle tool, this serves as a mean of letting us control the movement of our model based on it skeletal structure. To do so we click on the parent of the skeleton system (first skeleton node / the first click when we created the skeleton system), and the second click is on the last joint of the skeletal system (last skeleton node / the last click when we created the skeleton system). To test if the IK has been applied correctly we can click on it and test the movement to check if it is in accordance of what we were expecting when we planned the skeletal system and movement that it must perform.

Creating a control object
Basically we utilize a tool known as create locator to create a control object that will be used as a point to control the entire IK handler system as this is much easier than manipulating each joint individually. This is extremely important especially so when working with complex joint and skeletal systems.
Also it is important that we freeze transform for the control object, that way we can ensure that we can reset its position to where we initially place the control object by zeroing all its translation.

Constraining Object in an IK System
From what I understand, it is the modeller/rigging guy job to constrain the axis and position that the object can move before passing it to the animator, this is similar to what we do in game programming where the base code designer designs the function and base code before passing it to the scripter to finish, example base code designer comes up with a function called shoot, scripter then assign the script that has the function shoot to certain guards in the game that has the gun.
To constrain an object movement in Maya, there  are several ways to go about it, there are tools to constraint movement of an object to a certain point or constrain it to have the same movement as another object, for in which in our case, the robot arm is constraint to the control object. Also we can constraint the movement of certain objects in Maya via the attribute editor where we set the min & max value of how much an object can either translate, rotate and scale.

Parent Constrain
From what I understand in the tutorial, a parent constrain applied to an object can have multiple objects influencing it, in this tutorial there are two influence of other object on the cargo box which are firstly the robot arm and secondly the platform.
Parent constraints are used to ensure that one object follow the movement of another object so that when we animate, we need not animate both objects but rather just animate one object and adjust the constraint of the other object that we put the parent constraint on.
Also for parent constraint to work we must set a rest position for the object that we constraint, the rest position indicates where the object lies when it is not influenced by any of the other objects.

Utilizing parent constraints in an animation
Basically the object who has the utilize objects has it constraint value set to 1, so for example the robot arm is now moving the box at frame 10, so at frame 10 when the robot arm just touched the box, we set the arm control value on the box to 1, when it move to the platform at frame 20, we set the arm control value to 0 and the platform value to 1 on the box. When the box is not being moved or repositioned by the arm or platform we set the value both to 0 which is also the box rest position that we set when applying the parent constraint onto it.