Skip to content

Anim: Slice E — VAT export family (skeletal, rigid-body, mesh-anim, morph) #522

Description

@fernandotonon

Parent epic: #517
Subsumes: #371 (the existing skeletal-VAT issue — design preserved, broadened into a family)

Goal

A single VAT exporter family that covers the four real-world VAT variants. One CLI/MCP surface (qtmesh vat), one inspector panel, one set of encoders and sidecar conventions — pluggable samplers per variant.

Scope

  • VATBaker as planned in Exporter: Vertex Animation Texture (VAT) — bake skeletal anim into RGB textures #371 becomes the shared scaffold (encoders RGBA8 / RGBA16 / EXR, JSON sidecar, target variants agnostic/Unity/Unreal/Godot). The four samplers plug into the same baker:

    1. Skeletal VAT — the existing Exporter: Vertex Animation Texture (VAT) — bake skeletal anim into RGB textures #371 design: step animation state, read post-skinning vertex data via entity->_getSkelAnimVertexData(). Slice 1–4 of Exporter: Vertex Animation Texture (VAT) — bake skeletal anim into RGB textures #371's plan carry over verbatim.
    2. Rigid-body VAT — one quaternion + pivot per "chunk" (e.g. each submesh or a custom chunk grouping). Useful for destruction (Houdini RBD), animated mechanical pieces. Each chunk occupies one texel per frame in a tiny texture; the runtime shader applies quat * (vertex - pivot) + pivot.
    3. Mesh-anim VAT — bakes the vertex-animation tracks from Slice B (Alembic / VAT_POSE) into VAT textures. The sampler reads from VertexAnimationManager instead of entity->_getSkelAnimVertexData().
    4. Morph VAT — bakes morph-weight-driven mesh deformation from Slice A. Sampler resolves morph weights → vertex deltas per frame.
  • Shared: encoders, JSON sidecar shape, target variants (agnostic/Unity/Unreal/Godot), CLI/MCP surfaces, QML "Bake VAT" panel, async progress, Sentry breadcrumbs.

  • CLI: qtmesh vat model.fbx --mode skeletal|rigid|mesh-anim|morph --anim Walk --fps 30 --encoding rgba8|rgba16|exr --target agnostic|unity|unreal|godot -o out/.

  • MCP: bake_vat tool with a mode parameter.

  • Sidecar JSON: extends Exporter: Vertex Animation Texture (VAT) — bake skeletal anim into RGB textures #371's schema with a mode field and mode-specific extras (chunk count + pivots for rigid; track ID for mesh-anim; target names for morph).

Acceptance Criteria

  • All four modes produce correct textures + sidecars; baked playback in a test Godot scene visually matches live playback in QtMeshEditor at RGBA16 or better.
  • Skeletal mode is bit-identical to Exporter: Vertex Animation Texture (VAT) — bake skeletal anim into RGB textures #371's outputs (regression-tested).
  • Rigid-body mode bakes a Houdini-style destruction cache (test fixture) and a shader template plays it back.
  • Mesh-anim mode bakes an Alembic cache (test fixture, depends on Slice B).
  • Morph mode bakes a facial-expression sequence (depends on Slice A).
  • One inspector "Bake VAT" panel handles all four modes with a mode picker.
  • All four targets (agnostic / Unity / Unreal / Godot) produce correct axis convention + sidecar files.
  • CLI/MCP/GUI parity.
  • Sentry breadcrumb file.export with vat_mode tag.

Effort

Total: ~25 days spread across multiple PRs. Each mode is its own PR.

Note

Closes #371 when the skeletal sub-slices land. The remaining mode samplers can each be tracked as a sub-issue of this slice if convenient.

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