9ac741302e
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>
39 lines
1.8 KiB
Markdown
39 lines
1.8 KiB
Markdown
# 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 exp01–exp04) |
|
||
| `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).
|