"Shall We Dance?"
- A Short Computer Animation -
Sangyoon Lee (sjames @ evl.uic.edu)
Electronic Visualization Laboratory
University of Illinois at Chicago
This project is about making non human character to practice some aspects of computer animation. Given idea is to design main character by following Blender tutorial (Gingerbread modeling & animation) and to develop interesting story of gingerbread man or woman.
"Shall We Dance?" is inspired by Dreamworks Shrek2 movie title especially "Far Far Away Idol" contest footage included in the dvd title as supplemental material. In this reference story, several of non-human character compete to win "Idol". Famous gingerbread character dances with a fairy. My story is ... One gingerbread, like Gingy, mistryously animated by itself and wake up from helpless dish on tea table. And.. Watching the Idol contest and trying to mimic Gingy, "Dancing". Dance with whom? Story goes on...
Whole project is desinged from pencil & paper storyboading and digitized using opensource CG tool, Blender.
This page includes my personal experience of Bledner software to create "Shall We Dance?" project. All comments are not throughly verified. Therefore, there could be much better way or it could be simply "do not know" case.
60 seconds computer generated animation (cover and credit not included in this duration)
Low Resolution(320*240, 8.5MB, Quicktime H.264): ShallWeDance_320.mov
High Resolution(720*480, 24.9MB, Quicktime H.246): ShallWeDnace_720.mov
Whole process of modeling part were done mainly by Blender primitive (cube, sphere, cylinder) and extrude operation with mirror modifier. Many of mesh object also use subsuface modified to reduce the complexity of controlling mesh elements (vertex, face, edge). This is the greatest way of effective modeling. Most modern CG tools support this more or less.
- Character: Gingerbread Man (Modeling & Rigging)
As explained in gingerbread tutorial, it is started with cube object and modified further in detial. One important aspect of character design was to make it anti-symmetric. All part of body changed after mirror operation so that it looks slightly different from left to right. (This may be not too obvious at a glance).
Basic shape of body thickened compared to tutorial model to give more sense of 3D volume. The edge of outline designed not too flat by adding another control vertex to prevent too smooth round shape of subsurface. (below left: body made from tutorial, right two: shape chages)
Then, finished the rest of body part with eyes, eyebrows, lip and waist belt.
Construction of character armature was not easy at the beginning time. The pivot point of armature object is based on the first bone's root. I started with arm bone and this cause the pivot offset and not good to transform whole body especially the case of rotation.
I made dummy empty objec in the center of armature and parent armature to this empty so that I can better control rotation and translation later on. Not sure this is good solution or not.
To get the better animation, more bones added (upperarm, arm, upperleg, leg, neck... see below figure)
- Simple Room Environments
Since I am not making whole complex environments, space is limited to small room with a few of furniture. All of the components made by simple plane with textre on it.
- Furniture (Couch, Tea Table, Lamps...)
I spent some time to make couch but it is not seen often in the final animation. Surface of Couch manually changed not to look like simple box.
Tea table is important object since it is the main stage of "Shall We Dance?" project. Even though it is made of cube, reflection/refraction makes it look good with blending of floor material. Originally desigred to create really glass like shading but it looked too complex with a bunch of reflection. So, refelection effect slightly reduce by setting lower raymirror and higher frensel value in Ray Mirror property.
Light & Material is not easy topic in CG. It needs lots of experiments to find the best parameters to achieve the right color and feeling.
Due to the rendering time in the final stage, only a few lights are added in the scene. One main light, one character spot light, and two lamp for floor light and table one (these are model). Character spot light tracks gingerbread man all the time to brighten its color and generate shadow (soft buffered shadow used). The light inside floor lamp turns out to be not so useful since it does not appear long enough time in the final animation.
Most of object use pretty basic default material with different color and emissive value. Emissive value used to brighten some surfaces instead of using expensive accurate radiosity rendering option. Important material was tabletop reflection/refraction. Blender manual gave good starting point and after several rendering test, final parameters were decided.
Bump/Normal Map... I tried to use bump map for floor material (two pictured carpet) and gingerbread body. Blender manual and tutorial does not give proper result. It jsut adding noise to flat surface. It looks flat, no bump. It will be really nice to have bump on gingerbread man's body.
- Texture (Image and Movie)
Floor carpet and wall has texture applied to them. Floor texture is photo of my rug and a bit touched in photoshop to make better color. One thing useful here... When photo is not aligned nicely (if there is pattern, alignment is improtant), Photoshop has nice toold to shrink/stretch/etc seamlessly. It is Liquify under filter menu. I used it to modify second rug texture. (below left: original photo, right: modified texture. better aligned)
The last texture I used is a video texture. I applied it to TV screen to show video footage into the scene. One flaw of this feature is that there is not way one can control frames of video sequence. Either play once or repeat. Can set offset or segment but cannot control when it should start palyback and stop. Therefore I have to move this TV scene as seperate on so that animation begins from the first frame to end of video playback.
- Character Facial Expression (RVK Relative Vetex Key or Shape Key)
In addition to skeleton animation main character has shape key animation. In this method, mesh replicate multiple set of vertices and interpolate in-between to generate animation. Compared to bone animation, this shape key approach could give smoother and detailed animation. Generally good for facial expression. In my project, gingerbread man character's eye, eyebrow, and lip has shape key. Below images show several set of these key. (reference: blender shpaekey manual, http://wiki.blender.org/index.php/Manual/Shape_Keys)
- Armature Pose Buffer
Copy one pose and paste it onto other frame. This tool was perfect to make cyclic animation like walking.
- Action Editor
Blender Action Editor is designed for NLA (Non-Linear-Animation) similar to layered animation or animation tracks in other package. During "Shall We Dance?" project, I used action editor extensively even though it was not intended to migrate to NLA.
- Rotation of obejct or armature
Without typing numbers on transform window, direct manipulation of rotation was not easy. All transformation based on global coordinate (not 100% sure). In many case, object local coordinate is very useful to animate it.
- Can change key interpolation curve?
Blender seems to use spline or bezier curve to interpolate two key values. Like other common CG tool, I was expectiong the way to chnage its interpolator curve based on designer's decision. Unfortunately could not find how to do this. Blender's IPO curve editor does not provide move key values, cut the connection before and after key value, change curve type to linear/spline/etc. I did not spend much time to figure it out this time, so there may be the way to do this or alternative means.
(Oops!!! My Bad. There is nice manual for this. I jsut missed it. This would give much better control and fine tune of animation. http://wiki.blender.org/index.php/Manual/Ipo_Curves_and_Keyframes)
There were lots of big & small trouble during this project using Blender but rendering is far more critical at the end.
"Shall We Dance" has total 1827 frames (60.9 secs @ 30 fps). Since there is some objects that need inevitable raytracing calculation to generate proper shadow / reflection / refraction, rendering takes tons of time.
Most of frames took about 2 to 4 minutes per frames in 720x480 resolution on decent machine. This sums up total 53 to 100 hours to finish final rendering sequences. This cannot be done on single machine within limited project time.
Rendering frames were distributed to 5 machines. (3 core 2 duo, 1 old xeon, 1 old powerpc) Total estimate of rendering is about 20 hours with all those systems running simultaneously. One difficutlty I had with this distributed rendering was that Blender does not have batch rendering feature. If I need to render not continous frames on one machine, I had to start each job after finishing previous sequece of frames. Anyway to batch this?
Initially I estimated one minutes per frame with various frame test on dedicated system but suddenly the scene require much more time for the final job. I had to reduce some detials of model (number of subdivision on subsurface).
One consideration might be ... to use optimized Blender build. (SSE2, SSE3, and 3DNow! optimized blender. Rendering times are 30% faster. refer to http://wiki.blender.org/index.php/Manual/Rendering and http://www.graphicall.org/builds/index.php)
- Better Estimate of Rendering time
To finish job on time, one must count for final rendering time carefully. Sample rendering from various scene frames helps a lot. If only simple scene is considered to estimate total rendering time, you will run out of schedule. This is really frustrating. "You simply cannot finish it by the due!!!"
- Rough Sketch of Scene composition & animation
After finishing storyboard or whatever idea sketch, it was very useful to make quick draft of motion of all objects in the scene. This gives opportunity of adjusting camera walk, speed of motion, timings and etc. Once start with real model and animation, it is relatively more difficult to chage these things afterwards. Common concept of LOD can be applied here in the same way and "Divide and Conquer".
- More realistic motion (animation)
This is most important part of the job. In addition to realism of visual quality, the realism of movement can increase the overall quality of animation enormously. In this work, several issues still remains. Realistic walking, dancing, the motion of rigid body object (dancing partner, "fork")
Rhythm of motion. Animation of each object in the scene should have a sense of rhythm. Fast / Vivid / Neutral / Slow / Pause etc. In my project, main character's rhythm is not well refined, I think. Some lack of pausing between important changes of emotion and scene. It would be much better if I make non linear motion & storytelling here. Sometimes fast, sometimes real slow and even pause a while.
- Would I like to use Blender Ever Again?
I was not so willing to use Blender before due to its strange user interface. I generally used to many of commercial CG package and know that those have a kind of common sense in GUI desing. So, it is not so difficult to learn new one. But Blender is so unique. Its early learning curve is really stiff. Anyway, with this first animation project, I could also find many of good aspects of Blender. Its feature and result is pretty decent and I got used to it. Therefore, I may use Blender again later if necessary. But still not the first choice.
- Blender Wiki Manual (http://wiki.blender.org/index.php/Manual)
This manual covers many of features in blender such as modeling, light, material, animation, and rendering.
- Introduction to character animation, Blender Tutorial, http://wiki.blender.org/index.php/BSoD/Introduction_to_Character_Animation
- Your first animation in 30 plus 30 minutes, Blender Tutorial, http://wiki.blender.org/index.php/Manual/PartI/Your_First_Animation_in_30_plus_30_Minutes_Part_I
- Dreamworks "Shrek2": 'Far Far Away Idol' in supplemental footage