Files
stickman/RIGGING.md
T
ryan 273090993e feat: Implement facing profiles and bend direction toggles in test harness
- Added functionality for skeleton IK bone switches, allowing users to dynamically change the bend direction of joints via a context menu.
- Introduced facing profiles (LEFT, RIGHT, FORWARD) that modify the bend direction of limbs based on the selected profile.
- Implemented body part z-ordering based on the facing profile, ensuring correct rendering order of limbs relative to the torso.
- Added a coordinates display panel that shows the position and rotation of the Skeleton2D and its bones, as well as IK target positions.
- Created a new script to generate a walk animation for the stickman rig, including keyframe tracks for various IK targets.
- Updated documentation to reflect the new features and their specifications.
2026-08-23 22:21:23 -04:00

5.0 KiB

Stickman Rigging

We currently have a test harness to .stk files to be loaded, and figured to be tested by moving IK guides. We need to plan and implement several new features to the rigging and the harness.

Task 1: Skeleton IK bone switches

The stickman will eventually be able to move in different 'directions', to make movement look better we need to build bone modification switches into the rig (master_rig.tscn)

Bend direction

Each IK modifier in the skeleton has a 'Flip Bend Direction' flag. This flag needs to be made available to the user's stickman figure so that the switch can be changed dynamically.

  • In the test harness, a user should be able to right click on a non-leaf joint (upper-lower limb connector) and select from a dropdown context menu 'Normal Bend' or 'Invert Bend'
  • The menu should look like the stickman editor's 'Hide Pose' vs 'Show Pose' item. When the normal bend is currently on, the menu will show invert bend and also the other way around.

Rig bend direction profiles

Eventually, the stickman will be able to face different directions. There needs to be a selectable profile that can be set by the user. Each profile changes the 'flip bend direction' on the rig.

Left

The rig if 'facing' left, it will have the following bend profiles for these bones

  • Left Arm (Upper/Lower Left Arm joint): Flip Bend Direction - off
  • Right Arm (Upper/Lower Right Arm joint): Flip Bend Direction - off
  • Left Leg (Upper/Lower Left Leg joint): Flip Bend Direction - on
  • Right Leg (Upper/Lower Right Leg joint): Flip Bend Direction - on

Right

The rig if 'facing' right, it will have the following bend profiles for these bones

  • Left Arm (Upper/Lower Left Arm joint): Flip Bend Direction - on
  • Right Arm (Upper/Lower Right Arm joint): Flip Bend Direction - on
  • Left Leg (Upper/Lower Left Leg joint): Flip Bend Direction - off
  • Right Leg (Upper/Lower Right Leg joint): Flip Bend Direction - off

Forward

The rig is looking 'at the user'

  • Left Arm (Upper/Lower Left Arm joint): Flip Bend Direction - off
  • Right Arm (Upper/Lower Right Arm joint): Flip Bend Direction - on
  • Left Leg (Upper/Lower Left Leg joint): Flip Bend Direction - on
  • Right Leg (Upper/Lower Right Leg joint): Flip Bend Direction - off

The harness should have a control to set the direction profile. Maybe we should consider a menubar (Like the stickman editor) If a profile is selected, just set the flags corresponding to the profile. The user will still be free to change the bend direction by right clicking and changing them manually. Changing the profile WILL change the context menu item for each individual joint. Whether the context menu shows 'Normal' or 'Invert' bend depends on the current flag setting on that bone joint.

Task 2: Body part z-order

Implemented (Phase 9 Task 2) — see docs/phase9_task2_zorder_spec.md; the harness reorders the rig's Body/* children from the Facing profile (test harness top-bar "Facing" menu).

When the stickman is facing certain directions, body parts need to be drawn in a certain order:

  1. When 'facing' left, the left lower/upper arm and lower/upper leg need to be drawn 'behind' the torso, while others in front
  2. When 'facing' right, the right lower/upper arm and lower/upper leg need to be drawn 'behind' the torso, while others in front
  3. When 'facing' forward, the legs and arms should be drawn in front of the torso.
  4. On the far (behind-torso) side the arm draws behind the leg; on the near (in-front) side the arm draws in front of the leg.
  5. In all cases, the head should be drawn in 'front' of the torso.

Task 3: Coordinates display

Implemented (Phase 9 Task 3) — see docs/phase9_task3_coords_spec.md; the harness adds a "Show Coords" checkbox (top bar, default ON) and a code-built top-right readout panel (_coords_panel + monospace _coords_label) showing, per frame, the Skeleton2D position and rotation, all 10 bone positions and rotations, and the 6 IK target positions (world-space values, rotation in degrees). "No rig loaded" when no rig is spawned.

The harness should have a display that can be shown or hidden that will display the following information:

  1. Skeleton2D position and rotation
  2. Bone positions and rotations
  • Torso
  • Head
  • LeftUpperArm
  • LeftLowerArm
  • RightUpperArm
  • RightLowerArm
  • LeftUpperLeg
  • LeftLowerLeg
  • RightUpperLeg
  • RightLowerLeg
  1. IK target positions
  • Head
  • Torso
  • Right_Hand
  • Left_Hand
  • Right_Leg
  • Left_Leg

The display should be easy to read to the right side of the screen. There should be a checkmark display like 'show ik bones' to show and hide the coordinate display.

Task 4: Refactor facing direction / bone bend

We need to have facing direction and bone bend to be a part of the master_rig.tscn. This rig will be used for instances of stickmen which will be able to face different directions / have different bone bending at a time. So rather than keeping that data in the harness, we need it in the master rig. These should probably be exported controls too so that they can easily be accessed.