bio projects contact
computer graphics
computer graphics


_______________ Various Animation Projects______________Physically-Based Walk Cycle_


Project Overview: Physically-Based Walk Cycle

Project Title:
Doodle_A_Character - CPSC 448B Directed Studies

Michiel van de Panne
Professor, Canada Research Chair, Associate Head for Research and Faculty Affairs - Department of Computer Science
The University of British Columbia

During my studies, I became increasingly interested in how new innovations in computer science can improve education through its rich user interaction. The goal of this project was part educational and part fun with the aim of creating a sandbox for the user to explore and test Newtonian physics as it relates to a biped character.

Developed a user interface that allows users to doodle a character in 2D using overlapping circles. The system generates a 3D character based on the user’s doodle which interfaces with SIMBICON*** controllers and ODE physics engine for walking in a physical based environment. The user can explore and learn the effects of physics on biped characters that are oddly shaped or disproportionately sized (i.e. oversized head or feet). Based on the ACM SIGGRAPH 2004 paper “Motion Doodles: An Interface for Sketching Character Motion”.

Platform: Developed in Python and wxWidgets using Eclipse PyDev plug-in and works in conjunction with ODE physics engine written in C++ and compiled using MS Visual Studio.

Grade Received: A

****SIMBICON controllers: developed in Michiel van de Panne's lab at UBC, please refer to "SIMBICON: Simple Biped Locomotion Control" by KangKang Yin, Kevin Loken, and Michiel van de Panne, ACM Transactions on Graphics (Proc. ACM SIGGRAPH 2007)

Quicktime screen captures using three different walks based from motion capture data.
[click on links below]

Snake Walk


Stationary Walk

Jump Walk

Project Details

The goal of this project was to develop a graphical user interface that allows a user to doodle a character for a walk cycle. The interface allows the user to draw a character they wish to animate. By drawing overlapping circles to indicate the body, head, arms, legs and feet, the user creates their own characture. The user’s input is a basic model for a biped character, which is then described into a hierarchical skeleton. The application creates a biped character by first inferring the joint positions from the doodle to create a hierarchical skeleton and then generates a rigid body 3D character. The application uses the overlapping circles to model the joint positions for creating a hierarchical skeleton starting from head to toe.

The joint positions’ calculations depend entirely on the positioning of the overlapping circles and hence enabling a novice user to create their own unique character. The 3D character description is created based on the user’s doodle and controllers are attached to the joints. The user is able to animate their character by selecting the “play” button to animate their character and enabling it to walk in a physically based environment.

The idea for this interface was inspired directly from “Motion Doodles: An Interface for Sketching Character Motion” only the interface I developed allow the user to sketch the character as oppose to sketching the motion of a character. Further, the interface uses the SimBiControllers and a physics engine (ODE) for the walk cycle.

The user selects the "doodle character" widget to draw, once selected, a shaded window appears on the screen and the user is able to doodle a character. The user is required to press down on mouse-left and drag the mouse to complete a circle and this information is captured and recorded. The DoodleACharacter class first captures the user’s mouse events then logs all the circle information. The coordinates are converted from pixel to position coordinates. There are eight tuples which each store information for the (x, y) positions which describe a complete circle and converts from pixel position in the window widget.

The user draws eight overlapping circles on a widget positioned on the left side of the interface and can draw a character in an orthogonal 2D side view perspective. A novice user may choose the size and proportions for their character. Once the user draws all the circles, the joint positions of the character are highlighted by green and red dots (for the wrist and ankles). The joints assign control point locations for the walk cycle.

Once the user finishes sketching the eight circles then the DoodleACharacter class computes the maximum and minimum (x,y) positions for the head, neck, shoulder, elbow, wrist, pelvis, knee, and foot then passed to a utility class that computes all the relevant positions needed for the draw function that builds a character description for the SIMBICON character.

The application assumes the user will draw the eight overlapping circles in the following order:
1) Head
2) Body
3) Upper Arm
4) Lower Arm
5) Upper Leg
6) Lower Leg
7) Foot
8) Toes

Z – Assumption:
Needed to make an assumption about density and I came up with a linear scaling factor for volume based on the area of the drawn circle.

Assumed Symmetric
Assume the user wanted their character to be symmetric and hence did not account for distortion.

Ground Coefficients
Used the pelvis position in the y direction times a scaling factor of 1.007.

The createDoodlefunction builds the character, wraps the controllers and passes this to the ODE physics engine.

Further, an articulated rigid body describes each body part and the whole hierarchical biped model consisting of different rigid body shapes (like ellipsoids, tapper boxes et. al ) are connected through joints/controllers is then drawn on the main window screen. Finally, the 3D character is ready to walk in a physically based environment. The user can select the play button from the animation widget (provided by the existing code base) as well as select kinematic motion to start the walk cycle.

User is able to doodle a character of any proportion they desire.


biped1 biped2
biped4 biped3

Walk cycle results worked best when the character was “well” proportioned.



More robust set of assumptions needed to be made for positioning the shoulder joint for the character. For exaggerated characters because the shoulder joint was hidden caused to hide the arms during the walk cycle and hence causing incorrect arm motion.


Developing the best scaling factor for the shoulders and torso was a challenge. This is because it depends on the z-assumptions made and given that the user can describe any proportion for the torso and shoulder sizes in 2D caused issues when describing in 3D. Based on empirical results, my chosen the scaling factor works best for a long and thin torso (body) and for average cases where the “body” circle is well “humanly” proportioned to the other circles.

Further, there is no collision detection for the different body parts, which causes the arm to “pass” through the hip.