Avatar: tune Roblox proportions + walk cycle from real rendered screenshots
checkpoint / checkpoint (push) Successful in 1m47s
checkpoint / checkpoint (push) Successful in 1m47s
Now that cloudbison can render (Radeon GPU via Xvfb, or llvmpipe software), added scripts/tools/screenshot_rig.gd + scenes/dev/ so a scene can be booted, run a few frames, and its rendered frame saved to PNG -- caught three things the headless smoke never could: - limbs floated detached from the torso: widened the torso and overlapped the arm/leg boxes into it, and pulled limb depth in behind the torso front so they stop z-fighting. - proportions were scrawny: reworked to Roblox R6 ratios (2-stud torso, 2-stud arms/legs, 1-stud head) with the head clearly pegged on top. - the walk swing was a 40-deg lunge: STRIDE 0.7->0.42 rad, separate 0.32 arm swing, KNEE 1.0->0.5. Reads as a walk now, not a crouch. test_level lighting was near-black on the shaded side (ambient was disabled) -- colour ambient at 0.8 + a stronger key light, so the avatar reads in-world. avatar_preview.tscn (AGP_PREVIEW_WALK=1) renders the assembled avatar walking in place for quick visual checks. Verified: avatar smoke 14/14 source + exported pack; fresh-clone boot PASS; eyeballed in rendered screenshots (game scene + walk sequence). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015jtxAiu5dAW4WxCNdGkrkJ
This commit is contained in:
@@ -10,8 +10,9 @@ extends Node
|
||||
## avatar's Skeleton3D. Bones are addressed by canonical name, so this works
|
||||
## for the local player and for snapshot-driven remote players alike.
|
||||
|
||||
const STRIDE := 0.7 ## peak hip/shoulder swing, radians
|
||||
const KNEE := 1.0 ## peak knee bend, radians
|
||||
const STRIDE := 0.42 ## peak hip swing, radians (~24 deg)
|
||||
const ARM_SWING := 0.32 ## peak shoulder swing, radians
|
||||
const KNEE := 0.5 ## peak knee bend, radians
|
||||
const CYCLE := 1.9 ## phase (radians) advanced per metre travelled
|
||||
const BLEND := 12.0 ## ease rate toward the target pose
|
||||
const MOVE_EPS := 0.35 ## m/s below which we treat the avatar as idle
|
||||
@@ -52,11 +53,12 @@ func _process(delta: float) -> void:
|
||||
|
||||
var s := sin(_phase)
|
||||
var swing := s * STRIDE * _amount
|
||||
var arm := s * ARM_SWING * _amount
|
||||
|
||||
_pitch("LeftUpperLeg", swing)
|
||||
_pitch("RightUpperLeg", -swing)
|
||||
_pitch("LeftUpperArm", -swing)
|
||||
_pitch("RightUpperArm", swing)
|
||||
_pitch("LeftUpperArm", -arm)
|
||||
_pitch("RightUpperArm", arm)
|
||||
# Knee folds only while that leg is swinging back (negative pitch phase).
|
||||
_pitch("LeftLowerLeg", maxf(0.0, -s) * KNEE * _amount)
|
||||
_pitch("RightLowerLeg", maxf(0.0, s) * KNEE * _amount)
|
||||
|
||||
Reference in New Issue
Block a user