Author the 62-to-13 joint map and align the AGENTS.md contract with the Quaternius base
This commit is contained in:
1 parent
8c69f367b0
commit
1ed9e05d9b
3 files changed
+43
-6
No files matched your search
@@ -93,9 +93,11 @@ specialists the task needs:
|
|||||||
1. **The project contract wins.** `npc_base` mesh node, the 13 required core bones at their rest
|
1. **The project contract wins.** `npc_base` mesh node, the 13 required core bones at their rest
|
||||||
positions, five tint slots, front on Blender −Y / Godot +Z, grounded feet, 24,000
|
positions, five tint slots, front on Blender −Y / Godot +Z, grounded feet, 24,000
|
||||||
triangles / 24,000 glTF vertices per character, 1,500 per gear, 4,000 per prop. Optional
|
triangles / 24,000 glTF vertices per character, 1,500 per gear, 4,000 per prop. Optional
|
||||||
extra bones (fingers, face, toes) are allowed if they do not move the core rest positions. A skill
|
extra bones (fingers, face, toes) are allowed if they do not move the core rest positions. The
|
||||||
may recommend another topology, naming or budget scheme; do not adopt it unless the
|
Quaternius 62-joint source rig is authoring-only and bakes to this 13-core contract
|
||||||
change is explicitly planned and the contract, tests and docs are updated together.
|
(ADR-0017); it is not a runtime dependency. A skill may recommend another topology, naming or
|
||||||
|
budget scheme; do not adopt it unless the change is explicitly planned and the contract, tests
|
||||||
|
and docs are updated together.
|
||||||
2. **Blender MCP is optional interactive tooling.** The headless flatpak scripts
|
2. **Blender MCP is optional interactive tooling.** The headless flatpak scripts
|
||||||
(`tools/blender_assets.py`, `tools/npc_pipeline.py`) remain authoritative. MCP may be used
|
(`tools/blender_assets.py`, `tools/npc_pipeline.py`) remain authoritative. MCP may be used
|
||||||
for local part exploration; setup and safety are in [`docs/asset-tooling.md#optional-interactive-blender-mcp`](docs/asset-tooling.md#optional-interactive-blender-mcp).
|
for local part exploration; setup and safety are in [`docs/asset-tooling.md#optional-interactive-blender-mcp`](docs/asset-tooling.md#optional-interactive-blender-mcp).
|
||||||
@@ -104,8 +106,9 @@ specialists the task needs:
|
|||||||
3. **CI stays offline and skill-free.** Skills are local guidance only; every gate must still
|
3. **CI stays offline and skill-free.** Skills are local guidance only; every gate must still
|
||||||
work from a fresh checkout with committed `.glb`/`.png`/`.tres` files and Godot.
|
work from a fresh checkout with committed `.glb`/`.png`/`.tres` files and Godot.
|
||||||
4. **No new asset source without the licence gate.** Skills may suggest reference packs or
|
4. **No new asset source without the licence gate.** Skills may suggest reference packs or
|
||||||
generated meshes; ADR-0015 (CC0, or CC-BY with attribution in `CREDITS.md`) and the
|
generated meshes; ADR-0017 (the CC0 Quaternius NPC base) supersedes the generator-first
|
||||||
provenance rules in `docs/npc-model-sourcing.md` still apply.
|
decision in ADR-0015, and the CC0/CC-BY rule in ADR-0015 (attribution in `CREDITS.md`) plus
|
||||||
|
the provenance rules in `docs/npc-model-sourcing.md` still apply to any new source.
|
||||||
5. **Evidence, not vibes.** After a skill-informed change, run `blender_assets.py inspect`,
|
5. **Evidence, not vibes.** After a skill-informed change, run `blender_assets.py inspect`,
|
||||||
`audit` and `fit` plus the relevant capture/smoke gates, and say in the handoff which
|
`audit` and `fit` plus the relevant capture/smoke gates, and say in the handoff which
|
||||||
skills informed the change and what the measurements were.
|
skills informed the change and what the measurements were.
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ baseline sheet.
|
|||||||
|
|
||||||
### 2. Contract bake and animation
|
### 2. Contract bake and animation
|
||||||
|
|
||||||
- [ ] Author the 62-joint → 13-core joint map, including optional finger/face extras if
|
- [-] Author the 62-joint → 13-core joint map, including optional finger/face extras if
|
||||||
they survive within 24,000 vertices; record it in `docs/npc-model-sourcing.md`.
|
they survive within 24,000 vertices; record it in `docs/npc-model-sourcing.md`.
|
||||||
- [ ] Bake the rest pose and proportion warp to the contract hip, knee, shoulder, elbow,
|
- [ ] Bake the rest pose and proportion warp to the contract hip, knee, shoulder, elbow,
|
||||||
wrist and head positions. Measure the warp at every joint and record the silhouette
|
wrist and head positions. Measure the warp at every joint and record the silhouette
|
||||||
|
|||||||
@@ -136,6 +136,40 @@ canonical base built from `Casual_Hoodie.glb` (the most detailed body) by
|
|||||||
This is the §2 contract-bake input: the 62-joint rig is authoring-only and is mapped to the
|
This is the §2 contract-bake input: the 62-joint rig is authoring-only and is mapped to the
|
||||||
13-core contract next, not shipped as-is.
|
13-core contract next, not shipped as-is.
|
||||||
|
|
||||||
|
## 62-joint → 13-core joint map (2026-11-05)
|
||||||
|
|
||||||
|
The Quaternius hierarchy (measured from `quaternius_base.glb`):
|
||||||
|
|
||||||
|
- `Root → Body → Hips → Abdomen → Torso → Chest → Neck → Head` (spine);
|
||||||
|
- `Chest → Shoulder.L/R → UpperArm.L/R → LowerArm.L/R → Wrist.L/R → fingers` (arms);
|
||||||
|
- `Body → UpperLeg.L/R → LowerLeg.L/R` and `Root → Foot.L/R` (legs — the foot is a separate
|
||||||
|
child of Root, not of LowerLeg);
|
||||||
|
- `Root → PT.L/R` (IK pole targets, no deforming weights).
|
||||||
|
|
||||||
|
The contract is 14 bones (13 core + `Hips` root): `Hips, Spine, Neck, Head, Shoulder.L/R,
|
||||||
|
Elbow.L/R, Hand.L/R, Hip.L/R, Knee.L/R`. The map:
|
||||||
|
|
||||||
|
| Contract bone | Quaternius source | Notes |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `Hips` | `Hips` | `Root` + `Body` collapse into `Hips` |
|
||||||
|
| `Spine` | `Abdomen`, `Torso`, `Chest` | three collapse into one |
|
||||||
|
| `Neck` | `Neck` | |
|
||||||
|
| `Head` | `Head` | |
|
||||||
|
| `Shoulder.L/R` | `UpperArm.L/R` | the collar `Shoulder.L/R` collapses into `Spine` |
|
||||||
|
| `Elbow.L/R` | `LowerArm.L/R` | |
|
||||||
|
| `Hand.L/R` | `Wrist.L/R` | |
|
||||||
|
| `Hip.L/R` | `UpperLeg.L/R` | |
|
||||||
|
| `Knee.L/R` | `LowerLeg.L/R` | |
|
||||||
|
|
||||||
|
Optional extras (allowed by the contract; kept if they survive within 24,000 vertices):
|
||||||
|
|
||||||
|
- the 30 finger bones (`Thumb×3, Index×4, Middle×4, Ring×4, Pinky×4` × L/R) → optional finger
|
||||||
|
bones;
|
||||||
|
- `Foot.L/R` → optional toe bones.
|
||||||
|
|
||||||
|
Dropped (never shipped): `PT.L/R` (pole targets carry no deforming weights), and the
|
||||||
|
`Root`/`Body`/collar-`Shoulder` collapse bones above.
|
||||||
|
|
||||||
## Contract mismatch
|
## Contract mismatch
|
||||||
|
|
||||||
The expensive part is the rig and proportions, not the mesh. The source has a
|
The expensive part is the rig and proportions, not the mesh. The source has a
|
||||||
|
|||||||
Reference in new issue
Block a user