Tag Archives: elephant

June 2, 2013

So, Final Major Project is over and handed in, which means my degree is also finished. There have been odds and ends requested from tutors and its left me feeling like I’m in some sort of strange limbo. The degree is finished, but with all these extra hand ins (that dont even affect my marks) its hard to move onto the stage of tidying up my CV ready to apply for jobs.

Anyway, here is my final showreel, which has a variety of my best work from 2nd and 3rd year.
YouTube Preview Image

This is the deformations and rig demo for the elephant rig.
YouTube Preview Image

This is the deformations and rig demo for the toony monkey rig.
YouTube Preview Image

This is the unfinished version of my elephant advert. As I have mentioned previously, this project had a bumpy journey to get to hand in and sadly it never quite made it to completion. However, I thought I would upload it anyway for those curious about the project.
YouTube Preview Image

There is no doubt in my mind that what I have learnt, more than anything else, during this project, is be confident about who you choose to work with. Any concerns or worries you may have about an individual’s ability, enthusiasm or productivity probably exist for a reason. If you choose to work with them, make sure you have a contingency plan in case things fall through. A project is only as good as the sum of its parts. If one, or more, of the collaborators is unreliable then the parts they are creating could well be unreliable too.

Working in a student environment differs from the workplace in one major respect, and that is your ability to replace team members. In the workplace, if an employee is not hitting their deadlines, or reaching their targets, the employer has several options. The employee must be warned and spoken to about the problem, but if their work does not improve, the employer can take action. They can shift the individual onto other, less important, projects and, where necessary, make more meaningful threats. At university, there is a limited pool of “employees” most of whom are already “employed” by someone else. You cannot remove someone from your project if things go wrong, all you can do is look for someone else to also do the work, and use the most successful version. If every other student is already working on other projects, then there is little you can do but try to encourage those you are working with to work harder and produce something better.

In the workplace, it is also very clear what level of authority an individual has. You know who your managers are, who you need to listen to and who you should respect. As a student director, you may be in charge of the project, but you have no more real authority than any of the students working with you. This makes it much harder to put any impact or strength behind the words of a verbal warning. There is very little that you can back it up with.

These lessons were, unfortunately, learnt through the unreliability of those I worked with this year. Trying to pull everything together has been extremely stressful. Last year I promised myself I would leave at least one project that wasn’t a collaborative effort, so that if anything went wrong I had a project I could drop in an emergency so that I could devote the time to whatever needed it the most. For some reason, I forgot that promise and once again, all four of my projects were collaborative. This meant that not only were other people relying on things from me before they could start working, but I was often waiting for work from them. When there is a personal project to work on, this eases the tension of waiting for work, because you still have something to devote your time to.

Some essential time was wasted on this project due to having to find new collaborators at such a late stage and I wasnt able to start rendering until May. This meant that many of my planned scenes had to be dropped and I cut down the advert to a more manageable format. Unfortunately, in the end, so much time was lost that even this shortened version was not achieved. All three shots were rendered and passed on to the compositor, but with only a week to try and complete everything, she didn’t stand a chance. This was made harder as the animation for the final shot did not match up with the movement of the bear. The new animator had been unable to get things any cleaner in the short amount of time I gave her and my compositor was unable to match move the bear without a lot more time, which we didn’t have.

I am disappointed that I was unable to pull the elephant project through to completion, but I believe that I did everything I could to get it as far as possible. If I were to do the project again, I would pick the team I worked with more carefully. I would respond more quickly to late work and give verbal warnings sooner. I would also be faster to look for alternative collaborators if my team ignored deadlines and feedback. However, this final option would be very dependant on other students having projects they could change/drop.

So, my artist promised me the high poly elephant would be with me on Sunday. Its the middle of the week now and I’ve heard nothing from him and not seen him in university. I was pretty frustrated to discover that hes actually gone to FMX and hes not even in the country. I dont have a problem with people going to such a major event in the animation world. I would love to have gone myself! What I do have a problem with is an individual knowing they have work to give to others and disappearing with no word on where they are or why the work has not been finished.

I am seriously unimpressed. Its looking very unlikely now that I stand any chance of getting every scene in my original edit finished. Im going to have to just pick the most important scenes, the ones that still tell the story and prioritise them and see how much I can get rendered and composited for hand in.

April 25, 2013

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.

YouTube Preview Image YouTube Preview Image YouTube Preview Image
March 14, 2013

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.

IKspine03a

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.

MissingMesha

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.

 Tail01a

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.

Tail02a

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.

March 12, 2013

The elephant’s trunk was one of the most challenging parts of the rigging. I knew I wanted a simple FK trunk, and I knew I wanted a trunk with dynamics. However one of my animators had also informed me they wanted an IK spline trunk to animate with as well. As such, I needed a trunk that could switch between any of these, and more importantly, blend between any of them to any of the others. My desire to allow the trunks to blend meant I couldn’t simply use an “enum” attribute to change the parent constraints as this is an “all or nothing” attribute. Theres no way to have half of one and half of another. I also decided I couldn’t use a single “float” attribute with one of each of the control types at -1, 0 and 1. There would be no way for me to blend between the two trunk control types at either end (-1 and 1). They would only be able to each blend with the control type that was at 0.

Eventually I decided to use two different sliders, one that would blend between FK and “other” and a second that would blend between IK and Dynamic. This second slider controlled what the “other” was. In order to do this I had to create four duplicates of the trunk bone set up. I had an FK duplicate, an IK duplicate, a Dynamic duplicate and the “other” duplicate. The deform trunk was parent constrained to both the FK and the “other”. I then wired up the FK/other attribute to control which parent constraint was in use. The “other” trunk was then parent constrained to both the IK and the Dynamic and these parent constrains were wired to the second IK/Dynamic attribute.

It meant spending a huge amount of time in the Hypershade, wiring up various items. It was extremely time consuming as I had to organise items in the hypershade so I could see what was parented to what and where the wires actually needed to go. Its definitely the largest wiring system I’ve created when rigging so far.

Trunk01a

Trunk02a

Trunk03a

Having achieved the ability to blend between any of the different control systems, I needed to actually work out how to create a dynamic trunk. I watched a variety of tutorials and read a load of sites before deciding what I felt would be the cleanest, and simplest, way of rigging it. I applied another IK spline to the trunk and then duplicated the spline curve. This duplicate would be the input for my dynamics. So this was the curve that I had to create controls for. I made them in the same way as I did for the trunk, by creating clusters for the various points along the curve and parent constraining the clusters to controllers. I then applied dynamics to this duplicate curve which created another two curves in the process. One was the dynamic curve, and one was the output of the dynamics. The final step was to make this output curve control the original IK spline. I simply applied a blendshape to the spline, turned it up to 1 and locked the attribute so it couldn’t be changed or broken.

Working with dynamics is slightly strange though, as the dynamics only update when Maya plays the animation. This means you can tweak the starting position of the trunk, but it doesnt actually move the mesh (or the bones) until you press play. I think it unlikely the animators will want to ever just have a dynamic trunk, but I feel it may be nice to blend with some FK animation to add some extra secondary motion to the trunk.

Finally, I created some extra attributes so that the animators can edit the flexibility and stiffness of the dynamics and so affect the way Maya calculates the shape of the output curve.

February 19, 2013
Posted in: Glamorgan

The basic rig is now complete, which means I can now create the deform test and actually skin the low poly mesh to check how everything deforms.

Deform Skeleton

It was such a relief to finally be doing something that felt constructive. My first step was to build the deform skeleton. This is the set of bones that the mesh will be skinned to. It is important to get the bones placed correctly so that joints bend in the right place and the deformations of the mesh are as natural as possible. With the skeleton built, I used comet tools to help get all the bones aligned correctly. This ensures that the axes of rotation are where I want them to be, and therefore the rig will be easier/neater to use.

At this point I also made sure all my bones were named correctly. Every joint name starts with either C_, L_ or R_. This denotes whether the bone is down the centre of the body (C_), on the left hand side (L_) or on the right hand side (R_). This is then followed by the name of the bone, and possibly a number (ie spine01 or trunk03). Finally, every joint ends with _jnt. A good naming convention is essential when rigging as it makes things much easier to find with a search tool etc.

IK Spline Spine

Once everything was named correctly I set to work creating a control system for the spine. I used an IK spline set up. To avoid causing problems and having to rebuild the deform skeleton, I duplicated the spine and placed the IK on the duplicate. I could then parent constrain each individual IK bone to its equivalent on the deform skeleton. This causes the deform skeleton spine to do whatever my IK spine does. I chose to create an IK spline with just two spans. This means the spline has three control points: one at either end and one in the centre. I turned these into three clusters which I could then parent to various controls.

IKspine01a

I created a simple cube control for the hips and shoulders of the elephant which I deformed slightly so that they fit the contours of the elephant slightly better. I then parent constrained the corresponding clusters to these controls. I used a simple circle for the middle of the spine and again parent constrained the centre cluster to this control. This provided a way to control the spline curve and so control the bones. However, if a control was moved too far away and the spline curve became too long, the bones did not stretch and so only covered part of the curve.

This was an undesirable result, so I set up a fairly simple wiring system in the hypershade. I created a node for the spline curve with a single attribute: the arclength of the curve. This value changed whenever the curve changed, meaning I could always know how long the curve was. Using this changing value, and the curve’s original length, I set up a divide node that would calculate the current length divided by the original length. Then I used a condition node that was connected to the x-scale (length) of all the bones in the spine. If the curve was the same length or shorter then the scale of the bones remained at 1. However if the length of the curve was ever longer than its original length, the scale (length) of the bones was changed from 1 to whatever the divide node calculated. This meant if the controls were ever moved too far apart, the bones would scale and still fill the entire curve.

IKspine02a

However, I discovered that while this worked really well when the curve was long, it didn’t work very well if the curve got too short. Some of the bones started flipping to try and remain within the length of the curve. As such I decided to completely remove the condition node and simply wired the divide node straight into the x-scale of the bones. The spine now stretches and contracts brilliantly.

IK leg

The next step was to create an IK leg set up so that the legs could be easily animated. I debated for a while which two bones to put the IK on before deciding it definitely needed to be shoulder->wrist/hip->ankle. Like the spine, I duplicated the deform bones and applied the IK to the duplicates. I created a foot controller which was, again, a slightly deformed cube. I parented the IK target to this controller and orient constrained the ankle joint. This meant that I could move the controller and the leg would bend, but the foot would remain in whatever orientation the controller was in. Finally I added a controller to move the top of the leg around. I then repeated this for all four legs.

BacklegIK01a

The rest of the body I decided to keep simple for this basic rig and I used simple FK set ups in the neck, head, trunk, ears and tail. With all the controls complete I decided to try and make the rig clearer to use. I started colour coding my controls; green for left, red for right, cyan for anything down the centre. I also made a centre of gravity controller which could move both the hips and shoulders at the same time, in case the animators wanted some FK control from the hips. This I coloured yellow to make it stand out.

BasicRiga

However I decided that the cyan was too close in colour to the “selected” colouring that Maya uses. As such I changed things again:

BasicRig02a

February 17, 2013

I finally received a low poly model from Paul that I could start rigging. At this point, what I really want to check is how the mesh deforms, especially around the legs. As such I plan to build a deform skeleton with some simple controls that will allow me to create a quick deform test so that I can skin the mesh.

The low poly model is looking pretty good, and its definitely nearly complete.

06  07

I have however warned him that we will likely need to change where the mouth meets the head, as currently it is quite square. Left like this, the corners of the mouth won’t close properly. As such, I’ve asked that he try to turn that square flat edge into a sharper corner.

My artist has been creating a low poly version of the elephant for me. I am trying to see the model as often as possible so that any mistakes or problems can be caught early and therefore minimising any time wasted. This method of checking in regularly has been great and has already caught several issues that have been rectified as soon as we found them.

The very first model had some fairly major flaws, and in the end we decided it would be best to scrap it and start again.

01  03  02

The model was out of proportion, with legs that were too long. The front leg was also too far back, causing the head to seem stretched or out of position. The long legs also made the body seem too thin. The legs did not go far enough underneath the body, leaving the impression that they were thin sticks coming out the side of the elephant, rather than the strong sturdy supports they really are. I also advised my artist that the mouth would need to be more complex than just some extruded polygons.

He provided me with the new version the next day and despite it being lower poly, it already looked stronger. The proportions are far more accurate. I did however advise him to keep the trunk as straight as possible so that it will deform in every direction as well as possible.

04

The following day he had continued working with the elephant, defining the legs and body more. Its now beginning to really take shape and I can begin to picture what it might look like finished.

05

I have advised him to keep an eye on where and how the joints in the legs bend, as well as ensuring there are enough edge loops where the legs meet the body.

December 2, 2011

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!