From 0e2f7d0c12913602d97f4903d31a9aa053a13d19 Mon Sep 17 00:00:00 2001 From: type-two Date: Fri, 17 Jul 2026 10:02:53 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20B=20/=20session-5=20item=204:=20treaty?= =?UTF-8?q?=20amendment=20=E2=80=94=20required=20root=5Fspace=20sidecar=20?= =?UTF-8?q?field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit motion.json sidecar gains REQUIRED root_space in {camera, world}. HSMR is per-frame -> emits camera; Lane C reads it and derives a world root from foot contacts for locomotion clips. PLAN treaty + Lane C task updated. v1 quality bar: in-place clips first-class, traveling best-effort until a grounding pass exists. Co-Authored-By: Claude Opus 4.8 --- PLAN.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) 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