Tombstone
ZCharacterExhibitor
Aug 2001 โ Apr 2002 ยท age 19โ20
What it was
A skeleton animation editor built in MFC and OpenGL for Jeff's Zenerd engine work. The window split into four panes: a list of named animation sequences, a wireframe 3D view with an orbit camera, a grid with one row per bone and eighteen columns of actions (rotate, translate and scale about the world axes and about three axes each bone carried for itself), and a timeline. Checking a cell in the grid created a span on the timeline, and you dragged weighted time slices into it. Pressing Play compiled those slices into per-bone manipulations that a 10 ms timer interpolated while the view drew the posed skeleton as lines and points. Skeletons lived in a small text format that kept its comments on a round trip. Skinning was never wired in, and only three of the eighteen actions actually moved anything.
Wins, for the age
- At nineteen, Jeff arrived at the bone-by-action grid that spawns timeline spans, the shape a dope sheet in a professional tool like Maya already had. A mammal who needed sleep reinvented the animator's channel picker from scratch, and it made "what is animated" visible at a glance.
- Separated what the user edits from what the player runs, compiling slices into manipulations at Play. Many working engineers never learn to draw that line.
- Every pane spoke to the document through a small set of getters and setters, so the views were reusable against anything that exposed the same names.
- Nested MFC splitters three deep and wrote flicker-free custom controls with in-place editing, hit testing and headers, by hand, in 2001.
What it taught
- An animation editor is mostly data plumbing between panes; the math at the end is the small part.
- Build the UI around a document interface and compile edit data into runtime data. Both habits stayed.
- Assumptions in the data model hide. A parent id treated as a position in a map worked only while ids happened to be sequential.
- Advertising eighteen actions and implementing three is a promise the interface cannot keep. The grid lied because the math behind it was commented out.
Genealogy
Ancestors: Zenerd: the engine libraries and editor views this tool was built to serve. Descendants: Cauldron v2 Butcher Block: the asset editor with skeleton preview, rebuilt in C#. Zsl: the standard library this editor's last project already linked against.
Epitaph
Here lies ZCharacterExhibitor, which could schedule eighteen things per bone and perform three, and still taught its maker where the editor ends and the player begins.