CSE 169: Computer Animation

Winter 2004



            Steve Rotenberg (steve@graphics.ucsd.edu)

            Office: AP&M 3349A, Tues & Thurs 5:00pm-6:00pm


            Nick Gebbie (ventare@redtoast.net)

            Section: Mon, 12:00pm-12:50pm, U413, room 1

            Lab hours: After section, Mon, 1:00pm-3:00pm, AP&M 2444

            Office: Tues & Thurs, 3:00pm-5:00pm, EBU-1, 6307


Time: Tues & Thurs, 6:30 pm – 7:50 pm

Location: Center Hall 222


            Lab: AP&M 2444

Required Reading

There are no required textbooks. Several papers will be required reading and will be added to this list  throughout the quarter.


Pose Space Deformation            (download the .pdf version at the upper right)

Surface Oriented Free Form Deformations

A Survey of Facial Modeling and Animation Techniques

Inverse Kinematics

Optional Reading     

For an introduction to both computer graphics and OpenGL, I suggest:

“3D Computer Graphics: A Mathematical Introduction with OpenGL”, S. Buss


For a non-mathematical introduction to OpenGL:

            “OpenGL Programming Guide”, Woo


For a good book on C++ software architecture:

            “Large Scale C++ Software Design”, Lakos


An older computer graphics book, but one of very few that talks about animation:

            “Advanced Animation and Rendering Techniques”, Watt & Watt

Course Objective

This advanced graphics class focuses on the programming techniques involved in computer animation. Algorithms and approaches for both character animation and physically based animation will be covered. Particular subjects may include skeletons, skinning, keyframing, facial animation, inverse kinematics, locomotion, motion capture, video game animation, particle systems, rigid bodies, clothing, hair, and other techniques. A good understanding of linear algebra and computer graphics is essential and CSE167 or approval from the instructor is required.

Lecture Schedule

Here is a rough outline of the course. This will be updated throughout the quarter with any changes.


  1. Introduction
  2. Skeletons
  3. Skinning
  4. Facial Expressions & Rigging
  5. Advanced Skinning
  6. Quaternions
  7. Channels & Keyframes
  8. Animation State Machines & Blending
  9. Review
  10. Midterm
  11. Inverse Kinematics 1
  12. Inverse Kinematics 2
  13. Locomotion
  14. Procedural Animation
  15. Particle Systems
  16. Cloth Simulation
  17. Collision Detection
  18. Rigid Bodies
  19. Behavioral Animation & Artificial Intelligence
  20. Review

Programming Projects

There will be four programming projects, due at the beginnings of week 3, 5, 7and 10.


Some (very) basic C++/OpenGL graphics code will be provided to get some of the simple stuff out of the way, but students are allowed to use a different graphics API and/or object oriented programming language if they prefer.


Project 1: Due Beginning of Week 3 (6:00pm on Tuesday, 1/20/04)

- Skeleton Hierarchy: Load a .skel file and display a 3D pose-able skeleton.


Project 2: Due Beginning of Week 5 (11:59pm on Monday, 2/2/04)

- Skin: Load .skin file and attach to the skeleton from project 1.


Project 3: Due Beginning of Week 7 (11:59pm on Wednesday, 2/18/04)

- Animation: Load an .anim file and play back a key-framed animation on a skinned character


Project 4: Due Beginning of Week 10 (6:00pm on Tuesday, 3/9/04)

Choose one of the following:

- Cloth: Implement a cloth simulation

- Fancy Particle System: Implement a particle system with collision detection and some fancy forces

- Inverse Kinematics: Implement Jacobian IK algorithm on a chain of bones in the skeleton

- Locomotion: Implement multi-legged locomotion using the simple analytical IK scheme

- Rigid Bodies: Implement a simple rigid body system with collisions

- Choose your own project (please discuss it with me first!)

Turning in Projects

To turn in your projects, please put all necessary files into a .zip file (use ‘zip’)

- This should include all of the source code (.cpp, .h…)

- Also, include any files needed to compile (makefiles on unix, .dsp & .dsw for VC++, etc.), and anything else necessary

- Please leave out the big intermediate files!

- Also, please include a compiled executable.

- Include a readme.txt file in there that lists your name, any problems, issues, additional features, keyboard controls, or any other relevant information you want to include.


When you have your entire project in one .zip file, you can use the ‘turnin’ program to turn it in:


            turnin –c cs169w (filename)


It doesn’t matter what you name the file, as turnin will rename it.


If turnin doesn’t work after you’ve tried many times, then please email it to both me AND my TA. Please make sure the file isn’t too big!


This class is for 4 units and grading will be based on programming projects plus a midterm and a final.


Project 1:            15%

Project 2:            15%

Project 3:            15%

Project 4:            20%

Midterm:             15%

Final:                   20%

Sample Code

Some basic C++/OpenGL code is provided to get you started. The example is a simple object oriented spinning cube.