Files
animation/hand-poses/README.md
T
jeremy 9ac741302e feat(hand-poses): canonical hand-pose library, pre-ship staging for ariki-game
Four Kevin-harvested poses (flat/relaxed/fist/grip) as glTF node-local quats
on the canonical Quaternius skeleton. pose_flat shipped to the runtime
HandPoseLayer 2026-08-17 and verified in the dance bed; fist/grip staged,
blocked on the Lena finger-weight repair.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 14:53:20 -07:00

39 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hand poses — pre-ship staging for ariki-game
Canonical hand-pose library. Poses live here first; when a pose is adopted for the
game it is **copied** to `ariki-game/assets/quaternius/hand-poses/` (keep the two
byte-identical — the runtime `HandPoseLayer` reads the game copy).
## Format
`{"bones": {"<bone_name>": [x, y, z, w], ...}}` — glTF node-local quaternions on the
**canonical Quaternius skeleton**, which is exactly Godot bone-pose space for these
bodies. Apply directly:
```csharp
skeleton.SetBonePoseRotation(skeleton.FindBone(name), new Quaternion(x, y, z, w));
```
40 bones per pose, including `*_04_leaf_*` tip bones. Some bodies lack the leaf
bones — **skip bones `FindBone` returns -1 for**, never error. On non-canonical rigs
(Mako) poses must be applied rest-relative; the runtime layer simply excludes those
bodies instead.
## Poses
| File | Source (Kevin packs) | Runtime status |
|---|---|---|
| `pose_flat.json` | harvested flat hand | **SHIPPED to layer 2026-08-17** — verified in the dance bed on exp01 |
| `pose_relaxed.json` | `HandWave01` f0 | staged |
| `pose_fist.json` | `AttackPunch01_R/L` f7, merged | blocked on Lena finger-weight repair (fist/grip shred on exp01exp04) |
| `pose_grip.json` | `CombatIdle1H01` f0, both hands | blocked, same repair |
## Verification (before shipping a pose)
- `tools/handpose_bake_preview.py body.glb pose.json out.glb` — bake into rest rotations.
- `tools/skin_displacement_check.py posed.glb original.glb` — Godot-exact LBS travel;
cm-scale = sane, m-scale = broken. **Blind to fin tearing** — pair it with the
edge-stretch check (`tools/edge_stretch.py`).
- `tools/handpose_skin_to_obj.py` + `tools/handpose_render_objs.py` — the only honest
visual check. Never judge by importing a baked-pose GLB into Blender (false shards).