feat(vagrant): v0.3.0 — substrate-port rig + animations + locomotion

- humanoid.rig.json rewrite: legs->root, rest.rot+rest.scl on all bones,
  Y-mirror via scl=-1 on leg_l/r/foot_l/r, locomotion-block with
  procedural footplant config
- walk.anim.json: substrate walk_fwd_lower port; track=lower; pos+scl
  channels on legs+feet
- walk_upper.anim.json (NEW): substrate walk_upper port; arm-swing
- idle.anim.json: substrate idle_upper port; pos+rot on shoulders+arms
- init.lua: walk_upper parallel-play wiring
- manifest bump v0.2->v0.3; puppet dep ^0.3.0
This commit is contained in:
Axel Meyer
2026-05-18 18:55:34 +02:00
parent 3457a7eab8
commit fa511204c2
6 changed files with 156 additions and 46 deletions

View File

@@ -1,11 +1,38 @@
{
"id": "idle",
"track": "upper",
"duration": 2.0,
"loop": true,
"keyframes": [
{ "t": 0.0, "body": {"angle": 0}, "head": {"angle": 0} },
{ "t": 1.0, "body": {"angle": 2}, "head": {"angle": -1} },
{ "t": 2.0, "body": {"angle": 0}, "head": {"angle": 0} }
]
"id": "idle",
"track": "upper",
"duration": 2.0,
"loop": true,
"keyframes": [
{
"t": 0,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": 0 },
"upper_arm_l": { "rot": -15 },
"lower_arm_l": { "rot": 10 },
"upper_arm_r": { "rot": 15 },
"lower_arm_r": { "rot": -10 },
"head": { "rot": 0 }
},
{
"t": 1,
"body": { "rot": 0 },
"shoulders": { "pos": [0, -0.5], "rot": 0 },
"upper_arm_l": { "rot": -13 },
"lower_arm_l": { "rot": 8 },
"upper_arm_r": { "rot": 13 },
"lower_arm_r": { "rot": -8 },
"head": { "rot": 0 }
},
{
"t": 2,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": 0 },
"upper_arm_l": { "rot": -15 },
"lower_arm_l": { "rot": 10 },
"upper_arm_r": { "rot": 15 },
"lower_arm_r": { "rot": -10 },
"head": { "rot": 0 }
}
]
}

View File

@@ -1,14 +1,28 @@
{
"id": "walk",
"track": "lower",
"duration": 0.6,
"loop": true,
"keyframes": [
{ "t": 0.0, "leg_l": {"angle": -20}, "leg_r": {"angle": 20},
"foot_l": {"angle": 10}, "foot_r": {"angle": -10} },
{ "t": 0.3, "leg_l": {"angle": 20}, "leg_r": {"angle": -20},
"foot_l": {"angle": -10}, "foot_r": {"angle": 10} },
{ "t": 0.6, "leg_l": {"angle": -20}, "leg_r": {"angle": 20},
"foot_l": {"angle": 10}, "foot_r": {"angle": -10} }
]
"id": "walk",
"track": "lower",
"duration": 0.8,
"loop": true,
"keyframes": [
{ "t": 0.0,
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, 0]},
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 0]}
},
{ "t": 0.2,
"leg_l": {"scl": [-1, -1]}, "leg_r": {"scl": [ 1, 1]},
"foot_l": {"pos": [-0.044, 25.47]}, "foot_r": {"pos": [0.249, 25.85]}
},
{ "t": 0.4,
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, 0]},
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 0]}
},
{ "t": 0.6,
"leg_l": {"scl": [-1, 1]}, "leg_r": {"scl": [ 1, -1]},
"foot_l": {"pos": [ 0.044, -25.47]}, "foot_r": {"pos": [-0.249, -25.85]}
},
{ "t": 0.8,
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, 0]},
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 0]}
}
]
}

View File

@@ -0,0 +1,53 @@
{
"id": "walk_upper",
"track": "upper",
"duration": 0.8,
"loop": true,
"keyframes": [
{
"t": 0,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": -10 },
"upper_arm_l": { "pos": [-18.835941314697266, -2.7534308433532715], "rot": -75, "scl": [-1, 1] },
"lower_arm_l": { "pos": [14.152748107910156, -18.200172424316406], "rot": 90, "scl": [1, -0.4] },
"upper_arm_r": { "pos": [20.023988723754883, -4.000017166137695], "rot": 5 },
"lower_arm_r": { "rot": 0 }
},
{
"t": 0.2,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": 0 },
"upper_arm_l": { "pos": [-18.835941314697266, -2.7534308433532715], "rot": -50, "scl": [-1, 1] },
"lower_arm_l": { "pos": [14.152749061584473, -18.200170516967773], "rot": 90, "scl": [1, 0] },
"upper_arm_r": { "pos": [20.023988723754883, -4.000017166137695], "rot": 50 },
"lower_arm_r": { "pos": [13.348801612854004, -17.08159637451172], "rot": 0, "scl": [1, 0] }
},
{
"t": 0.4,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": 10 },
"upper_arm_l": { "pos": [-18.83592987060547, -2.75343132019043], "rot": -5, "scl": [-1, 1] },
"lower_arm_l": { "pos": [14.152749061584473, -18.200170516967773], "rot": 0, "scl": [1, 1] },
"upper_arm_r": { "pos": [20.023984909057617, -4.000016689300537], "rot": 75 },
"lower_arm_r": { "pos": [13.34880542755127, -17.08159637451172], "rot": 90, "scl": [1, 0.4] }
},
{
"t": 0.6,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": 0 },
"upper_arm_l": { "pos": [-18.835941314697266, -2.7534308433532715], "rot": -50, "scl": [-1, 1] },
"lower_arm_l": { "pos": [14.152749061584473, -18.200170516967773], "rot": 90, "scl": [1, 0] },
"upper_arm_r": { "pos": [20.023988723754883, -4.000017166137695], "rot": 50 },
"lower_arm_r": { "pos": [13.348801612854004, -17.08159637451172], "rot": 0, "scl": [1, 0] }
},
{
"t": 0.8,
"body": { "rot": 0 },
"shoulders": { "pos": [0, 0], "rot": -10 },
"upper_arm_l": { "pos": [-18.835941314697266, -2.7534308433532715], "rot": -75, "scl": [-1, 1] },
"lower_arm_l": { "pos": [14.152748107910156, -18.200172424316406], "rot": 90, "scl": [1, -0.4] },
"upper_arm_r": { "pos": [20.023988723754883, -4.000017166137695], "rot": 5 },
"lower_arm_r": { "rot": 0 }
}
]
}