Technical Art / 2024

Prototyping game feel in After Effects, before a line of code.

On every game team there is a gap between how a mechanic should feel and how it ends up being built. I closed it with a tool nobody expected: After Effects.

Why After Effects

Game engines are where mechanics get built, but they are a slow place to ask "does this feel right?" Every change means a programmer, a build, a test. After Effects, by contrast, is a timeline-and-keyframe machine that artists already live in every day. So I turned it into a sandbox for game feel.

The idea: let an artist mock up a mechanic, a jump arc, a hit reaction, a pickup, a screen shake, and immediately scrub the timeline to feel the timing, before a developer ever touches it.

The scripting underneath

This is where it became a real tool rather than a one-off comp. I built a reusable template driven by ExtendScript (JSX) and a layer of expressions, so the timing was controlled by parameters rather than hand-placed keyframes.

A script set up the composition, generated the placeholder objects, and wired each one to a set of slider controls. Expressions then read those sliders and drove the motion, so an artist could change a single value and watch the whole interaction retime itself live.

// slider-driven timing, no manual keyframes
var t = thisComp.layer("Controls").effect("Anticipation")("Slider");
var impact = thisComp.layer("Controls").effect("Impact")("Slider");
linear(time, t, t + impact, startVal, endVal);

// the kind of expression wiring that let one slider retime a whole mechanic

SLIDER

Anticipation

How long the wind-up holds before the action fires.

SLIDER

Impact

The snap of the hit, and how hard it lands.

SLIDER

Settle

The follow-through and ease-out after the moment.

What it changed

It became a shared language between art and code. Artists could dial in exactly how something should feel and hand the developers real numbers, the actual timing values, instead of a vague "make it punchier."

That meant fewer build-test-tweak loops in the engine, fewer mechanics that felt wrong only after they were expensive to change, and a team that finally agreed on "feel" before committing to it. It also scratched a particular itch of mine: using scripting to turn a creative tool into something far beyond what it was built for.

← All projects