Skip to content

Anim: Slice B — Mesh / vertex animation (Alembic + Ogre VAT_POSE clips) #519

@fernandotonon

Description

@fernandotonon

Parent epic: #517

Goal

Import and play back baked vertex animation — every vertex moves over time, no skeleton. Required for cloth, sims, fluid bakes, destruction, and Alembic caches from Houdini / Blender.

Scope

  • Alembic import: vendor Alembic (BSD) behind -DENABLE_ALEMBIC=ON. Default ON for desktop builds; allow disabling for Docker/CLI-minimal builds since Alembic + Imath are non-trivial deps.
  • Ogre vertex-animation tracks: import the Alembic per-frame vertex data into Ogre::VertexAnimationTrack with VAT_POSE mode (Ogre's existing pose-blended path) or as a custom flat vertex stream when the cache is too large for pose blending. Pick per-frame based on heuristic (< 32 keyframes → poses; otherwise stream).
  • Playback: integrate with the existing AnimationControlController so the timeline UI works for mesh-anim clips just like skeleton clips.
  • Dope sheet: vertex-anim clips appear as a single "Mesh" track row that can be muted/soloed/scrubbed; per-vertex keys are not exposed (too dense).
  • Caches: if memory becomes a problem on large bakes, expose a "stream from disk" mode that keeps only N frames resident.
  • Importer surface: MeshImporterExporter::importAlembic(path, ...) -> EntityHandle with a progress signal.
  • CLI: qtmesh anim model.abc --info [--json], qtmesh convert model.abc -o model.fbx (converts vertex-anim Alembic to vertex-anim FBX, lossy if FBX target chosen).
  • MCP: import_alembic, play_vertex_animation.

Acceptance Criteria

  • A Houdini-exported Alembic cache (provided as a test fixture) imports and plays back in the viewport with the timeline scrubber.
  • Memory stays bounded on large bakes (verify on a fixture with ~1k frames and ~10k verts; no OOM, no per-frame allocations).
  • Streaming-from-disk mode works for caches that don't fit in memory.
  • Vertex-anim clips integrate with the existing animation UI (play/pause/loop/timeline).
  • Export to FBX vertex-cache works (lossy is acceptable; document the loss).
  • Headless-CI-safe tests on a small synthetic Alembic fixture.
  • Sentry breadcrumb scene.anim.vertex_anim.* recorded.

Effort

~12 days. Most time is on Alembic dep integration across the three target platforms.

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