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>
1.8 KiB
1.8 KiB
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:
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).