0
$\begingroup$

I'm working on a complex animation with many sequential elements. Animations nodes I've found animation nodes excellent for creating animations, but that it doesn't really have a way to organize the timing of these animations. Below I describe the issue in more detail.

enter image description here

Some approaches that I have taken:

  1. Creating a "Master Delay" Custom Object property: This master delay value is added to existing delay nodes. However, I find this to be a pretty inefficient and cumbersome method because it means adding an Attribute Input and Float Math node for each existing delay node. Also, it becomes difficult to keep track of which animations I want to be affected by the master delay. Say I wanted multiple master delay properties for several "groups" of sequential animations. Then if I wanted to offset multiple master delays, I would have to add in yet more nodes to delay the master delays.

  2. Using Ojbect Transform Inputs with Parented structure: Blender certainly has a means of nesting values via constraints and parenting. We could potentially create a parented delay value system by parenting several empties to a master empty. However, I find this method also means adding lots of nodes to my trees, and means we have to come up with a system for visualizing the values of those empties' locations.

  3. Bake Animations: While this lets us move keyframes in the dopesheet/graph editor, we lose control over our node network parameters. Not interested.

I'm wondering if anyone has a different approach to this issue. Animation nodes is a very powerful tool, but without the ability to structure the timing of nodes tree, it's extremely arduous for use in longer projects where the order of the animation is important.

$\endgroup$
2
$\begingroup$

Animation Nodes already provide such nesting functionality in the Animate nodes, and you can similarly implement an equivalent functionality if you choose not to use the native Animate nodes.

An Animate node interpolates between two values for a certain duration. For instance, if the start value was 0, the end value was 5, and the duration was 20, then the output will gradually increase from 0 based on the chosen interpolation for 20 frames where it reaches 5 at the 20th frame.

But what about the frame at which the animation starts, how do we define that? Well, Animation Nodes always starts the animation at frame zero. However, the frame/time is exposed as an input in the Animate node, so what we can do is edit this input frame/time such that it becomes zero at the frame we want the animation to start at. This is easily done by subtracting the target starting frame $f_t$ from the scene or master frame $f_m$, because when the master frame becomes equal to the target frame our equation returns zero $f_m-f_t = 0$. This is what the Delay node does, it simply subtracts the input, nothing more, nothing less.

Now, the Animate node provides a Time output. This output is the input time minus the duration. Think about that for a second. It means that if the output time of an Animate node $A$ is used as the input time of another Animate node $B$, the $B$ animation will start as soon as the $A$ animation ends. Now, if I delay (by subtracting) the output time of the node $A$ by 5 frames and use it as the input time of the node $B$, then the $B$ animation will start after the $A$ animation ends by 5 frames. And so on.

So, to implement a sequence of animations, use a chain of Animate nodes where the input time of each node is the output time of the previous with a possible delay (With the first node having the master time as its input, also with a possible delay). Want to add an animation at the start of the sequence, no problem, just put this node first. So the node tree should look like this:

Node Tree

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.