🎬
Module 1
Advanced 2D AnimationTraditional Principles Meet Digital Pipeline
⏱️ 12–16 hours📊 Beginner🧩 3 Code Blocks🏗️ 1 Project
🎯 Learning Objectives
- ✓Master the 12 Principles of Animation — the foundation used at every major studio.
- ✓Understand frame timing, spacing, and the difference between animating on 1s, 2s, and 3s.
- ✓Learn digital vector animation and puppet rigging in Toon Boom Harmony.
- ✓Build a professional walk cycle and character acting shot from scratch.
- ✓Understand the studio pipeline: from storyboard to final composite.
📋 Prerequisites
A drawing tablet (Wacom/iPad) OR mouseBasic computer skillsNo animation experience required — we start from frame one!
📐 Technical Theory
🎬 What is Animation? (The Industry Perspective)
Animation is NOT just "making things move." At a professional level, animation is the art of creating the ILLUSION of life. Every frame is a deliberate decision — there are no accidents in great animation.
The pipeline at a major studio like Pixar or Disney follows strict phases:
1. Story & Script → What are we telling?
2. Storyboarding → Visual blueprint of every shot
3. Pre-visualization (Pre-viz) → Rough 3D/2D timing pass
4. Layout → Camera placement and staging
5. Blocking → Key poses only (the "storytelling" pass)
6. Splining → Smooth interpolation between keys
7. Polish → Micro-details, overlapping action, secondary motion
8. Rendering & Compositing → Final output
Whether you work in 2D or 3D, this pipeline is universal. Master it once, and you can work anywhere.
📐 The 12 Principles of Animation
Created by Disney legends Frank Thomas and Ollie Johnston in the 1930s, these principles are STILL the foundation of every animation you see today — from Pixar films to video games.
Think of these as the "grammar" of animation. You can break the rules creatively, but only AFTER you understand them.
| # | Principle | What It Does | Example |
|---|---|---|---|
| 1 | Squash & Stretch | Gives a sense of weight and flexibility | A bouncing ball squashes on impact, stretches in the air |
| 2 | Anticipation | Prepares the audience for a major action | A character crouches before jumping |
| 3 | Staging | Presents an idea so it is clear | Silhouette test — can you read the pose in shadow? |
| 4 | Straight Ahead vs Pose-to-Pose | Two animation methods | Straight Ahead = wild/organic, Pose-to-Pose = controlled |
| 5 | Follow Through & Overlapping Action | Parts of the body move at different rates | Hair keeps moving after the head stops |
| 6 | Slow In / Slow Out (Ease) | Motion accelerates and decelerates | A car eases into motion, doesn't teleport |
| 7 | Arcs | Natural motion follows curved paths | An arm swings in an arc, not a straight line |
| 8 | Secondary Action | Supporting actions reinforce the main one | Walking (primary) + swinging arms (secondary) |
| 9 | Timing | The number of frames per action = mood/weight | Fast = light/snappy, Slow = heavy/dramatic |
| 10 | Exaggeration | Push beyond reality for impact | A surprised character's eyes go 3× their size |
| 11 | Solid Drawing / Solid Posing | Forms have weight, depth, and balance | Avoid "twinning" — never make both arms identical |
| 12 | Appeal | Characters must be interesting to watch | Clear design, strong silhouette, readable expressions |
⏱️ Timing & Spacing — The Secret Weapon
Timing and Spacing are what separate amateur animation from professional work. They are arguably MORE important than drawing skill.
• Timing = HOW MANY frames an action takes (e.g., a punch in 4 frames vs 12 frames)
• Spacing = WHERE the object is on each frame (even spacing = mechanical, uneven = organic)
Frame Rate Standards:
• Film: 24 fps (frames per second)
• TV Animation: 24 fps, often animated on 2s (12 unique drawings per second)
• Games: 30 or 60 fps
• Web: 24 fps
Animating "on 1s" means a new drawing every frame (24 drawings/sec) — smooth but expensive.
Animating "on 2s" means a new drawing every OTHER frame (12 drawings/sec) — the standard for TV.
| Timing Style | Frames | Feel | Used In |
|---|---|---|---|
| On 1s | 24 drawings/sec | Silky smooth, cinematic | Disney features, fast action |
| On 2s | 12 drawings/sec | Snappy, energetic | Anime, TV animation, most 2D |
| On 3s | 8 drawings/sec | Choppy, stylized | Spider-Verse, limited animation |
| Mixed | Varies per shot | Dynamic, deliberate | Best studios mix freely |
🖥️ Digital 2D Pipeline — Vector vs Raster
Modern 2D animation uses two primary approaches:
1. Frame-by-Frame (Raster): Draw every frame individually. Maximum artistic freedom but extremely labor-intensive. Used for: hand-drawn features, key emotional moments.
2. Puppet/Rigging (Vector): Build a character out of reusable parts (head, arms, legs, eyes) connected by joints. Animate by moving the joints. Used for: TV series, web content, games.
Both are valid professional techniques. Most studios use a HYBRID — puppet rigs for dialogue scenes and frame-by-frame for action.
Industry Tools:
• Toon Boom Harmony — The industry standard for 2D (used by Disney TV, Cartoon Network)
• Adobe Animate — Web animation, simple projects
• TVPaint — Frame-by-frame specialist (used by Studio Ghibli)
• OpenToonz — Free, used by Studio Ghibli
🏃 The Walk Cycle — Animator's Rite of Passage
The walk cycle is the single most important exercise in animation. Why? Because it tests EVERY principle simultaneously:
• Timing (step duration)
• Weight (how heavy is the character?)
• Personality (confident? tired? sneaky?)
• Follow-through (arms, hair, clothing)
• Arcs (hips, shoulders, head)
• Balance (center of gravity over the contact foot)
A standard walk cycle has 4 key poses:
1. Contact — Front foot strikes the ground
2. Down — Body at its lowest point (weight transfer)
3. Passing — Back leg passes under the body
4. Up — Body at its highest point (push-off)
In a typical walk at 24fps animated on 2s, one full step = 12 frames, one complete cycle (left+right) = 24 frames = 1 second.
💻 Implementation
Step 1: Setting Up a 2D Animation Project
Step 1: Setting Up a 2D Animation Project
javascript
// ── After Effects Expression: Smooth Loop ─────────────
// Apply this expression to any animated property
// to create a perfectly seamless loop.
// Ping-Pong Loop (goes forward then backward)
loopOut("pingpong");
// Cycle Loop (repeats from start)
loopOut("cycle");
// ── Bounce Expression (Physics-based) ─────────────────
// Apply to Position Y for a realistic bouncing ball
// Uses real physics: gravity + energy loss per bounce
var gravity = 2000; // pixels per second²
var bounceHeight = 400; // initial drop height
var dampening = 0.7; // energy retained (0-1)
var bounceFreq = 2.5; // bounces per second
var t = time - inPoint;
var amplitude = bounceHeight;
var decay = Math.pow(dampening, t * bounceFreq);
// Simulate bounce with sine wave + decay
value + [0, -amplitude * Math.abs(Math.sin(bounceFreq * t * Math.PI)) * decay];
// ── Walk Cycle Timing Template ────────────────────────
// Standard walk at 24fps, animated on 2s:
//
// Frame 01: Contact Pose (Right foot forward)
// Frame 03: Down Pose (Weight drops)
// Frame 07: Passing Pose (Left leg swings through)
// Frame 09: Up Pose (Push off, highest point)
// Frame 13: Contact Pose (Left foot forward) ← MIRROR
// Frame 15: Down Pose
// Frame 19: Passing Pose
// Frame 21: Up Pose
// Frame 25: = Frame 01 (cycle complete)
//
// Total: 24 frames = 1 second per full cycle🔧 Troubleshooting
❌ Error:Expression error: undefined value🔍 Cause:Expression applied to wrong property type✅ Fix:Ensure the expression is on Position, not Opacity or Rotation
❌ Error:Walk cycle doesn't loop cleanly🔍 Cause:First and last frames don't match✅ Fix:Ensure Frame 25 is identical to Frame 1, then set loop to (1, 24)
Step 2: Puppet Rigging in Toon Boom Harmony
Step 2: Puppet Rigging in Toon Boom Harmony
python
# ── Toon Boom Harmony — Puppet Rig Setup Guide ───────
# While Harmony uses a visual rigging interface,
# you can automate rig setup with its scripting API.
# Harmony Script: Auto-Peg Setup for Character Rig
# This creates the standard hierarchy for a puppet rig.
def create_character_rig(character_name):
"""
Creates a professional puppet rig hierarchy.
Standard Hierarchy:
└── Master_Peg (move entire character)
├── Body_Peg
│ ├── Torso
│ │ ├── Head_Peg
│ │ │ ├── Head
│ │ │ ├── Eyes_Peg
│ │ │ │ ├── Eye_L
│ │ │ │ └── Eye_R
│ │ │ ├── Mouth_Peg
│ │ │ │ └── Mouth (swap library)
│ │ │ └── Hair_Peg
│ │ │ └── Hair (with deformers)
│ │ ├── Arm_L_Peg
│ │ │ ├── Upper_Arm_L
│ │ │ ├── Forearm_L
│ │ │ └── Hand_L (swap library)
│ │ └── Arm_R_Peg
│ │ └── (mirror of Arm_L)
│ ├── Hips_Peg
│ │ ├── Leg_L_Peg
│ │ │ ├── Thigh_L
│ │ │ ├── Shin_L
│ │ │ └── Foot_L
│ │ └── Leg_R_Peg
│ │ └── (mirror of Leg_L)
│ └── Shadow
└── Effects_Peg
├── Motion_Blur
└── Particles
"""
# Create pegs for each body part
pegs = {
"Master": f"{character_name}_Master_Peg",
"Body": f"{character_name}_Body_Peg",
"Head": f"{character_name}_Head_Peg",
"Arm_L": f"{character_name}_Arm_L_Peg",
"Arm_R": f"{character_name}_Arm_R_Peg",
"Leg_L": f"{character_name}_Leg_L_Peg",
"Leg_R": f"{character_name}_Leg_R_Peg",
}
print(f"✅ Rig hierarchy created for: {character_name}")
print(f" Total pegs: {len(pegs)}")
print(f" Deformer zones: Hips, Shoulders, Wrists")
print(f" Swap libraries: Mouth (visemes), Hands (poses)")
return pegs
# ── Deformer Setup Notes ──────────────────────────────
# Bone Deformers: Use for limbs (smooth bend at elbows/knees)
# Curve Deformers: Use for hair, tails, tentacles (fluid motion)
# Envelope Deformers: Use for facial expressions (lattice warp)
#
# PRO TIP: Always place deformers ABOVE the artwork in
# the node view, never below. Deformers flow top-down.🔧 Troubleshooting
❌ Error:Drawing appears behind other layers🔍 Cause:Z-depth ordering incorrect✅ Fix:Use the Top/Side view to adjust Z-depth, or reorder in the Timeline panel
❌ Error:Deformer causes artwork to "tear"🔍 Cause:Deformer influence radius too small✅ Fix:Increase the deformer envelope size in the Rigging tool options
Step 3: Understanding Animation Curves (F-Curves)
Step 3: Understanding Animation Curves (F-Curves)
python
# ── Animation Curves: The Animator's Control Panel ────
# F-Curves (Function Curves) are the GRAPH representation
# of your animation over time. Mastering them is essential.
import numpy as np
import matplotlib.pyplot as plt
def visualise_easing_curves():
"""
Visualise the 4 fundamental easing types.
Every motion in animation uses one of these.
"""
t = np.linspace(0, 1, 100) # Normalised time (0 to 1)
# 1. Linear — Constant speed (robotic, unnatural)
linear = t
# 2. Ease In — Starts slow, ends fast (acceleration)
# Think: a ball dropped from height (gravity)
ease_in = t ** 2.5
# 3. Ease Out — Starts fast, ends slow (deceleration)
# Think: a ball thrown upward (slowing down)
ease_out = 1 - (1 - t) ** 2.5
# 4. Ease In-Out — Slow start, fast middle, slow end
# Think: a car starting and stopping at a light
ease_in_out = np.where(
t < 0.5,
2 * t ** 2, # First half: ease in
1 - (-2 * t + 2) ** 2 / 2 # Second half: ease out
)
# ── Plot ───────────────────────────────────────────
fig, axes = plt.subplots(1, 4, figsize=(20, 4))
curves = [
(linear, "Linear\n(Robotic)", "#ff4444"),
(ease_in, "Ease In\n(Accelerate)", "#44aaff"),
(ease_out, "Ease Out\n(Decelerate)", "#44ff88"),
(ease_in_out, "Ease In-Out\n(Natural)", "#ffaa44"),
]
for ax, (curve, title, color) in zip(axes, curves):
ax.plot(t, curve, color=color, linewidth=3)
ax.set_title(title, fontsize=12, fontweight="bold")
ax.set_xlabel("Time →")
ax.set_ylabel("Value →")
ax.grid(True, alpha=0.2)
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
plt.suptitle(
"The 4 Fundamental Easing Curves",
fontsize=14, fontweight="bold", y=1.05,
)
plt.tight_layout()
plt.savefig("easing_curves.png", dpi=150)
plt.show()
visualise_easing_curves()
print("\n💡 PRO TIP: 90% of all animation uses Ease In-Out.")
print(" The curve editor is where good animation becomes GREAT.")
print(" Spend time here — it's worth it.")🔧 Troubleshooting
❌ Error:Animation looks "floaty" or "swimmy"🔍 Cause:Bezier handles are too long, creating overshoots✅ Fix:Shorten the tangent handles or switch to "Weighted Tangents" mode
❌ Error:Motion feels robotic/linear🔍 Cause:Default interpolation is linear (no easing)✅ Fix:Select all keyframes → Right-click → Set to "Auto Bezier" or "Ease In/Out"
🏗️ Professional Project
Professional Walk Cycle & Acting Shot
Create a complete character walk cycle (24-frame loop) plus a 3-second acting/emotion shot. This is the exact portfolio piece studios look for when hiring junior animators. You'll practice timing, spacing, arcs, overlapping action, and personality — all in one assignment.
Professional Walk Cycle & Acting Shot
markdown
# ── DELIVERABLES ──────────────────────────────────────
# 1. Walk Cycle (24 frames, seamless loop)
# 2. Acting Shot (72 frames / 3 seconds)
# 3. Timing Charts for both
# ── WALK CYCLE SPECIFICATION ─────────────────────────
# Format: 1920×1080 (HD)
# Frame Rate: 24 fps
# Duration: 24 frames (1 second loop)
# Style: On 2s (12 unique drawings)
# View: Side profile (for clarity)
# Key Poses (MUST include):
# ┌─────────────────────────────────────────────────┐
# │ Frame 01 → Contact (front foot strikes) │
# │ Frame 03 → Down (weight drops, lowest) │
# │ Frame 07 → Passing (swing leg passes body) │
# │ Frame 09 → Up (push-off, highest) │
# │ Frame 13 → Contact (MIRROR of frame 01) │
# │ Frame 15 → Down (MIRROR of frame 03) │
# │ Frame 19 → Passing (MIRROR of frame 07) │
# │ Frame 21 → Up (MIRROR of frame 09) │
# └─────────────────────────────────────────────────┘
# ── CHECKLIST ─────────────────────────────────────────
# □ Head bobs up and down (Down pose = lowest, Up = highest)
# □ Arms swing OPPOSITE to legs (counter-balance)
# □ Hips shift side-to-side on passing position
# □ Shoulders tilt opposite to hips (contrapposto)
# □ Feet follow arcs, never slide on ground contact
# □ Hair/clothing follows through 2-3 frames late
# □ Loop is seamless — Frame 25 = Frame 01
# □ Silhouette reads clearly at every key pose
# ── ACTING SHOT SPECIFICATION ────────────────────────
# Duration: 72 frames (3 seconds)
# Emotion: Choose one: Joy → Surprise → Sadness
# Must show: Clear emotional transition
# At least 2 distinct poses
# Facial expression change
# Secondary action (fidgeting, looking away)
# ── GRADING RUBRIC ────────────────────────────────────
# Weight & Balance 25% (Does the character feel heavy?)
# Timing & Spacing 25% (Are the curves clean?)
# Personality / Appeal 20% (Is it interesting to watch?)
# Overlap & Follow-Thru 15% (Do parts move independently?)
# Technical Polish 15% (Clean arcs, no pops, smooth loop)🔧 Troubleshooting
❌ Error:Walk cycle "pops" at the loop point🔍 Cause:First and last frame positions don't match exactly✅ Fix:Copy frame 1 to frame 25 in the dope sheet, then trim to 24 frames
❌ Error:Character looks like they're "ice skating"🔍 Cause:Feet are sliding on the ground plane✅ Fix:Lock the contact foot position — it MUST stay planted until lift-off
Topics Covered
#12 Principles#Walk Cycle#Timing & Spacing#Toon Boom#After Effects#Puppet Rigging#Storyboards