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
Effort
~12 days. Most time is on Alembic dep integration across the three target platforms.
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
-DENABLE_ALEMBIC=ON. Default ON for desktop builds; allow disabling for Docker/CLI-minimal builds since Alembic + Imath are non-trivial deps.Ogre::VertexAnimationTrackwithVAT_POSEmode (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).AnimationControlControllerso the timeline UI works for mesh-anim clips just like skeleton clips.MeshImporterExporter::importAlembic(path, ...) -> EntityHandlewith a progress signal.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).import_alembic,play_vertex_animation.Acceptance Criteria
scene.anim.vertex_anim.*recorded.Effort
~12 days. Most time is on Alembic dep integration across the three target platforms.