diff --git a/PLAN.md b/PLAN.md index 796e198..f3d3dc6 100644 --- a/PLAN.md +++ b/PLAN.md @@ -51,8 +51,11 @@ critical path. Lanes E–F are follow-ons. Do NOT start E/F before D ships. - Skeleton: **mixamorig 65-joint** as defined by `~/Documents/character_kit` (`female_game.glb` / male base). Canonical bone list generated in Lane 0. - Intermediate motion format: **BVH at 30fps** + sidecar JSON - (`{fps, joint_order, root_trajectory, source_video, model, version}`). - BVH because Blender imports it natively and it's human-diffable. + (`{fps, joint_order, root_space, root_trajectory, source_video, model, version}`). + **`root_space` ∈ {`"camera"`, `"world"`} is REQUIRED** (session-5 amendment): HSMR is a + per-frame recoverer so it emits `"camera"`; Lane C reads this and, for locomotion clips, + derives a world root from foot contacts. BVH because Blender imports it natively and it's + human-diffable. - Units metres, Y-up, character faces −Z (three.js convention; Unreal yaw-fix happens at UE import, as established in the A_3D_STORE experiments). - Final artifact: FBX (anim-only, Mixamo-style "Without Skin") dropped into @@ -157,8 +160,11 @@ Tasks: `mixamorig_` variants — this bit us before), bake to keyframes. - Foot-contact fix: detect frames where foot velocity ≈ 0 & height < threshold → IK pin. `# ponytail: threshold heuristic, upgrade to learned contact detection in Lane E if it annoys`. - - Trim the T-pose bookends (Lane A protocol guarantees them), root-motion option - (in-place vs traveling) as a flag. + - Trim the T-pose bookends (Lane A protocol guarantees them). Root motion is driven by the + sidecar **`root_space`** (session-5 treaty): `"camera"` (HSMR) → in-place by default, or + derive a world root from foot contacts for traveling clips; a `--in-place`/`--traveling` + flag overrides. v1 quality bar: **in-place clips are first-class; traveling is best-effort** + until a proper grounding pass exists. - Export anim-only FBX (Mixamo "Without Skin" style — merge_anims.py already eats these). 2. QC render: 3-second turntable mp4 of the clip on the female_game body, written next to the FBX. **Verify with own eyes** (the rule) — every clip gets its mp4 looked at