feat(weapons): scale the gun to the arm, and close the hands around it
The hold was wrong on every character in three independent ways, all of them a constant standing where a measurement belonged. MOUNT. set_weapon seated the weapon with rotation_degrees = (0, 90, -90). A bone attachment is expressed in the BONE's axes and no two rigs agree on those, so one constant mounted the gun differently on every model. It never needed to be right — the pose layer aims by rotating the wrist until the weapon's forward lies on the aim line, so the identity means "forward is the hand bone's -Z", true on any rig, and the wrist absorbs the roll. SIZE. The set is modelled at real-world scale; an M4 is 0.84 m butt to muzzle and these characters have 0.47 m arms against an adult 0.52. That put the handguard 0.66 m from the support shoulder, 0.2 m past reach, so the support hand was slid back down the weapon until it fitted — on Taila from an authored 0.35 m to 0.083 m, which puts both fists together at the grip. Two hands on a pistol, not a rifle. Fixed by solving the support arm's triangle rather than picking a factor: its hand must reach stock+fore ahead of the pocket from a shoulder half a shoulder-width off the axis, so scale the gun to the largest that keeps the handguard inside that reach. Taila and Kiyoko now come out at their own scales (0.217 and 0.213 m of hand separation) with the support hand at its FULL authored handguard distance and the slide-back loop never firing. The loop also has a floor now: a straight support arm beats no handguard hold. FINGERS. Nothing posed them — every hand was flat and open, which is the loudest possible tell that a character is not holding anything. They close now, about an axis derived from each hand's own anatomy in the rest pose: along = wrist to middle knuckle, palm = middle knuckle to thumb tip (the thumb opposes the fingers, so it marks the palm side by construction), curl = along x palm. The trigger finger gets a much shallower curl than the rest, because it lies along the trigger. Finger bones resolve by ROLE across all three naming families met so far — Rigify DEF-f_index.01.L, VRoid J_Bip_L_Index1, Blender IndexFinger1_L — ordered by depth below the hand rather than by the number in the name, which is not consistent between them. Verified by render on Taila and by measurement on Kiyoko: stock at the shoulder, trigger hand on the grip, support hand out on the handguard, fingers wrapped, arms not crossing. Smoke 0 failures. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c8b0337aa7
commit
682597a0d2
@@ -13,20 +13,72 @@
|
||||
],
|
||||
"shin.R": "J_Bip_R_LowerLeg",
|
||||
"shin.L": "J_Bip_L_LowerLeg",
|
||||
"thigh.R": "J_Bip_R_UpperLeg",
|
||||
"thigh.L": "J_Bip_L_UpperLeg",
|
||||
"shoulder.L": "J_Bip_L_Shoulder",
|
||||
"thigh.R": "J_Bip_R_UpperLeg",
|
||||
"shoulder.R": "J_Bip_R_Shoulder",
|
||||
"forearm.R": "J_Bip_R_LowerArm",
|
||||
"shoulder.L": "J_Bip_L_Shoulder",
|
||||
"forearm.L": "J_Bip_L_LowerArm",
|
||||
"upper_arm.L": "J_Bip_L_UpperArm",
|
||||
"forearm.R": "J_Bip_R_LowerArm",
|
||||
"upper_arm.R": "J_Bip_R_UpperArm",
|
||||
"toe.L": "J_Bip_L_ToeBase",
|
||||
"upper_arm.L": "J_Bip_L_UpperArm",
|
||||
"toe.R": "J_Bip_R_ToeBase",
|
||||
"toe.L": "J_Bip_L_ToeBase",
|
||||
"foot.L": "J_Bip_L_Foot",
|
||||
"foot.R": "J_Bip_R_Foot",
|
||||
"hand.L": "J_Bip_L_Hand",
|
||||
"hand.R": "J_Bip_R_Hand"
|
||||
"hand.R": "J_Bip_R_Hand",
|
||||
"hand.L": "J_Bip_L_Hand"
|
||||
},
|
||||
"fingers": {
|
||||
"thumb.L": [
|
||||
"J_Bip_L_Thumb1",
|
||||
"J_Bip_L_Thumb2",
|
||||
"J_Bip_L_Thumb3"
|
||||
],
|
||||
"index.L": [
|
||||
"J_Bip_L_Index1",
|
||||
"J_Bip_L_Index2",
|
||||
"J_Bip_L_Index3"
|
||||
],
|
||||
"middle.L": [
|
||||
"J_Bip_L_Middle1",
|
||||
"J_Bip_L_Middle2",
|
||||
"J_Bip_L_Middle3"
|
||||
],
|
||||
"ring.L": [
|
||||
"J_Bip_L_Ring1",
|
||||
"J_Bip_L_Ring2",
|
||||
"J_Bip_L_Ring3"
|
||||
],
|
||||
"pinky.L": [
|
||||
"J_Bip_L_Little1",
|
||||
"J_Bip_L_Little2",
|
||||
"J_Bip_L_Little3"
|
||||
],
|
||||
"thumb.R": [
|
||||
"J_Bip_R_Thumb1",
|
||||
"J_Bip_R_Thumb2",
|
||||
"J_Bip_R_Thumb3"
|
||||
],
|
||||
"index.R": [
|
||||
"J_Bip_R_Index1",
|
||||
"J_Bip_R_Index2",
|
||||
"J_Bip_R_Index3"
|
||||
],
|
||||
"middle.R": [
|
||||
"J_Bip_R_Middle1",
|
||||
"J_Bip_R_Middle2",
|
||||
"J_Bip_R_Middle3"
|
||||
],
|
||||
"ring.R": [
|
||||
"J_Bip_R_Ring1",
|
||||
"J_Bip_R_Ring2",
|
||||
"J_Bip_R_Ring3"
|
||||
],
|
||||
"pinky.R": [
|
||||
"J_Bip_R_Little1",
|
||||
"J_Bip_R_Little2",
|
||||
"J_Bip_R_Little3"
|
||||
]
|
||||
},
|
||||
"chains": [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user