The Flying Lesson.avi 3.21 MB (requires DivX 5)
The flamingos began life as a polygonal cube. I built up a low-poly model from this by hand. This initial model was only the right hand side of the flamingo, so I duplicated it and mirrored it to make the left hand side. I then welded the two halves together, and smoothed the mesh. The baby flamingo uses the same model as the adult flamingo, just with some non-uniform scaling applied to it.
Most of the detail in the final animation comes from the flamingos' texture. Starting from an initial planar UV projection of the low-poly half-model, I manually unwrapped the UV coords in the UV editor. This process took a while, but I was able to get pretty non-distorted UV mapping out of it.
I found a photograph of a flamingo on the internet, and using Photoshop I took parts of it and distorted it to fit onto the UV map image that I produced in maya. Most of this work was done using the transform command and the clone brush. I had to be extra careful near seams, such as where the neck joins the body. These regions are not contiguous in the UV image, but they are in the texture, so I had to do some careful blending in order to prevent the seams from showing in the textured model.
I made a skeleton, and smooth-bound it to the finished model. The feet and neck are controlled with IK handles. The knees have pole constraints which help me to tweak the IK solutions. The orientation of the top joint in the neck is controlled via an aim constraint and a locater, which lets me move the flamingos' gaze around. I added custom channels to control flapping, blinking, the shape of the feet, and breathing. I had originally set joint limits on the IK chains, but they got in the way when I was keyframing , so I eventually turned them off.
There a couple of expressions driving the animation. The most prominent is one that controls the adult flamingo's breathing rate. I had played around with trying to do the waves and splashes with scripts, but it turned out easier just to keyframe them.
I rendered all 580 frames using the Maya software renderer, with raytracing turned on. While raytracing gave me nice reflections in the water beneath the flamingos, it was very slow. By tweaking the raytracing parameters, however, I was able to get the rendering time (for 640x480 images) down to a couple of hours. I rendered to a sequence of tga files, so that I could preserve the alpha channel for post production.
I did the post-production in premiere. The renderings from maya have no background, so I found a photograph of a lagoon on the internet, and put it in the background. I added some steel drum music for a sound track (I'm not sure who actually made the music. . .I found it as "Tropical Bird (Steel Drum - Trinidad).mp3" in my fiancee's uncategorized mp3 collection). I found the splash sound on the internet, and recorded my own flapping sounds by shaking a pile of newspapers in front of a microphone. Gaffing is fun!
The intro / outro titles were made in Photoshop, and imported as stills.
I'm pretty pleased with the results. There are a couple of small glitches in the animation - when the baby bird looks left, his left eye is briefly not visible, and I wasn't able to get the skin weights around the base of the flamingos' heads quite right - but I like the overall effect. Keyframing took a very long time, but I think that it would have taken me longer to come up with a Vicon motion capture skeleton that I could use with my characters. The flying sequences would also have been quite difficult to mo-cap. I think that part of my animation that paid off the most, in terms of artistic effect vs time spent, was the texturing.
The "other" animation:
Originally, I was going to do my animation using a NURBS model of an alien. I spent about a week making the model, but once I got all of the pieces done, I was at a loss for how to connect them all together in a topologically sane way. It was about then that I swore off NURBS forever, and started work on my polygonal birds. At any rate, here are the reference drawings and the model from my earlier attempt:
<== BACK to home page