Skip to content

Skel: Slice G — Bone display: shapes, groups, layers, colors, hide/show, lock #561

@fernandotonon

Description

@fernandotonon

Parent epic: #554

Goal

Make complex rigs legible. Today every bone draws as an identical octahedron via SkeletonDebug. Real rigs need: per-bone shapes (custom controllers, sphere handles), groups / layers for grouping bones logically, per-bone colors, hide/show, and lock-from-selection.

Scope

  • Bone display shapes:
    • Built-in shapes: octahedron (default), sphere, cube, arrow, line, circle, ring, custom-mesh.
    • "Custom-mesh" lets the user assign any imported entity as the bone's display proxy (the standard Blender approach — common for placing nurbs-circle controllers).
    • Per-bone scale + offset + rotation for the display shape (so a sphere handle can sit at the bone's head, tail, or wherever).
    • Persist with the rig in the project file + glTF extras.
  • Bone groups / display layers:
    • Groups: arbitrary named groupings ("Face Controls", "Arm IK", "Spine"). A bone can belong to multiple groups.
    • Layers: 32 fixed layers (like Blender 2.7 armature layers — small enough to ship as a bitmask). Each bone is on one or more layers; the user toggles which layers are visible.
  • Per-bone colors: a colour swatch per bone, optionally driven by group ("Face Controls" group → all yellow). Renders into the bone display shape with a transparent overlay.
  • Hide / show:
    • Per-bone visibility toggle.
    • Per-group "isolate group" (hide all bones not in this group).
    • Per-layer visibility (the standard armature-layer UI).
  • Lock from selection: a bone marked locked can't be selected via clicking or box-select. Useful for shielding deform bones once IK controllers are set up.
  • Lock transforms per channel: optionally lock T / R / S independently. The gizmo respects locks.
  • UI: a new "Bone Display" inspector subsection with shape picker, group memberships, layer bitmask, colour swatch, lock checkboxes.
  • Extends SkeletonDebug to render bones with per-bone shapes + colours + visibility.

Acceptance Criteria

  • User can change any bone's display shape and see the new shape in the viewport.
  • Custom-mesh bone display works with an arbitrary imported mesh as the controller.
  • Groups + layers work; isolating a group hides everything else.
  • Per-bone color renders correctly.
  • Hide / show + lock-from-selection both behave correctly.
  • Per-channel transform lock makes the gizmo refuse the locked channel.
  • Project save/load + glTF extras round-trip the rig display metadata.
  • Sentry breadcrumbs scene.skel.display.*.
  • Headless-CI tests cover bone-group membership, layer bitmasks, lock evaluation.

Effort

~8 days.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestskeletonSkeleton & rigging: bones, weights, IK, constraints, envelopesui

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions