vvvv offers different approaches to animate objects in interactive environments.
In many cases, it's not enough to just place static keyframes on a timeline and let the playhead do the job. The animation may need to react to actions or events coming from sensors, networks, input devices or beat-detectors. So in these cases the direction of movement needs to change spontaneously and you often want the transition to the new movement to occur as smoothly as possible. Time- and frame-based approaches can do this trick.
Still, often you also want to timeline some behavior and even combine the different techniques.
So here are the three basic approaches:
Time-based vs. frame-based approaches:
- most time-based filters are parameterized in a way that they animate towards a target point within a specified certain time. The target can be changed at any point in time.
- the animation's speed is independent of the framerate.
- typically you think about events and reaction to those events at the current moment, not so much about reaching a target in the future.
- the main idea is to change the value each frame just a bit
- the animation's speed depends on the framerate and extra care should be taken to avoid it.
Interested in particle systems?
Newton (Animation) - accelerates & decelerates
DeNiro (Animation) - accelerates, drives with constant speed, decelerates (just like a taxi driver)
...and many more, see the Animation category.
When there must be a transition between a starting point (A) and a target point (B) and the animation of the value depends only on time, then the nodes from the Animation category do the tweening for you.
These nodes are building a function curve to animate from A to B and sample this curve as the time goes (independent from the framerate), returning a new value every frame.
If point B changes during the animation, the node builds a new curve and smoothly animates to the new target.
If you just want to smoothen (filter) input values, besides Damper (Value) or Newton (Value) there is also OneEuroFilter (Animation) worth checking out.
to built up your loops:
to accumulate values over time or get changes between frames:
to measure time itself:
nodes that are frame-based implementations of some algorithm:
ADSR (Value Framebased)
Wanderer (Animation 2d)
Wanderer (Animation 3d)
Scenario: an object shall react to events by applying forces.
There are different famous examples of this way of doing animations:
- Physics engines, like Box2D or Bullet (included in DX11).
But you also can do your own frame-based animation, simply by patching.
The basic idea here is that the current value of the animation is simply calculated based upon the value of the last frame and tweaked a bit in a certain way. See more about Loops.
When doing this naively, higher frame rates will result in faster animations. To avoid that, here is a simple trick:
As a result your animation will be framerate independent.
If you have static predefined animations, the Timeliner is the easy way to animate properties in time. Check this dedicated page on how to use it.
The Timeliner has an Automata built in. You can define states (and animations for them) then jump between these states upon the arrival of the events. Every event gets its own input pin.
Thirdparty OSC Timelines
If the above don't suffice your needs, try one of these third party timelines that can talk to vvvv via OSC:
- Duration - Timeline for creative code
- VEZÉR - Timeline based MIDI/OSC/DMX sequencer for audiovisual artists
- IanniX - A graphical open-source sequencer for digital art
- OSCSeq - Open Sound Control recording and playback
- KluppeTimeLine - KluppeTimeLine is a graphical, animated score system
- ossia score - A free and open-source intermedia sequencer
- KuStudio is an open source OSC editor, recorder and player, aimed to create a timeline on an audiotrack
- You can use the Timeliner to define some crucial states of the values in time and let the Time-based Nodes do the job to smoothen the transitions.
- The other way around: you can have several nicely animated timelines (or several animation states on one timeline) and trigger them when a certain condition is met. This condition can depend on a time- or frame-based animation.