Skip to content

Anim: Slice C — Node transform animation (non-skinned, scene-node TRS tracks) #520

Description

@fernandotonon

Parent epic: #517

Goal

Animate any scene node's transform over time — position, rotation, scale — independent of any skeleton. Useful for props, doors, simple machinery, animated lights (#482), animated cameras, and basically anything that doesn't need bones.

Scope

  • NodeAnimationManager singleton wraps Ogre::NodeAnimationTrack. Per-scene timeline since multiple nodes can animate simultaneously.
  • Inspector "Node Animation" section under Animation Mode for the selected scene node:
    • Add clip (named, with duration).
    • Set keyframe (Auto-key toggle reuses the existing keyframe pattern from Phase 5).
    • List of TRS tracks; toggle per-channel (e.g. only animate position).
  • Dope sheet: node-transform tracks appear as TRS rows alongside bone rows.
  • Curve editor: identical to bone TRS curves — same editing model.
  • Playback: integrates with AnimationControlController and the global timeline.
  • Multiple clips per node: switchable like skeleton clips; named.
  • Round-trip: glTF (via existing scene exporter) supports node animation natively — extend the exporter to write it. FBX likewise.
  • CLI: qtmesh nodeanim scene.gltf --list [--json], qtmesh nodeanim scene.gltf --add <node>:position --keyframes "0:0,0,0;1:5,0,0" -o out.gltf.
  • MCP: add_node_animation_clip, set_node_keyframe, list_node_animations.

Acceptance Criteria

  • User selects a non-skinned scene node, creates a clip, and authors a position keyframe at t=0 and t=1, plays it back smoothly.
  • Rotation channels use quaternions internally and slerp correctly (no gimbal-lock surprises in the curve editor).
  • Multiple animated nodes play back simultaneously.
  • glTF and FBX round-trip preserves node animation clips.
  • Curve editor / dope sheet display and edit node TRS tracks identically to bone tracks.
  • All operations are undoable.
  • Sentry breadcrumb scene.anim.node.* recorded.

Effort

~8 days.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    animationAnimation systems: skeletal, morph, pose, VAT, alembic, proceduralenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions