Skip to content

3.47.0

Choose a tag to compare

@fernandotonon fernandotonon released this 03 Oct 03:05

Procedural animation generators

Drive an animatable property from a formula instead of hand-set keyframes. A generator is layered on top of the existing animation, and you can bake it into ordinary keyframes when you're done.

Generator Parameters Typical use
Sine amplitude, frequency, phase, offset hovering, breathing, swaying
Noise amplitude, detail, octaves, seed camera shake, weapon sway, flicker
Ramp from, to, linear / smooth ease fades, slow drifts
Spring from, to, stiffness, damping overshoot and settle
Follow path points, closed, even speed, face along the path, loops patrols, fly-throughs

What it can drive: bone and node position, rotation and scale; morph-target weights; saved-pose weights; light intensity and colour; material colours and shininess.

  • Layered: generators add to the base animation. Follow path is the exception: it replaces the position, and the rotation too when it's set to face along the path.
  • Real keyframes: bone, node and morph generators are written into the actual animation track. Playback, scrubbing, the dope sheet and every exporter see the motion. A node generator creates a Generators clip, which appears in the Animations list.
  • Mute puts the original keyframes back exactly.
  • Bake turns a generator into ordinary keyframes and reports where they went. You can change a baked generator later: editing or re-enabling it un-bakes it, so you can adjust it and bake again.
  • Undo: every operation is a single undo step.
  • Saved with the asset: a <file>.generators.json file next to each export keeps generators editable after reopening, including under a new entity name.

Using it

  • GUI: Animation mode → Mode Tools → Generators. The target defaults to the selected node. For a follow path, selecting the generator shows the path in the viewport; drag its points with the Select tool (Q).
  • CLI:
    qtmesh anim hero.fbx --generator sine --target "bone:*/mixamorig:Spine/rotation.z@Idle" --amplitude 8 --frequency 0.5 -o breathing.glb
    qtmesh anim drone.glb --generator follow-path --target "node:*/position" --points "0,2,0;4,2,0;4,2,4" --orient true --bake -o patrol.glb
    qtmesh anim model.glb --list-generators [--json]
    
  • MCP: list_generators, add_generator, set_generator (parameters, mute, show_path), bake_generator, remove_generator.

The new default duration is 1 s. Set duration 0 to run until the end of the clip. See docs/ANIM_GENERATORS.md for the full guide.

Full changelog: 3.46.0...3.47.0