Loading...
Loading...
Use when animating characters or objects in Blender through Python, a bouncing ball, walk or run cycle, jump, acting shot, lip sync, eye darts or facial animation, blocking in stepped keys, splining, polish, timing and spacing, arcs, overlap, squash and stretch, graph editor handles, slotted actions or NLA layers, staging a playblast, or when animation looks floaty, stiff, slides, pops, chatters, the subject is too small in frame, or a knee pops and needs an expert review.
npx skill4agent add scenario-labs/skills scenario-blender-animationnpx skills add scenario-labs/skills --skill <name>scripts/bx_anim.pybouncing_ballbx_review.playblast| Input | Why it changes the plan | Default when silent |
|---|---|---|
| Medium, fps | Film 24 (Hjalti); games often 30 with fixed hit or release frames (Picaut) | 24 fps |
| Camera | Locked acting shot: judge only through the camera (Rik). Moving, re-framable or gameplay camera: poses work from every direction (Leo Silly-Pelissier, Picaut) | locked camera |
| Style | Stepped on twos and never splined (Sprite Fright shots, Rik) vs splined; stylized vs naturalistic (Leo) | splined, stylized |
| Rig | Control names, IK/FK, rotation modes. Generated Rigify [verified]: | FK arms when arcs matter, IK when hands touch things (Joey, Tony Garcia) |
| Named object | A brief that names the animated object expects every channel on it | one object, |
| Audio, transcript | Beats, accents, phoneme preparation | beats from the brief |
| Reference | Timing and beats, never a trace (Hjalti) | none: write a beat list |
| Budget | Rik: about 3 s a week in big studios, 5 to 6 s on his acting shot; Flow: 2 s per animator per day | state what the budget buys |
audio_envelopeaccent_framesstaging_report(subject, frames)playblast_lighting(key_dir=(0, 0, 1))floor_slabrotation_textureflagsshadow_framesworld_posekey_pose(..., keytype='EXTREME')onion_skin(frames=keys, spread=...)balance_reportbreakdownfactorsease_inbetweensblocking_to_spline(rig, body_bones, transition=3, interpolate={...})interpolatehold_driftovershootsmotion_reportballistic_fitg_ratiolimb_extensionoffset_keysto_camera(..., res=(w, h))motion_report(dims=2)transitionsfoot_sliplowest_pointrotation_flipsfix_rotation_flipslimb_extensionbouncing_ball(obj=ANIM_ball, first_apex=-3, fit=False, ...)first_apexstarttests/code/blender-animation/test_rigify_jump.py| Item | Value | Source |
|---|---|---|
| Snappy pose change | 2 to 3 frames after the hold | Rik |
| Aggressive change | 4 frames instead of 8 | Alex |
| Hold to read an idea | 6 frames | Alex |
| Settle | 1 to 2 frames, 4 soft | Alex |
| Reaction after stimulus | about 6 frames | Rik |
| Eye dart / brow change | 1 to 2 / 3 to 10 frames | Rik |
| Ease rule | 80% of the remaining way per in-between (slow-in); mirror 20% | Pablo |
| Smear | 1 frame, sometimes 2 | Pablo |
| Micro-anticipation | last 1 to 2 frames before hit or release pushed to an extreme | Picaut |
| Head lag in a cycle / foot offset | 2 to 3 frames / 1 frame | Joey / Rik |
| Real gravity at 24 fps | acceleration 0.01703 m/frame^2; a quadratic fit's leading coefficient is half (-0.00852). | physics [added] |
| Subject size in frame | 12% of frame height minimum, 15% or more for a single subject | [added] E3: both runs measured 10% |
| IK leg extension | under 0.99 of full length while meant bent; above 1.0 = IK stretch | [added] |
| Pinwheel on a rolling object | roll per frame under 360 / sectors degrees | [added] wagon-wheel |
hold_driftovershootsfoot_sliplowest_pointtransitionsballistic_fitmotion_reportstaging_reportlimb_extensionrotation_flipsbalance_reportroll_aliasinggraph_image| Mistake | What it looks like | Fix |
|---|---|---|
| Whole blocking to Bezier | "floaty spaghetti" | |
| Pillar on a continuous contact | body brakes before impact | put that frame in |
| AUTO handles on a hold | hold drifts past the pose | AUTO_CLAMPED; AUTO only for a settle |
| Heel curve eased during contact | foot slides (5.8 cm per step measured) | VECTOR or zero-length FREE handles |
| Jaw open on every syllable | chattering mouth | big opens on |
| BOUNCE easing for a ball | no squash frame ever shows | |
| Squash on a parent that also aims | pattern twists on stretch frames (55 degrees measured on the old rig) | |
| Flights rounded to even frames | hops lose or gain height, gravity changes per bounce (0.98 to 1.31 measured) | whole-frame contacts, odd flights allowed, one gravity |
| Framing the whole set | subject 10% of frame, top 40% empty | move in or shorten the travel until |
| shadow hidden behind the subject (0 px) | |
| Arcs checked in normalized camera coords | false sharp turns at apexes (aspect squeezes x) | |
| Legs straight at stand or push-off | IK stretch lengthens the leg (18% in the first jump draft) | soft knees, feet breakdown after take-off, VECTOR take-off |
action.fcurvesbpy_extras.anim_utilsbx_anim.channelbagad.action_slotlayers.newpush_layerkeyframe_points.insertanim.keyframe_insertpose.breakdownpose.blend_to_neighborprev_framenext_framerender.openglscene.display.light_directionmatrix_worldview_layer.update()modifiers["X"].properties.inputs.Socket_n.valuerender.ffmpeg.audio_codec = 'AAC'references/expert-notes.mdreferences/procedures.mdreferences/critique.mdreferences/sources.md