Option 3: eye acting. The body stays completely frozen. Every emotion comes from the two capsules, cut by invisible upper and lower lids.

**The body never moves.**
14 emotions come from the eyes alone.

**Invisible eyelids do the work.**
Each eye sits behind a mask with two edges:

**Upper lid:**
a straight line that can drop and tilt.

**Lower lid:**
a curve that can rise and arch.

**Four more controls:**
eye size, gaze direction, tremble, and small random eye jumps (saccades) that keep the eyes alive.

**Five numbers per eye**
(size, lid height, lid tilt, lower lid, arch) plus gaze make the whole vocabulary.

The tilt direction alone separates angry from sad. Same lid, same height, opposite slant, opposite emotion.

**Change during a blink.**
Pixar and game animators hide expression swaps inside blinks. The eye closes in one mood and opens in another, so the viewer's brain skips the awkward in-between. Untick the box and you'll see the eyes slide between shapes, which feels mechanical.

**Saccades are always on.**
Tiny, instant eye jumps every 1–2 seconds stop the bot looking like a statue, even at "neutral." Remove them and it reads as dead or hypnotized.

**Emotion lives in context.**
The same eye shape can read as a different mood depending on what comes next. Smug followed by embarrassed feels like getting caught. Sad followed by happy feels like relief.

**The original design is already "mid-acting."**
The slanted capsules sit off-centre and up-right, so the resting bot already looks like it's glancing at something. That's why neutral still has personality.

**How one eye is built (layers)**
```
upper lid line ───────\ (height T, tilt t) ▓▓▓▓▓▓▓\ capsule eye ▓▓▓▓▓▓▓▓▓ (size s, rotated −35°) ▓▓▓▓▓▓▓ lower lid curve \_____/ (height B, arch c) visible eye = capsule ∩ region between lids
```

**Expression swap on a blink**
```
eye open ── closing ──[closed: swap params]── opening ── eye open mood A 0.11 s instant 0.11 s mood B
```

**Emotion as data**
```
Expression { L:{s,T,t,B,c}, R:{s,T,t,B,c}, gx, gy, jitter } render: clip(eye) = polygon(topLine(T,t), bottomCurve(B,c))
```

**Critical thinking:**
angry and determined share the same lid slant. Which small difference actually separates them for you? Is it lid depth, the squint, or what you expect the bot to do next?

**Lateral thinking:**
emoji designers, kabuki mask makers and car-front designers all shape "eyes" to signal mood. Headlights with a lowered "brow" make a car look aggressive. Where else does this lid grammar quietly steer your feelings?

**First principles:**
people read emotion from two dots and a line in a split second. What in human perception makes so few pixels enough? And what breaks it: size, speed, or asymmetry?

Say "next" for option 4, the start of family B (early gaming): a vector display. The bot becomes a glowing wireframe sphere on a black screen, like Asteroids or the Vectrex console.

A. Animation foundations

#3 Eye acting

Share: /e/grokbot-animation/3/