Nicolas Priniotakis has written a monster review of the freely available Animation Nodes Addon and finds it seriously powerful and addictive.
Thanks for such a wonderfully in-depth article Nicolas, it's the longest article on BlenderNation EVER!
For a long time the exclusive domain of pythonists, Parametric Animation is now accessible to anyone in the form of a sophisticated and free node system: Animation Nodes.
The name of the addon itself says a lot about its author: humility and rigor. Jacques Lucke is also known for Sniper and more recently Autocompletion addons. Since last september, Jacques shows great skills in orchestrating the development of this plugin. A remarkable confidence for someone who (I forgot to mention) isn't even 18 !
Animation Nodes is still in beta phase but after 6 months of intense activity on BlenderArtists, the addon reached stability and robustness. I think it's time to see what it has to offer and - spoiler alert - how it will change your life.
Parametric animation for Blender
What is parametric animation? As opposed to a keyframed timeline, it is a system. Put simply, think of a network of nodes that define the coordinates of objects in space and time. Let's consider a simple and concrete example:
I want to drive the motion of a cube using the altitude of an empty. Like this:
Without the addon, we would probably use a driver to create the behavior. Thanks to Animation Nodes, the process can be faster and also very visual. Besides, it can be enhanced and improved by a whole array of operators :
The plugin presents itself as a new section in the node editor. Its shelf contain more than 100 nodes dedicated to several aspects of objects and values manipulation.
The underlying principle in the use of the addon can be summarized in the following three key words: Matrix, vector, (x,y,z) values.
By breaking down a matrix, we obtain three vectors (location, rotation and scale). Each of these being the composition of three values: x, y and z. See? Nothing really new here. Yet, it is the only thing one needs to understand in order to begin using the addon.
In practice, what can I expect to do with Animation Nodes ?
- Animate any kind of object (meshes, curves, lights, bones, metaballs...) and values
- Animate vertices and polygons
- Animate material nodes
- Manipulate text data objects (at last!)
- Animate a lot of things at the same time
- Create loops and nested loops animations
- Get an easy access to sound level/frequency
- Play with custom interpolations
- Program complex things without actually coding
- and more, I guess.
To what extent ?
Hard to be exhaustive here, this addon is very versatile. Here's what I could think of:
As already mentioned, a parametric animation system allows you to connect (literally) object attributes and parameters. By doing so, the plugin can be used to set up constraints and drivers in a new empirical and visual way. Complex mechanical rigs are easier to achieve and manipulate using a node tree that centralizes everything on a board.
Motion design takes also a major step forward and catch up with commercial packages. Cinema4D for instance, already has a similar system (Xpresso) and a collection of dedicated tools (Mograph). Even if there is still space for improvement, Animation Node provides Blender users a system that is not ashamed to face competition. In many respects, I found Jacques' nodes to be most thoughtful and consistent. Probably because he aims, from the early stage of the conception, to provide a strictly generic set of tools as opposed to a pre-made collection of effects. Nonetheless, many nodes provide access to unprecedented settings. Many of them were requested by the community of beta-testers. Some good ideas from here and there, however, could be integrated and I cross my fingers that Jacques can find motivation, time and energy to continue this work.
Many applications which would have implied python programming are now doable directly with the addon.
In any case, I consider Animation Nodes as an excellent introduction to programming. A direct gateway to Python is also available, in the system tab (script node). It allows you to make simple python scripts using directly the values and objects you plug into sockets (in and out). In other terms, it provides a realtime plug and play programming interface.The fact that your script turns itself into a real node is hugely convenient.
Similarly, why not consider touching domains such as home automation and robotics? Even if no I/O node has been made yet (the script node is all you need), it is easy to think of a connection with a microcontroller, taking benefits of the node editor's GUI to manage robotic equipments. I have experienced a few things in this area (Arduino and leap motion) and I must say that the visual comfort and easiness to create a network of connections will now revolutionize my practice.
Among all the crazy ideas found on the thread, the insanity award goes to Leon Cheung who built a functional video subtitler using Animation nodes. The screen copy of his Kardashian style node tree left me speechless! Respect.
Be ready to spend a certain amount of time exploring the 100+ nodes, but remember that every single node unlocks a handful of new possibilities for you.
If some nodes can be tricky to understand and use, the color of the sockets will always tells you what to plug-in. Orange for a matrix, green for a vertice, light blue for a float number, dark blue for an integer, and so on. Also, the addon is very free about its sockets. Plug an integer in place of a float number and a conversion node will automatically be inserted. Handy!
As an aside, let me say a few words about the portability of our node systems. If you plan to often use the same group of nodes, you may be interested in coding some of your own. Jacques wrote a small tutorial about it and with a very minimal knowledge of python, the process is very smooth and fast. In this example, I made a homespun node out of a complex tree. This node is now in my shelf, ready to use.
Of course, it's always possible to append a node tree from one project to another. In this case, no need of python and you can create a library of trees inside a simple .blend file.
My Favorite nodes, what they do and (briefly) how to use them
Here's a selection of the nodes I found most interesting. For each of them you will find a short description and an example of what can be done with it. It's not to take as a tutorial though. Just think of it as an introduction to the spirit of Animation Nodes.
Probably the most important node. Typically at the end of the chain, it will give an object its new location - rotation and/or scale value. This is a very simple node, very well done (sockets appear on the fly regarding the selection of values we want to play with). Definitely the first node to drop onto the editor.
Ok, these nodes are not very easy to get. They work just fine but their usage is a bit disconcerting. The loop will basically iterate through a list of things (object, numbers, texts, vertices...). I haven't explored yet all its subtleties, but loops are required to move a big amount of objects. In this example a loop node goes over a list of strings and objects.
Object Attribute Output Node
This node gives you - virtually - access to any object’s property, even modifiers and constraints. This is, in my opinion, one of the most valuable nodes. Let's take a simple example and see how to use it. I have a cube (a) with an array modifier. I want the number of duplications to be driven by the position of another cube (b). The farthest b goes along the x axis, the more a is duplicated, right? Here's is what we got:
See the Object Attribute Output Node? In the field, you just have to paste the data-path of the value you want to control. Now instead of driving your data with a single object, you can do it with whatever you bake out of your imagination. Sometimes, the node needs to be fed with something else than numbers, like booleans (for checkboxes) or texts. For booleans, just use a Integer node with 0 for False and 1 for True. For texts, use the string node.
How about another example?
I want to control the apparition/disappearance of an object. First thing to do is to give it a material. It will be whatever you want, mixed with a transparency node, at the end of the chain. Back in the addon, we fire up the material node, point to the last mix node and voilà! The visibility of the object is ready to be driven by anything you like.
For structural reasons, this node can't give you access to shapekeys. These aren't stored inside individual objects data. But a few months ago I did a very rough but working prototype and Semaphore from BlenderArtist is working on a full integration of shapekeys in Animation Nodes. So I guess, it's just a matter of time before it can be integrated to the trunk.
This node is a swiss knife, tailored to suit the needs of the beta-testers. Its incredible versatility makes it one of the most useful node ever written on earth. It can be used for simple operations but can also perform complex algorithms and deal with an infinity of dynamic variables.
Any kind of entry can be plugged to the node. You are asked to name every one of them, so that they can be called from within the expression field. For instance, I want to add up the first three entries (a, b, c) and divide the result by the fourth one (d). Once everything is connected, my expression would be: ( a + b + c ) / d. The result will be provided via the output socket as a float number.
I'd like to take another example to unveil the power of the node. Let's say you need to create a blinking effect from one color to another. Obviously, you won't find any "alternatively pick something" node. Nonetheless, tons of differents solutions can be found here. Let's have a try with our expression node and a basic cosinus function (the one that oscillates between -1 and 1). First, we will plug a time info node so to get the function running on it. Then, we plug the two colors (a and b) we want to alternate. When the function returns something below 0, we will pick our first color. Otherwise we pick the second. And that's it. The syntax (in python) would be: a if (math.cos(time) < 0 ) else b
Need more control over the frequency of the blink? Bring one more variable to the node:
Update : A lot of effort to little avail, uh ? A new "Boolean"category made its appearance during the night. The same effect can now be obtained using a simple compare node. Something else ? Just ask and Jacques makes it happen !
The group set of nodes
These are a workaround to counter the fact that default group feature is not available via pynode (the library that makes the node editor available through python). It works quite well and allows you to nest loops, which is insane ! And cool.
Here's a screen copy of the "group call" node featuring all the parameters that came into play to make the top image of this review. You can download my .blend file and use it as a template.
You'll find that, even if keyframing these values is possible, the keyframes won't show in either the dope sheet or the curve editor. This is another limitation of pynode and any custom node tree is affected. Let's hope for a quick fix ! As a convenient solution, you can connect the values you want to drive with empties (location, for instance) and keyframe them instead. Same result and great flexibility.
A cute and very cool one. It returns a progression of random values based on the perlin algorithm, which, to make it short, can be seen as a noise smoothed and carried by a sinus wave. It produces a very natural and fun randomness. Think of the subtle instability in the way you hold your 3rd glass of scotch to get an idea of the effect.
Set Keyframe Node
If you decide to use the services of a renderfarm, this one is for you. As the addon won't be installed on the farm's machines, you need to bake your animations. The "keyframe" node is designed for this purpose, and much more! First of all, its implementation is easy: it doesn't necessarily need to be connected to anything. Just having it in a corner of your tree will do the job. You define which object is concerned (can be a group of objects) and which property will be keyframed (the basic loc, rot, scale or any data-path value). All the parameters, including the enable/disable checkbox can be driven by other nodes.
Jacques invents the Keyframe-art.
The mesh and polygon set of nodes
These are to put in the "experimental" category as it said no to be as stable as the others. It's a great fun to use and play with, though. I had a fantastic time fooling around with beautiful math functions. In this example, all the vertices of an object pass through an expression node.
Another example using a sphere as an effector.
The learning curve can seem steep. That is not necessarily true. The addon works in real-time, therefore playing around with nodes is surprisingly easy. Very quickly, you end up with complex animation made of dozen of interconnected things. Experimentation and sandboxing is - in my opinion - an essential part of the learning process.
On the other hand, digging directly into an already working node setup is scary for the novice and difficult to understand. Thus, the important question is not whether it is hard to learn but how you intend to learn. Beginning simple and slow, you'll be ready to go in no time. Trying to figure out how those complex demos actually work takes time or worst, it could discourage you from enjoying!
Jacques and the community have begun to compile and centralize some learning material. An online manual is being drafted and already describes the most useful nodes. It's concise and clear. At the moment, no demo files are provided. The project is however on its way.
Meanwhile, Jacques Luke created a serie of tutorials to explain the basics.
Finally, the original thread on the forum is still hot and running. The author and users are very willing to answer novices questions and take up challenges. Besides, the response time is often under an hour.
From afar, the addon may look tricky but as it blends seamlessly into the node editor, you will find yourself standing on the firm ground of a familiar interface. Everything is where it is suppose to be. Suzanne is cooking in the kitchen, the default cube is playing in the yard: you are home!
Animation Nodes is one of many examples illustrating the dynamic of community driven projects. The plugin is still evolving in the vivarium of the forum and everyday brings its fresh share of ideas, nodes and fixes. Remaining true to the spirit of Blender, open source and free, the plugin gives everybody the same tool to work with and push Blender a step forward. For that, I'd like to thank Jacques. As soon as he gets his 18nd birthday, hopefully many of us will make donations to reward his dedication.
So Jacques, tell us about the most fascinating things you learnt in the process:
What fascinated me the most was that some people took my code and extended it. I never had something like this before. So collaboration on github was new to me. Also I learned that I nearly never should try to guess what other people do with your program. It happened quite often that someone used a node in a context I never could have thought of.
And of course you get a much deeper understanding of how Blender works internally. This is absolutely necessary for future addons.
Also the development process was great. In the morning I got an idea, then I developed the corresponding nodes, then I made a video and got lots of feedback. All that on one day. Its like a positive feedback loop. I have to admit that this development cycle isn't ideal for stable releases, but to do awesome stuff and breaking the boundaries it was perfect.
I am everything but a salesman and a good review needs objectivity. So I did my best to find a weak point. Yesterday, I made a breakthrough and found that custom properties were unreachable from the nodes. Ah! But in the evening of the very same day, the attribute nodes were updated and CP are no longer an issue. So, I hate to sound all flowery but I have nothing left to hold against this addon. It simply rocks!
Nonetheless, I would deeply encourage you NOT to install it. If you open this pandora box, you are stuck! No time to waste outside with family or anything that is not made of nodes! True story…
- Author: Jacques Lucke
- Product page: BlenderArtists
- Price: Free
- Created: September 29, 2014
- Software Version: Blender 2.7x
Do NOT install this plugin - you'll be hooked :)
- Ease of use
- Value for money