Become arthur: a standalone suite, not an Animator Pro front-end
The test renderer turned out to be the product. Everything that decides how the work looks - stabilisation, reduction, timing, frame removal, palette - already happens here, and the flat indexed output already reads the way it should. The reason to leave is in the original design's own rule: never make a timing decision that requires a full render to evaluate. Honouring that moved every judgement out of Animator Pro, which left the host doing nothing but writing a file, in exchange for modal UI, minutes-long renders, one-level undo, FLX delta invariants, a single tween state and a cel singleton. What does NOT change is the constraint. 320x200, indexed palette, flat fills, no antialiasing - inherited, but load-bearing rather than accidental. The rasteriser writes palette indices and expands to RGBA only at the end precisely so nothing can soften an edge. Modern conveniences belong in the workflow. Adds docs/design.md: the principles, carried over without the Poco/FLX/cel machinery, plus architecture and an honest list of what is missing - the largest gap being that plates still have nowhere to be drawn. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
dc0a3f34e6
commit
f827757f7d
8 changed files with 229 additions and 10 deletions
|
|
@ -4,7 +4,7 @@
|
|||
// and everything within it is just pixels. So teeth come from the picture.
|
||||
//
|
||||
// The hazard is vertex correspondence. A traced contour reorders between frames
|
||||
// and boils, which is the failure docs/roto-puppet.md exists to avoid. The way
|
||||
// and boils, which is the failure docs/design.md exists to avoid. The way
|
||||
// out for a blob specifically is RADIAL SAMPLING: march outward from the
|
||||
// centroid along N fixed directions and take the last pixel inside. Vertex k is
|
||||
// then always "the blob's extent in direction k" - correspondence holds by
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// MediaPipe FaceLandmarker index tables.
|
||||
// Ring arrays are ORDERED traversals, not raw connection sets: vertex position
|
||||
// within a ring is the vertex's identity, and every downstream stage depends on
|
||||
// that ordering being stable. See docs/roto-puppet.md, "Fixed topology".
|
||||
// that ordering being stable. See docs/design.md, "Fixed topology".
|
||||
|
||||
// Rigid landmarks for the similarity fit. Eye corners, nose bridge, nose tip.
|
||||
// Nothing here may be a feature that moves under performance: including the
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Analysis: dense track -> stabilised head-local contours -> selected keys.
|
||||
// All policy lives here, never in the renderer. See docs/roto-puppet.md,
|
||||
// All policy lives here, never in the renderer. See docs/design.md,
|
||||
// "The take is the contract".
|
||||
|
||||
import { RIGID, LIPS_OUTER, LIPS_INNER, APERTURE, FACE_OVAL, EYE_INNER, subsampleSlots } from './landmarks.js';
|
||||
|
|
@ -122,7 +122,7 @@ export function activeKey(keys, f) {
|
|||
|
||||
// Temporal smoothing of a contour, per vertex, across time.
|
||||
//
|
||||
// docs/roto-puppet.md says to smooth the transform and never the contour. That
|
||||
// docs/design.md says to smooth the transform and never the contour. That
|
||||
// was correct while keys were sparse: sampling at velocity minima rejected
|
||||
// per-frame detector noise for free. With a key on every frame the noise is
|
||||
// visible as a shimmer along the lip edge, so a bounded exception applies -
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// module graph the tool uses is what gets tested.
|
||||
//
|
||||
// The ring-simplicity check exists because "fixed topology" is load-bearing in
|
||||
// docs/roto-puppet.md: because hold parts CUT between poses rather than
|
||||
// docs/design.md: because hold parts CUT between poses rather than
|
||||
// interpolating, a ring whose vertex order is wrong self-intersects and renders
|
||||
// as blocks meeting at corners. It is invisible at some vertex counts and obvious
|
||||
// at others, so it needs an assertion rather than an eyeball.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Take-file writer. Format is specified in docs/roto-puppet.md, "The take
|
||||
// Take-file writer. Format is specified in docs/design.md, "The take
|
||||
// format". Line-oriented text on purpose: Poco can parse it with fopen/fgets
|
||||
// from poco/src/safefile.c and strtok/atoi/atof from poco/src/strlib.c, so the
|
||||
// Animator Pro render script needs no new native code.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue