Kinematic Animation Toolkit

Blender Add-on (Python)


Project Description

One of the coolest parts of animating rides is there is no "build ride" button. That is, until you make one! I've been evolving my toolkit since 2017, and I made the jump over to Blender back in 2024 because of how configurable it is.

The Kinematic Animation Toolkit allows me to see the velocity, acceleration, and jerk graphs in real-time as I animate. This helps me ensure the motions I'm designing can be achieved on the ride system or piece of show action equipment. The interface can be configured for any ride system or robot you can imagine.

The toolkit also enables me to export the profiles as positional data over time. The export is fully configurable to meet the needs of whatever control system we are working with, at whatever data rate that is desired. If you'd like more of the technical details see the feature list below.

Since this one pays the bills, its not on my public GitHub, but you can see any of the other tools if you're looking for code samples.


Toolkit Features

Feature What it does
Functionality
Real-time overlay GPU-drawn graphs of position, velocity, acceleration, and jerk render live in the 3D viewport and recompute the instant you insert, move, or delete a keyframe. Updates don't require scrubbing, playback, or baking.
Smooth derivatives Velocity, acceleration, and jerk are computed with numpy central differences (np.gradient), so curves stay smooth and stable even on Bezier F-Curves.
Multiple axes Axes tab. Evaluate any number of motion axes at once. Works on standard axes (yaw, pitch, roll), or anything with its own label, target, channel, color, and curves.
Three sampling modes Axes tab. Sample Translation (location X/Y/Z), Rotation (euler channels, shown in degrees), or distance along a path (using Path / Eval Time).
Works with any ride system Axes tab. Target any object or path curve. Per-axis Use Evaluated samples true world-space motion through the dependency graph, so parented, constrained, and rigged carriages read accurately.
Kinematic limits Kinematic Limits tab. Set upper and lower limits on position, velocity, acceleration, and jerk per axis; each draws as a dashed line with a value label on the matching curve row so overshoot is visually evident.
Relative scaling Axes tab. Relative Values pins a row to its limit span plus 10% headroom so the dashed lines stay put and overshoot reads directly.
Sample range control Sample Range tab. Set frame start, end, and sample step, sync the range to the scene, or print an axis's stats to the system console for a quick numeric check.
Usability Features
Single or multi-monitor Kinematics tab. A primary Graphs On (All Viewports) switch, a per-viewport eye toggle, and a per-axis enable let graphs show everywhere, in one viewport, or per axis—so they fit single- or multiple-monitor layouts.
Separate or condensed windows Display tab. Each axis draws in its own overlay window (auto-stacking and wrapping to a new column), or Condense to Single Graph merges every axis into one shared window overlaid by derivative type.
Configurable placement Display tab. Position and size each overlay window with X, Y, Width, and Height fields. Any window pushed off-screen is flagged with an on-screen notice so no data is lost.
Color control Display tab & preferences. Global per-derivative colors persist across files; each axis also gets a distinct auto-assigned color that keeps axes readable in condensed mode. Restore Default Colors resets them.
Portable install Packaged as a standard Blender add-on—drop the zip in through Edit > Preferences > Add-ons and enable it. There are no external Python packages to manage; it uses only numpy, gpu, and blf, which ship with Blender, and runs on Blender 4.0 and newer.
Import & Export
Ride System presets Ride System tab. Save an entire setup—axes, modes, targets, channels, colors, curves, limits, frame range, and window settings—as plain editable JSON, then load or swap complete ride configurations at runtime.
CSV export Export tab. Export any ticked selection of axes to CSV over the shared sample range, with position/distance, velocity, acceleration, and jerk columns per axis and units written into the headers.