Professional Documents
Culture Documents
Animation Nodes Manual PDF
Animation Nodes Manual PDF
Release 2.0
Jacques Lucke
1 User Guide 3
1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
i
ii
Animation Nodes Manual, Release 2.0
Contents 1
Animation Nodes Manual, Release 2.0
2 Contents
CHAPTER 1
User Guide
Installation
How to Install?
0. Uninstall any old version of Animation Nodes. Having it installed multiple times for the same version causes
conflicts.
1. Downloaded a recent build for your operating system. If no build suits you, then you might want to compile it
yourself (see developers guide) or contact a developer.
2. Open Blender (preferably the newest version)
3. Go to the User Preferences in the Addon tab.
4. Click Install from File and choose the file you downloaded.
5. Activate the add-on and you are done.
You can now find the Animation-Nodes editor in the node editor.
Important: Checkout the troubleshooting section below if you have any installation problems.
How to Uninstall?
Note: Animation Nodes must not be active in the session in which it will be removed. This is because some files
cannot be removed once they are loaded. This usually is not a problem with other addons because they don’t use
3
Animation Nodes Manual, Release 2.0
Cython.
Troubleshooting
When Animation Nodes fails to start it should show an error message. Please read it, often it already contains
information on what you can do.
The addon sometimes depends on features that are only in newer versions of Blender. So the first thing should be to
update your Blender version.
Then make sure that you actually downloaded a build for your operating system (Linux, Windows, macOS and possibly
others).
If you use Windows try to install this first.
One problem on Linux systems is that the builds don’t seem to work everywhere. We haven’t found a real solution (a
build that works everywhere) yet. Therefor we provide multiple Linux builds and you have to check which one works
for you.
Animation Nodes depends on numpy. If you downloaded unofficial Blender versions it is possible that numpy is not
included in those (the error message should tell you this). If this is the case you can either download another Blender
build (preferably an official one) or you have to install numpy manually yourself.
If you still didn’t manage to install Animation Nodes you have two options:
1. Open a new issue on Github and ask for help. Please provide the relevant data about your computer (OS, Python
version, Blender version, ...)
2. Compile Animation Nodes yourself. You can learn more about that in the developer guide.
Getting Started
Interface
Much of the interface is located in the node editor in blender while some of the interface exist in other regiones like
the 3D viewport.
Node Menu
To add a new node, you can open the Node Menu by pressing Shift+A like other node systems. The menu contains
a lot of submenus. The menu includes all nodes in AN except for passive nodes which are usually added automatically
or by searching for them, such nodes are like the Converter and Convert To Integer List node.
Node Search
The search box can be opened by pressing Ctrl-A, it enables you to quickly find and insert nodes by their names.
Some nodes have multiple search tags to make it easier to find them. Search box can find any node in AN even if they
were passive from the node menu.
Node Settings
Nodes include multiple settings types, settings that regularly changes are drawn inside nodes directly for faster work-
flow, settings that doesn’t change regularly are drawn in a custom panel in the properties menu to avoid clustering the
UI.
Settings that regularly changes are drawn inside nodes, for example:
Settings that doesn’t change regularly are drawn in a custom panel called Advanced Node Settings. The settings
inside are always for the currently active node.
Node Panel
Sockets (Inputs and Outputs) of every node can be hidden or unhidden through this panel by pressing the “eye” next
to the desired socket. Some nodes like subprograms inputs allows reordering of sockets by using the arrows. You can
also specify the name and lable of the node from this panel. Name has to be unique.
Tree Settings
The tool menu in the node editor in Animation Nodes contain settings and information regarding the nodetree itself
and not individual nodes.
Developer
Overview
Includes some information about the node tree like the execution time. The statistics button draws a table that include
information about the number and types of nodes in the node tree.
This panel includes manual execution button and the scene that the node tree belongs too.
• Edite Node labels - If enabled, a text box will appear in every node that lets you edit the label of the node. This
is helpful if you want to organize you node tree after you finish building it.
3D View
ID
Data Input
Displays the the data input nodes (like integer input) inside the panel if Show In Viewport is enabled. (See one of the
data input nodes)
Execution
Animation Nodes takes you nodes tree and convert it into code then execute that code to see the actual result of it.
You may notice that when you start using AN, a number is changing very rapidly at the top left corder of the node
editor, that number is the time it took to execute the node tree.
By default, AN execute the node tree as much as possible for the best and smoothest update of the scene. However,
this exhauste the CPU and slows down other areas in blender. It doesn’t make sense to execute the node tree even if
nothing changes in your node tree or the scene, so executing the node tree that much may not be needed.
Animation Nodes provide you with an automatic and a manual execution systems that suite you workflow. Possible
execution systems are listed below.
Automatic Execution
By default auto execution is enabled and cab be found in the auto execution panel in the tool menu.
Always
Always option is enabled by default and it does what we stated before, that is, execute the node tree as much as
possible. This option should never be used unless absolutely needed. A possible uses for it is as follows:
• A lot of variables in the scene are changing regularly and constantly assuming AN uses them. If they are just
couple of variables then triggers should be used, see below.
• When running a simulation that need to run constantly, for instance, when simulating a system using eulers
method.
Notice how AN execute (execution time changes) constantly even if nothing is changing.
If always is disabled, then you have multiple options described below.
Tree Changed
If enabled, the node tree will execute everytime the node tree changes, that is, a node is added or removed. You
probably want to enable this after you disable alwayse because it is probable that you need to execute the node tree
everytime you change something in your tree.
Notice how the tree execute when I add a new node.
Frame Changed
If enabled, the node tree will execute everytime the current frame of the scene changes. You probably want to enable
this when ever you have a node tree that depend on time.
Notice how the tree execute when ever the current frame changes.
Property Changed
If enabled, the node tree will execute everytime a property changes, that is, an input or an option of the node is changed.
You probably want to enable this after you disable alwayse because it is probable that you need to execute the node
tree everytime you change something in your tree. Notice that chaning a value in the advanced node settings won’t
necessarily execute the node tree even if this option is enabled.
Notice how the tree execute when I change a value in the node tree.
This value defines the time between each two consecutive executions.
Triggers
Triggers are basically “watchers” that are hired by you to watch for a change in some property you told them to watch.
They tell AN to execute the node tree everytime the property they watch change.
For instance, lets say I am using the location of a cube object in my node tree and I want to execute everytime the
location changes, so I simply add a trigger and tell it to watch for the location of the cube object.
There are two options:
• Object Property - An object is choosen and the property ID is defined relative to it. An example for such IDs
are: location, euler_rotation, location.x ... .
• Scene Property - The peth of the property has to be fully defined, for instance,
bpy.data.objects["Cube"].modifiers["Subsurf"].levels whic watches for the sub-
surface levels of a modifier.
Errors
During the execution of the node tree, some errors may be encountered, those errors can either be fatal or not, below
is a presentation for both.
NonFatal Error
Those errors are reported inside nodes and they does not stop execution, an example:
The barycentric node simply expect 3 vectors for the source inputs but not were given, to fix the error, just input a
vector list. When such eeror occure, the node either does nothing or return the default value of the output, since the
output is a vector in thise case, then it is initialized by the vector (0,0,0).
Fatal Errors
Fatal errors stop the execution of the whole node tree and have to be solved. Such errors occure when you try to do
something with a node that the developers didn’t put in consideration, it could laso be a bug and should be reported in
that case. An example for such error can be seen in the expression node:
The expression node has an option to Debug the expressions you write before executing them. I disabled it for the
second one and intentionally made a sytax error. The first node reported the error and didn’t stop the execution (A
non-fata error), the second node however stoped the execution and colored the node editor’s borders red to indicate a
fatal error. To fix that error you just solve the syntax error or just enable debug option.
Data
There are multiple data types in Animation Nodes, ones that mathematical like integers, floats, vectors and quaternions
and ones that represent a data structure like BVH trees, mesh data and KD trees. Most of the data types have their own
list data type. So integers have integers lists, vectors have vector lists and so on.
Copying Data
Animation Nodes automatically copy data if needed. For example, if you have a list of vectors and you input it to a
single shuffl node, the data don’t need to be copied and the original list is shuffled. If however I input it to another
shuffle node, the data has to be copied because two nodes are using it, if it wasn’t copied, then the second node will
shuffle the shuffled list and not the list itself.
Animation Nodes have an option to identify nodes that copy data, you can enable by chaning Color Mode to Needed
Copies in the developer panel.
Notice that objects are the only data that should be copied, simple data types like integers and floats are just bits and
are copied automatically when operated on. Some other data types can not be copied, but this isn’t really essential for
you to know.
Sometimes there isn’t a data type that may suite your need, so it can be stored in what is known as the generic data
type. For instance, nested lists, that is, a list of lists can not be stored in any of the available data types, so we store
them in a generic data type.
However, when using generic data types in a node, they have to be converted back to a data type AN knows, for
instance, if we have a list of float lists, getting the first list of the this generic list would return a generic data type and
not a float list, if I want to get the first float in the output list, I have to convert it to an AN float list first, this can be
done using the converter node:
Notice that I could have get the element as generic element then convert it to a float at the end, and it would have
worked just the same.
Convert Node
The converter node convert and data type to any other data type if possible, the node automatically detect input and
outputs, so if you want it to stope changing types, you have to chekc the lock button and choose the tpe mmanually by
pressing on the only button there.
Vectorization
Some nodes in AN are said to be “vectorized”. Vectorization is the ability for the node to operate on lists just as it
can operate on individual values. Vectorization can either be element wise, that is, two equal lists can be operated
on element by element or it can be streamed, that is, a value is reapeated to match the length of a list and then the
operation is done element by element.
The first math nodes is streamed, it simply multiply every value in the float list by 1. The second math node is
elementwise, it return a list of the same length where the first element is the multiple of first elements in both lists,
second element is the multiple of the second elements in both list and so on.
Vectorized nodes can be identified from their sockets, their sockets are semitransparent (More solid than lists, see the
second socket in the first math node in the example above).
Nodes
Screenshot [Shift-A]
1.3. Nodes 17
Animation Nodes Manual, Release 2.0
Here you will find explanations for all the different nodes.
Number
Number category contains nodes that process and generates integers and floats.
Integer
• Show in viewport - If this option is enabled, the property will show up in the Data Input panel in the AN tab
in the Tool Shelf. The name of that property is defined by the node label if it is set. This option is useful if one
want to edit some parameters in the node tree directly from within the 3d viewport without having to go the
node editor.
Float
• Show in viewport - If this option is enabled, the property will show up in the Data Input panel in the AN tab
in the Tool Shelf. The name of that property is defined by the node label if it is set. This option is useful if one
1.3. Nodes 19
Animation Nodes Manual, Release 2.0
want to edit some parameters in the node tree directly from within the 3d viewport without having to go the
node editor.
Integer List
Description
This node is used to create an arbitrary list of integers. A new integer can be added with the New Input button. A new
integer can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Change the type of the integer list to another list type.
• Hide Inputs - Hide all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Float List
Description
This node is used to create an arbitrary list of floats. A new float can be added with the New Input button. A new float
can also be added by plugging it into the transparent socket.
1.3. Nodes 21
Animation Nodes Manual, Release 2.0
Inputs
Outputs
• Change type - Changes the type of the float list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Integer Range
Description
This node is used to generate an integer list that represents an integer arithmetic sequence.
Inputs
• Amount - The length of the arithmetic sequence which is also the length of the output integer list.
• Start - It is the starting integer of the arithmetic sequence.
• Step - The difference between each two consecutive terms in the sequence.
Outputs
• N/A
Examples of Usage
Float Range
Description
This node is used to generate a float list that represents an arithmetic sequence.
1.3. Nodes 23
Animation Nodes Manual, Release 2.0
Options
• Start/Step - This option allow you to define the arithmetic sequence by a starting value and Step value which is
the difference between each two consecutive terms.
• Start/Stop - This option allow you to define the arithmetic sequence by a starting value and an end value. In
this case, the difference between each two consecutive terms is the reciprocal of the Stop value.
Inputs
• Amount - The length of the arithmetic sequence which is also the length of the output integer list.
• Start - It is the starting value of the arithmetic sequence.
• Step - It is the difference between each two consecutive terms of the arithmetic sequence. (Only available in the
Start/Step option)
• Stop - It is the end value of the arithmetic sequence, in this case, the difference between each two consecutive
terms is the reciprocal of its value. (Only available in the Start/Stop option)
Outputs
• N/A
Examples of Usage
Random Number
Description
This node generates a random float between a minimum and a maximum value.
Options
• Create List - It is the button you see beside the Node Seed, if is enabled, the output will be a list of random
floats.
Inputs
• Seed - Seed for the random generator, Where different seed generate different random number.
• Min - A float value that the generated number won’t deceed.
• Max - A float value that the generated number won’t exceed.
• Count - The number of random floats to generate. (Only available if Create List is enabled)
Outputs
• Number - A random float between the minimum and the maximum value.
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Random Number nodes in a loop while using the index as a seed, you can change the extra seed
to get different results from the other nodes.
Animation Nodes automatically change the Node Seed when you duplicate or add a new Random Number node.
Examples of Usage
Number Wiggle
Description
This node is a 1D perlin noise generator, You can think of it as random numbers that are smoothly connected to each
other.
It is a function of variable Evolution, Which means every value of the variable Evolution has a corresponding value
calculated based on the node options and this value is the output of the node.
1.3. Nodes 25
Animation Nodes Manual, Release 2.0
Inputs
• Seed - Seed for the random generator, where different seed generate different noise.
• Evolution - A float that is the variable of the function wiggle.
• Speed - It is the frequency of the noise or the rate of change of the values.
• Amplitude - It is the range of the output values in both positive and negative direction, Means if the Amplitude
is equal to 1, the values will range between -1 and 1.
• Octaves - It is the number of levels of details.
• Persistance - It is the strength of the details added from Octaves
Outputs
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Number Wiggle nodes in a loop while using the index as a seed, you can change the extra seed
to get different results from the other nodes.
Animation Nodes automatically change the Node Seed when you duplicate or add a new Number Wiggle node.
Examples of Usage
Mix floats
Description
Inputs
• Factor - A float that controls the amount of each float input to the output, Where 0 means the first float only and
1 means the second float only.
Outputs
• N/A
Note
By how the Mix floats works, A factor that is larger than 1 won’t be clamped but rather multiplied to the second float
that’s why the node has an option to Clamp Factor. So if Clamp factor is enabled, any factor that is larger than 1 will
return the second float.
Examples of Usage
Map Range
Description
1.3. Nodes 27
Animation Nodes Manual, Release 2.0
Every value has a relative position in a specific interval, this node find a new value that match the relative position but
in a new defined interval.
Options
Inputs
Outputs
• N/A
Examples of Usage
Clamp
Description
This node is used to ensure a value is in a certain range. Any value outside of the defined range will be clamped /
replaced by the maximum or minimum value.
Inputs
Outputs
• N/A
Examples of Usage
Convert Angle
Description
This node allows you to convert from Degrees to Radians or from Radians to Degrees.
1.3. Nodes 29
Animation Nodes Manual, Release 2.0
Options
Inputs
Outputs
• N/A
Examples of Usage
Round Number
Description
Inputs
Outputs
N/A
Examples of Usage
Math
Description
1.3. Nodes 31
Animation Nodes Manual, Release 2.0
Inputs
• A - Input A.
• B - Input B.
(Inputs are dynamic, Means the node has either one or two inputs based on selected operation.)
Outputs
• Remove Quick Settings - You may notice that when duplicating a math node, couple of buttons appear along
with a green check mark. Those are called Quick Settings, clicking on one of the buttons change the type of
the math node to the type of the button. The check mark is a way to tell AN that the current type is what you
want and that you no longer need the menu. This button in the advanced node settings click the check mark for
all math nodes in the node tree.
Notes
Description
Inputs
Outputs
N/A
1.3. Nodes 33
Animation Nodes Manual, Release 2.0
Examples of Usage
Parse Number
Description
This node is used to convert a text that include numbers into a float data type.
Inputs
Outputs
• Number - The float that was extracted from the input text.
• N/A
Caution
The input text should only include numbers, otherwise the node will return a parsing error.
Examples of Usage
To Integer
Description
This node converts floats into integers using one of 3 algorithms. (See advanced node settings)
Inputs
Outputs
Examples of Usage
Float To Text
Description
Inputs
1.3. Nodes 35
Animation Nodes Manual, Release 2.0
Outputs
• N/A
Examples of Usage
Vector
Separate Vector
Description
Inputs
Outputs
N/A
Examples of Usage
Combine Vector
Description
Inputs
Outputs
N/A
Examples of Usage
Description
This node composes a vector with a uniform value in all of its components.
1.3. Nodes 37
Animation Nodes Manual, Release 2.0
Inputs
• Value - A value that is the X,Y and Z component of the output vector.
Outputs
N/A
Examples of Usage
Vector List
Description
This node is used to create an arbitrary list of vectors. A new vector can be added with the New Input button. A new
vector can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Change the type of the vector list to another list type.
• Hide Inputs - Hide all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Random Vector
Description
Options
• Create List - It is the button you see beside the Node Seed, if is enabled, the output will be a list of random
vectors.
1.3. Nodes 39
Animation Nodes Manual, Release 2.0
Inputs
• Seed - Seed for the random generator, where different seed generates different random vector.
• Scale - The magnitude of the generated vector.
• Count - The number of random vectors to generate. (Only available if Create List is enabled)
Outputs
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Random vector nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new Random vector node.
Examples of Usage
Vector Wiggle
Description
This node generates a random vector by generating a 1D perlin noise in all of its components. It is just like a Number
Wiggle node in the vector’s components.
Inputs
The inputs are just like Number Wiggle node except for the Amplitude.
• Amplitude - A vector that control the the amplitude of each component’s perlin noise.
Outputs
• Vector - The output vector of the noise functions at the variable Evolution.
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Vector Wiggle nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically change the Node Seed when you duplicate or add a new Vector Wiggle node.
Examples of Usage
Mix Vectors
1.3. Nodes 41
Animation Nodes Manual, Release 2.0
Description
Inputs
• Factor - A float that controls the amount of each vector input to the output, Where 0 means the first vector only
and 1 means the second vector only.
Outputs
• Result - The result vector of mixing the two vectors by the input factor.
• N/A
Note
How the Mix Vectors works, a factor that is larger than 1 won’t be clamped but rather multiplied to the second float-
that’s why the node has an option to Clamp Factor. So if Clamp factor is enabled, Any factor that is larger than 1 will
return the second vector.
Examples of Usage
Vector Distance
Description
Inputs
Outputs
• N/A
Examples of Usage
Description
This node takes a point and a line and returns information about the projection of this point on that line.
1.3. Nodes 43
Animation Nodes Manual, Release 2.0
Illustration
Inputs
Outputs
• Projection - The coordinates of the closest point on the line to the input point. Mathematically this point is the
point that makes a perpendicular line to the input line.
• Projection Factor - It is the ratio between the length of the line formed by the projected point and the input
line’s first point and the length of the input line. Or in more mathematical word, it is the scalar of the convex
combination of the starting and ending point to get the projected point.
• Distance - It is the shortest distance between the input point and the input line, Which is also the distance
between the projected point and the input point.
• N/A
Description
This node takes a point and a plane and returns information about the projection of this point on that plane.
1.3. Nodes 45
Animation Nodes Manual, Release 2.0
Illustration
Inputs
Outputs
• Projection - The coordinates of the closest point on the plane to the input point. Mathematically this point is
the point that makes a perpendicular line to the input plane which also makes a line that is parallel to the plane
normal.
• Signed Distance - It is the shortest distance between the input point and the input plane, Which is also the
distance between the projected point and the input point. Although distances can’t have a negative sign, this
output could have a negative sign if the point lie below the plane while positive if above.
• N/A
Vector Angle
Description
Inputs
Outputs
• Angle - The Angle between the the two input vectors in radian.
• Rotation Difference - The difference between the quaternion forms of the 2 vectors in a form of a quaternion.
• N/A
Examples of Usage
Vector Length
Description
1.3. Nodes 47
Animation Nodes Manual, Release 2.0
Inputs
Outputs
• N/A
Examples of Usage
Dot Product
Description
Inputs
Outputs
• N/A
Examples of Usage
Vector Math
Description
1.3. Nodes 49
Animation Nodes Manual, Release 2.0
• Reflect - Returns the reflection vector of input vector A with normal as input vector B.
• Normalize - Set the magnitude of the input vector to a specific length.
• Scale - Perform a scalar multiplication to the input vector.
• Absolute - Absolute all the components of the input vector.
• Snap - Snap the the components of the input vector to a defined step size for each component.
Inputs
Outputs
• N/A
Notes
• The Project operation will project the vector on a hypothetical straight line that has the same location and slope
of the input line if the input line was shorter than the projection.
Operations
Description
Inputs
Outputs
• N/A
Examples of Usage
Transform Vector
Description
1.3. Nodes 51
Animation Nodes Manual, Release 2.0
Inputs
Outputs
• N/A
Examples of Usage
Offset Vector
Description
This node offset a vector based on an input offset vector with an input falloff as a factor.
Options
• Start/End - Start will offset the vectors based on the offset vector with the falloff as a factor. End will offset
the vectors based on the offset vector with the inverse falloff as a factor, in other words, all points will be
transformed based on the offset vector and then points will be transformed back to their initial position based on
the offset vector with the falloff as a factor.
• Use Vector List - It is the button you see beside the Start/End options, if is enabled, the node will expect a
vector list to offset and the output will be the offset vector list.
Inputs
Outputs
• N/A
Examples of Usage
Rotation
1.3. Nodes 53
Animation Nodes Manual, Release 2.0
Direction To Rotation
Description
This node converts a direction to a rotation, A vector that defines a direction is inputed and a corresponding rotation is
outputed.
Demonstration
To better understand how this node works, You can think of it as aligning the local Track Axis of the object to the
input Direction Vector.
It is true that the selected local Track Axis is locked to the input direction vector, but that means the object can still
rotate around that vector while maintaining its direction. This node enables you to guide the object rotation around
that axis using another vector, Guide Vector and Guide Axis.
You can also think of the guiding feature as aligning the local Guide Axis of the object to the input Guide Vector.
Here is an example where the Track Axis is set to Z and the Guide Axis is set to X.
Inputs
• Direction - The vector that defines the direction, can be normalized or not.
• Guide - The vector that define the rotation around the Direction Vector.
Outputs
• N/A
Warning
• The Track Axis can never be the Guide Axis because The Track Axis is already locked to the Direction Vector.
Examples of Usage
Rotation To Direction
Description
Demonstration
To better understand how this node works, you can think of it as follows: it gets you the local selected axis of the
object.
In this example, you can see that the resultant vector is always aligned to the selected axis which is Z in this case.
Inputs
Outputs
1.3. Nodes 55
Animation Nodes Manual, Release 2.0
• N/A
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Separate Euler
Description
This node takes an euler and returns its components either in radian or degrees.
Inputs
Outputs
• N/A
Examples of Usage
Combine Euler
1.3. Nodes 57
Animation Nodes Manual, Release 2.0
Description
Inputs
Outputs
• N/A
Examples of Usage
Vector List
Description
This node is used to create an arbitrary list of eulers. A new euler can be added with the New Input button. A new
euler can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Change the type of the euler list to another list type.
• Hide Inputs - Hide all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Vector Math
1.3. Nodes 59
Animation Nodes Manual, Release 2.0
Description
Inputs
Outputs
• N/A
Notes
Examples of Usage
Mix Vectors
Description
Inputs
• Factor - A float that controls the amount of each euler input to the output, Where 0 means the first euler only
and 1 means the second euler only.
Outputs
• Result - The result euler of mixing the two eulers by the input factor.
1.3. Nodes 61
Animation Nodes Manual, Release 2.0
• N/A
Note
The way Mix Eulers works, a factor that is larger than 1 won’t be clamped but rather multiplied to the second euler.
That’s why the node has an option to Clamp Factor. So if Clamp factor is enabled, Any factor that is larger than 1 will
return the second euler.
Examples of Usage
Random Euler
Description
Inputs
• Seed - Seed for the random generator, where different seed generates different random euler.
• Scale - The range in positive and negative directions in radian.
Outputs
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Random euler nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new Random euler node.
Examples of Usage
Vector Wiggle
Description
This node generates a random euler by generating a 1D perlin noise in all of its components. It is just like a Number
Wiggle node in the euler’s components.
Inputs
The inputs are just like Number Wiggle node except for the Amplitude.
• Amplitude - An euler that controls the the amplitude of each component’s perlin noise.
Outputs
• Euler - The output euler of the noise functions at the variable Evolution.
1.3. Nodes 63
Animation Nodes Manual, Release 2.0
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Euler Wiggle nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically change the Node Seed when you duplicate or add a new Euler Wiggle node.
Examples of Usage
Separate Quaternion
Description
Inputs
Outputs
N/A
Examples of Usage
Combine Quaternion
Description
Inputs
Outputs
N/A
1.3. Nodes 65
Animation Nodes Manual, Release 2.0
Examples of Usage
Quaternion List
Description
This node is used to create an arbitrary list of quaternions. A new quaternion can be added with the New Input button.
A new quaternion can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Change the type of the quaternion list to another list type.
• Hide Inputs - Hide all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Quaternion Math
Description
1.3. Nodes 67
Animation Nodes Manual, Release 2.0
Operations on Quaternion:
Inputs
Outputs
• N/A
Examples Of Usages
Mix Quaternions
Description
1.3. Nodes 69
Animation Nodes Manual, Release 2.0
Inputs
• Factor - A float that controls the amount of each quaternion input to the output, where 0 means the first quater-
nion only and 1 means the second quaternion only.
Outputs
• Result - The resultant quaternion of mixing the two quaternions by the input factor.
• N/A
Note
The way Mix Quaternions works, a factor that is larger than 1 won’t be clamped but rather multiplied to the second
quaternion. That’s why the node has an option to Clamp Factor. So if Clamp factor is enabled, Any factor that is
larger than 1 will return the second quaternion.
Examples of Usage
Random Quaternion
Description
Inputs
• Seed - Seed for the random generator, where different seed generates different random quaternion.
• Scale - Scale of the quaternion elements.
Outputs
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g., when
using multiple Random quaternion nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new quaternion vector node.
Examples of Usage
Quaternion Wiggle
Description
This node generates a random quaternion by generating a 1D perlin noise in all of its components. It is just like a
Number Wiggle node in the quaternion’s components.
Inputs
The inputs are just like Number Wiggle node except for the Amplitude.
1.3. Nodes 71
Animation Nodes Manual, Release 2.0
• Amplitude - A quaternion that controls the the amplitude of each component’s perlin noise.
Outputs
• Quaternion - The output quaternion of the noise functions at the variable Evolution.
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed. e.g. when
using multiple Quaternion Wiggle nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically change the Node Seed when you duplicate or add a new Quaternion Wiggle node.
Examples of Usage
Description
This node takes a list of quaternions and rotates the first quaternion by the next quaternion in the list till the end and
the result is output as a quaternion.
Inputs
Outputs
• N/A
Note
Quaternion rotation is not commutative, so the order of quaternions in the list matters.
Examples of Usage
Matrix
Compose Matrix
Description
This node forms a transformation matrix based on the input translation, rotation, and scaling.
1.3. Nodes 73
Animation Nodes Manual, Release 2.0
Inputs
• Translation - A vector that stores the amount of translation of the output matrix.
• Rotation - An euler that stores the amount of rotation of the output matrix.
• Scale - A vector that stores the amount of scaling of the output matrix.
Outputs
• Matrix - A 4x4 transformation matrix which can be used to apply linear transformations to an object.
• N/A
Examples of Usage
Decompose Matrix
Description
This nodes takes transformation matrix and returns its components including rotation, translation and scale.
Inputs
Outputs
• Translation - A vector that stores the amount of translation in the input matrix, which is also the location of the
object.
• Rotation - An euler that stores the amount of rotation in the input matrix, which is also the rotation of the object.
• Scale - A vector that stores the amount of scalling in the input matrix, which is also the scale of the object.
• N/A
Examples of Usage
Matrix List
Description
This node is used to create an arbitrary list of matrices. A new matrix can be added with the New Input button. A new
matrix can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Changes the type of the float list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
1.3. Nodes 75
Animation Nodes Manual, Release 2.0
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Translation Matrix
Description
This node generates a translation transformation matrix based on an input vector. The transformation matrix can then
be multiplied to a matrix to perform the translation.
Inputs
• Translation - A vector that stores the amount of translation in the output transformation matrix.
Outputs
• N/A
Examples of Usage
Rotation Matrix
Description
This node generates a rotation transformation matrix based on an input euler or an angle. The transformation matrix
can then be multiplied to a matrix to perform the rotation.
Inputs
Outputs
• N/A
Examples of Usage
Scale Matrix
Description
This node generates a scale transformation matrix based on an input vector. The transformation matrix can then be
multiplied to a matrix to perform the scaling.
1.3. Nodes 77
Animation Nodes Manual, Release 2.0
Inputs
• Scale - A vector that stores the amount of scaling in the output transformation matrix.
Outputs
• N/A
Examples of Usage
Shear Matrix
Description
This node generates a shear transformation matrix based on an input angle. The transformation matrix can then be
multiplied to a matrix to perform the shearing.
Shearing is changing the coordinates in an axis based on the coordinates of another axis.
Inputs
Outputs
• N/A
Examples of Usage
Distribute Matrices
Description
This node creates a list of matrices that represent the locations of object distributed someway in space. They can be
distributed in a line, grid, circle or based on a custom distribution.
• Linear - This option distribute matrices along the x-axis centered at the world.
– Size - This option lets you define the size of the line.
1.3. Nodes 79
Animation Nodes Manual, Release 2.0
Outputs
• N/A
Examples of Usage
Replicate Matrix
Description
This node copy the input matrix multiple times then transforms each new copy based on a corresponding transforma-
tion matrix or a translation vector. The transformations are input as a list of matrices or vectors where its length is the
number of copies.
Options
The transformations can either be defined by matrices which support translation, rotation and scaling or by vectors
that only support translations.
• Matrices - This option lets you define the transformations using a transformation matrix list.
• Vectors - This option lets you define the translations using a vector list.
Inputs
Outputs
• N/A
Examples of Usage
Transform Matrix
Description
This node transform the input matrix by the the input transformation matrix.
Inputs
1.3. Nodes 81
Animation Nodes Manual, Release 2.0
Outputs
• N/A
Examples of Usage
Invert Matrix
Description
This node inverts the input transformation matrix. In other words, this node will return a matrix that reverses the effect
of the input matrix. If the matrix is multiplied by its inverse, the result will be an identitie matrix.
Inputs
Outputs
• N/A
Examples of Usage
Mix Matrices
Description
Inputs
• Factor - A float that controls the amount of each matrix input to the output, where 0 means the first matrix only
and 1 means the second matrix only.
Outputs
• Result - The resultant matrix of mixing the two matrices by the input factor.
• N/A
Note
A factor that is larger than 1 won’t be clamped but rather multiplied to the second matrix. That’s why the node has an
option to Clamp Factor. So if Clamp Factor is enabled, any factor that is larger than 1 will return the second matrix.
Examples of Usage
Matrix Math
Description
This node allows you to multiply two transformation matrices. Multiplying transformation matrices gets you a trans-
formation matrix that will perform both input transformation matrices. So if you multiplied a rotation matrix by a
translation matrix the resultant matrix is a transformation matrix that performs rotation and then translation.
Keep in mind that matrix multiplication is non commutative. So order matters.
1.3. Nodes 83
Animation Nodes Manual, Release 2.0
Inputs
• A - A transformation matrix.
• B - A transformation matrix.
Outputs
• N/A
Examples of Usage
Combine Matrices
Description
This takes a list of transformation matrices and multiplies them together in order.
Inputs
Outputs
• N/A
Examples of Usage
Offset Matrices
Description
This node offset a matrix based on an input offset translation, rotation and scale with an input falloff as a factor.
Options
Inputs
1.3. Nodes 85
Animation Nodes Manual, Release 2.0
Outputs
Translation
• Global Axis - This option translate matrices in global space.
• Local Axis - This option translate matrices in local space, in other words, the translation vector is rotated based
on the rotation of the transformation matrix before it get added.
Rotations
• Global Axis - Global Pivot - This option rotate matrices in global space around the space’s origin point. Use it
when your matrix represent a vector.
• Global Axis - Local Pivot - This option rotate matrices in global space around their origin point. Use it when
you matrix represent an object and you want to transform in around its origin.
• Local Axis - Local Pivot - This option rotate matrices in local space around their origin point. Use it when you
matrix represent an object and you want to transform in around its origin.
Scale
• Local Axis - This option scale matrices in their local space. Use this option if your matrices represent objects
and you want to scale them without changing their position.
• Global Axis - This option scale matrices in global space. Use this option if your matrices represent objects and
you want to scale them without changing their position.
• Include Translation - This option scale matrices in global space. Use this option if you want to scale them
while changing their position.
• Translation Only - This option scale matrices in global space. Use this option if you want only location to
change.
Examples of Usage
Matrices are a way of representing locations, rotations and scales of objects, they can also represents translations,
rotations and scaling transformations.
When matrix A is multiplied by matrix B, then matrix A will be transformed based on matrix B, if matrix B was a
translation matrix, then matrix A will be translated.
Text
Text
• Show in viewport - If this option is enabled, the property will show up in the Data Input panel in the AN tab
in the Tool Shelf. The name of that property is defined by the node label if it is set. This option is useful if one
want to edit some parameters in the node tree directly from within the 3d viewport without having to go the
node editor.
1.3. Nodes 87
Animation Nodes Manual, Release 2.0
String List
Description
This node is used to create an arbitrary list of strings. A new string can be added with the New Input button. A new
string can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Change the type of the string list to another list type.
• Hide Inputs - Hide all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Random String
Description
Inputs
• Seed - Seed for the random generator, Where different seed generate different random strings.
• Length - The number of characters in the output string.
• Characters - A string that contain all the possible characters.
Outputs
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Random String nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new Random String node.
Examples of Usage
Characters
Description
This node returns a string that contains all the characters in a specific category including:
• Lower Case
1.3. Nodes 89
Animation Nodes Manual, Release 2.0
• Upper Case
• Digits
• Special
• Line Break
• All
Inputs
• N/A
Outputs
• N/A
Examples of Usage
Timecode Generator
Description
This node returns the current time (based on input frame and a given frame rate) in miliseconds, seconds, minutes and
house separated by a colon.
Inputs
Outputs
• N/A
Examples of Usage
Split Text
Description
This node splits input string into multiple strings based on the chosen algorithm.
1.3. Nodes 91
Animation Nodes Manual, Release 2.0
Options
• Separator - This option allows splitting string by a specific character. So if the input text is “Animation,Nodes”
the output list will contain : -Animation and -Nodes.
• N Characters - This option allows splitting string each n number of characters. So if the input text is “Animation
Nodes” and N = 2 the output list will contain: -An,-im,-at,-io,-n„-No,-de,-s.
• Regular Expression - This node allows you to use “regex” operations in python enabling more control. So if
the input string is “Animation Nodes” and I want to split by white spaces, I can use the “/s” operations which
will return -Animation and -Nodes. A list of operations can be found here.
• Lines This option allow splitting by new lines, in other words, every line will be an element of the list.
• Words - This option allow splitting by words, in other words, every word will be an element of the list.
• Characters - This option allow splitting by character, in other words, every character will be an element of the
list.
Inputs
Outputs
• N/A
Examples of Usage
Join Text
Description
Inputs
Outputs
• N/A
Examples of Usage
Trim Text
Description
This node lets you cut a number of characters from the input text either from start or from the end.
It will return the text that start at the character with index Start and end at the character at index End. So if I set the
start index to be 0 and the end index to be 5 the output will be “Anima”.
Options
• Start - This option lets you set the starting index. If it is disabled, then it will be considered zero.
• End - This option lets you set the ending index. If it is disabled, then it will be considered the last index.
1.3. Nodes 93
Animation Nodes Manual, Release 2.0
Inputs
Outputs
• Negative Indices - If enabled, you can enter negative indices in the start and end inputs. A negative index -i
means the index n-i where n is the number of letters.
Examples of Usage
Reverse Text
Description
Inputs
Outputs
• N/A
Examples of Usage
Replace Text
Description
Inputs
Outputs
• N/A
Examples of Usage
Repeat Text
Description
This node is used to repeat an input text and add it before or after another input text.
1.3. Nodes 95
Animation Nodes Manual, Release 2.0
Options
Inputs
Outputs
• N/A
Examples of Usage
Text Length
Description
This node will return the number of characters in the input text.
Inputs
Outputs
• N/A
Examples of Usage
Description
Inputs
Outputs
• N/A
1.3. Nodes 97
Animation Nodes Manual, Release 2.0
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Description
Inputs
1.3. Nodes 99
Animation Nodes Manual, Release 2.0
Outputs
• N/A
Examples of Usage
Description
This node controls the property of the input text object in a specific character interval.
Inputs
Outputs
• Allow negative index - This option will allow you to invert the interval by entering negative values for the start
and end indicies.
Examples of Usage
Description
This node takes a text object and separates its characters into individual objects.
Options
• Type - Lets you choose the type of the output object, it can be Text, Curve or a Mesh.
Inputs
Outputs
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Boolean
Boolean Input
Description
• Show in viewport - If this option is enabled, the property will show up in the Data Input panel in the AN tab
in the Tool Shelf. The name of that property is defined by the node label if it is set. This option is useful if one
want to edit some parameters in the node tree directly from within the 3d viewport without having to go the
node editor.
Invert Boolean
Description
This node inverts the boolean. In other words, if the input is False it becomes True and if it was True it will be
False.
Inputs
Outputs
• N/A
Examples of Usage
Compare
Description
This node compares 2 values using standard mathematical inequalities such as >,<,<=,>=,=,=! and return True if it
was satisfied and False if not.
Inputs
Outputs
Note
Examples of Usage
Switch
Description
This node returns the first input if the condition was True and the second input if the condition was False.
Inputs
Outputs
• Output - The first value if True and the second value if False.
• Other - The first value if False and the second value if True.
Note
The type of the node changes automatically when you input another data type.
Examples of Usage
Logic Operators
Description
This node performs standard logical gates operations like And, Or, Xor.
Demonstration
• A and B - Both A and B have to be True in order to return True. e.g. True and False = False,
False and False = False, True and True = True.
• A or B - If A or B are True or both are True then the output is True. e.g. True or True = True, True
or False = True, False or False = False.
• A xor B - If A and B are different, then the output is True. e.g. True xor True = False, True xor
false = True, False xor False = False.
• Not (A and B) - Returns True if one of them is False.
• Not (A or B) - Returns True if both of them is False.
Inputs
Outputs
• N/A
Examples of Usage
Description
This node returns True if all of the values are True or False if all the values are False and the inverse of the
operations.
Demonstration
• All True - Returns True if all the booleans are True and False if not.
• All False - Returns True if all the booleans are False and False if not.
• Not All True - Returns True if at least one boolean is False.
• Not All False - Returns True if at least one boolean is True.
Inputs
Outputs
• N/A
Examples of Usage
Boolean To Integer
Description
This node returns 1 if the input is True and 0 if the input is False.
Demonstration
The true form of booleans is a binary where 1 means True and 0 means False. The logical gates itself is just a
simple arithmetical operation on those binaries. e.g. an And gate is just a multiplication and Or gate is just an addition
clamped to 1. This node is just a converter that convert booleans into binaries.
Inputs
Outputs
• N/A
Examples of Usage
Number To Boolean
Description
This node return False if the input number is zero and True if otherwise.
Inputs
• Number - A number.
Outputs
• Boolean - A boolean which is False if the input number is zero and True if otherwise.
• N/A
Examples of Usage
Color
This category contains nodes that process and creates color data.
Choose Color
Description
This node outputs color data chosen from the color picker.
Inputs
Outputs
• N/A
Examples of Usage
Combine Color
Description
This node composes a color data from input individual channels. It supports RGB, HSV, HSL and YIQ color models.
All are in linear color space.
Inputs
Outputs
• N/A
Examples of Usage
Separate Color
Description
This node decomposes input color data and outputs its individual channels. It supports RGB, HSV, HSL and YIQ
color models. All are in linear color space.
Inputs
Outputs
• N/A
Examples of Usage
Mix Colors
Description
Inputs
• Factor - A float that controls the amount of each color input to the output. 0 means the first color only and 1
means the second color only.
Outputs
• N/A
Note
The way Mix Colors works, A factor that is larger than 1 won’t be clamped but rather multiplied to the second color.
That’s why the node has an option to Clamp Factor. So if Clamp factor is enabled, any factor that is larger than 1 will
return the second color.
Examples of Usage
Description
This node creates a vertex color layer and fills it with a single color.
Inputs
• Object - The object that will carry the vertex color layer.
• Color - The color of each vertex of the object.
Outputs
• Check Color - If this is enabled, Animation Nodes will check if the color has changed before setting the new
color. If it hasn’t, Animation Nodes will return the object without any change. This will result in a speed up
in the execution time if you are not changing the color. So make sure to check it if you want to speed up the
execution.
Note
If the name you entered in the vertex color layer is the name of an existing vertex color layer, Animation nodes will
overwrite the data of this layer instead of creating a new one.
Examples of Usage
List
Create List
Description
This node is used to create an arbitrary list of a specific data type. A new element can be added with the New Input
button. A new element can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Changes the type of the list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Combine List
Description
This node is used to combine or join an arbitrary number of lists of a specific data type. A new list can be added with
the New Input button. A new list can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Changes the type of the list to another list type.
Examples of Usage
Append To List
Description
This node can be used to add an extra element at the end of the input list.
Inputs
Outputs
• Change type - Change the type of the list to another list type.
Examples of Usage
Description
This node returns the element at the input index. So if the input index is 1 and the input list is [1,2,3] then the
output will be 2. (Notice that indices start from 0 and not 1)
Options
• Clamp Index - If enabled, the output will be the last element if the index is larger than or equal the list length,
furthermore, the output will be the first element if negative indices were used assuming Wrap option is disabled
while if it was enabled, the output will be the first element if absolute the index is larger than or equal the list
length. If disabled, fallback value will be used. (see inputs)
• Wrap - If enabled, negative indices will be allowed where -1 means the last element, -2 means the second last
element and so on.
• Use Index List - It is the option you see beside Wrap, if enabled, the index will be an integer list and the output
will the a list that contains the elements at the indices defined in the input integer list.
Inputs
Outputs
• Make Copy - Copy the element before outputting it. This makes sure the element is independent of the original
element in the list and so changing that element won’t affect the output.
• Change type - Change the type of the list to another list type.
Examples of Usage
Description
This node returns single or multiple elements from the input list randomly.
Options
Inputs
• Seed - Seed for the random generator, where different seed return different random elements.
• List - The input list.
• Amount - The number of random elements in the output list. Can’t be larger than the the length of the input list.
(Only in multiple option)
Outputs
• List - A list that contains random elements from the input list.
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Get Random List Element nodes in a loop while using the index as a seed, you can change the
extra seed to get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new Get Random List Element
node.
Examples of Usage
Description
This node searches for a specific element and returns some information about it.
Inputs
Outputs
• First Index - The index where the value first appeared in the list. So if the input list is [1,2,3,2] and we are
searching for 2 then the First Index will be 1 because this is the index where the number 2 first appeared.
• All Indicies - A list of the indicies where the search value appeared. So using the example above the output will
be [1,3] because the number 2 appeared at both these indicies.
• Occurrences - The number of times the search value appeared on the list. So for the example above, the output
will be 2 because number 2 appeared 2 times in the list.
• Change type - Change the type of the list to another list type.
Examples of Usage
Description
This node replaces the value of the element at the input index by the input value.
Inputs
Outputs
• Clamp Index - If enabled, it will set the first element for negative input indicies that their absolute is larger
than or equal the list length assuming that Allow Negative Indices is enabled, if not, any negative indices will
change the first element, it will also change the last element if the input index is larger than or equal the length
of the list.
• Allow Negative Indicies - If enabled, -1 changes the last element, -2 changes the second last index, ...
Examples of Usage
Description
This node removes certain list elements based on their index or their values.
Options
• First Occurrence - This option removes the input value at its first appearance only. So if the input value is 1
and the input list is [1,2,3,1] the output list will be [2,3,1]. Notice that the last 1 didn’t change.
• All Occurrence - This option removes all the input values from the list. So for the previous example the output
list will be [2,3].
• Index - This option removes the element at the input index. So for the previous example with input index as 1
then the output will be [1,3,1] because 2 was at index 1.
Inputs
Outputs
• Change type - Change the type of the list to another list type.
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Shuffle List
Description
This node redistributes the elements of the list in a random different order.
Inputs
Outputs
• N/A
Examples of Usage
Reverse List
Description
This node flips the order of the elements of the list. The list [1,2,3] becomes [3,2,1].
Inputs
Outputs
• N/A
Examples of Usage
Slice List
Description
Options
• Start - Defines the start index of the output list. So if the input list is [1,2,3,4] and Start value is 2 then the
new list will be [3,4] that’s because the node will reject the elements before that index and output a list that
starts from that index. If disabled, start will be considered zero.
• End - Defines the ending index of the output list. So assuming the start is 0 and end is 2 the output list in the
previous example will be [1,2,3] that’s because the node will reject the elements after that index and output
a list that ends by that index.
• Step - Defines the step size between each index. So if the step size is equal to 2 then the output list will be
[1,3] notice that the index jumped 2 values to get from 1 to 3 and that what the step size defines.
• Index - The end element is defined by its index.
• Length - The end element is defined automatically by providing the length of the output list.
Inputs
Outputs
• Change type - Change the type of the list to another list type.
Examples of Usage
Shift List
Description
This node shifts the position of elements of the input list by a specific amount. Every element goes to the index i+n
mod l, where i is the element’s index, n is the amount of shifting and l is the length of the list. So if the amount is
equal to 1 the first elements becomes the second element, the second becomes the third and the last becomes the first.
Inputs
Outputs
• N/A
Examples of Usage
Sort List
Description
This node sorts a list of a specific data type based on a specific property. The input list can be of any data type and
there is two main options you can use for sorting:
• Custom expression.
• key list.
Options
• Custom - This option lets you sort the list based on an input data attribute. So if the list data type is vectors, you
can use the expression e.x which will sort the vectors based on their x component (from the smallest x to the
largest x). Another example, if the list data type is stings you can use the expression e[-1] to sort the strings
based on their last characters (starting from A to Z). Notice that -1 here is the index of the last character in the
string.
• key List - This option lets you sort list using a reference list. The reference list can be either floats or strings.
Suppose I want to sort the list [1,2,3,4] to be [3,1,2,4], the reference list for such ordering would be
something like [1,2,0,3] this reference list gets sorted from zero to infinity and the same movement that
happened to sort this list will happen to the original list. So for instance, the number 0 in the reference list is
the smallest number and thus it should be the first element so we move it from the third location to the first
location. That same movement will happen to the original list, the element at the third location(which is 3)
will move to the first location (Notice that this is what happened to get [1,2,3,4] to be [3,1,2,4]). The
string reference list is exactly the same but it is sorted from A to Z and an alternative reference list in strings for
[1,2,0,3] is [b,c,a,d].
Inputs
Outputs
• Element - The variable used to define the elements of the input list in the custom expression option. By default
it is “e”.
Examples of Usage
Mask List
Description
This node can be used to selectively remove list elements based on a boolean list. A boolean list with the same length
as the input list has to be provided, for every element in the input list, if the boolean at the same index in the boolean
list was False, then this element will not be included in the output list.
Inputs
Outputs
• N/A
Examples of Usage
Fill List
Description
This node takes an input list and change its length by inserting an arbitrary number of the input element.
The Length input define the length of the output list, if the input list length was smaller than that number, then the
input Element will be added till the length matches that of Length input. For instance, [1,2] as input list with
Length equal to 5 and and Element as 11, the output list will be [1,2,11,11,11], notice how 11 was added
several times to form a list of length 5.
If the input list was larger than Length input then nothing happens to the list. Moreover, an empty input list would
output a list of length input Length that is filled with the input Element, that’s why the node is called Fill.
Options
• Right - If chosen, the elements will be added at the end of the list.
• Left - If chosen, the elements will be added at the start of the list.
Inputs
Outputs
• Make Element Copies - If enabled, the Element input will be copied before inserting, this makes sure the
elements are independent of the original element used. This option don’t work for non objects, so it won’t be
available if the input list was of float or integer type.
Examples of Usage
Repeat List
Description
Options
• Loop - This option is the standard repetition pattern. Input list [1,2,3] repeated 2 times will output
[1,2,3,1,2,3].
• Ping Pong - This option is a repeat reverse pattern. Input list [1,2,3] repeated 2 times will output
[1,2,3,3,2,1].
• Amount - This option lets you define the amount of repetition.
• Length - This option lets you define the length of the output list. The amount of repetition is set automatically
to fill that length, all the elements which exceed that length will be cut off. If the length is 5 in the previous
example, the output list will be [1,2,3,1,2] Notice that the second 3 was cut because it exceeded the defined
length.
• Below Length - Just like Length this option allow you to define the length but if the length was not sufficient
to complete a whole repetition, that last repetition will be rejected. So if the length is set to 5 in the previous
example, the output will be [1,2,3]. Notice that the whole second repetition was rejected because it didn’t
make it to the last element.
• Above Length - Just like Below Length this option allows you to define the length but if the length was
sufficient to add at least one element from the last repetition, the whole last repetition will be added. So if the
length was 5 in the previous example, the output will be [1,2,3,1,2,3]. Notice that the second 3 was not
supposed to be in the list but it was added anyway.
Inputs
Outputs
• Make Element Copies - Copy the element before repeating them. This makes sure the elements are independent
of the original elements in the list and so changing those elements won’t affect the following repetitions.
• Change type - Change the type of the list to another list type.
Examples of Usage
Random List
Description
This node creates a list of defined length filled with random elements from an input list. Unlike the Get Random
Element List node, this node can create a list of any length because its allows duplicates.
Inputs
• Seed - Seed for the random generator, where different seed return different random elements.
• Length - The length of the output list.
• Source - The input source list.
Outputs
• List - A list of length Length which contains random elements from the input source list.
• N/A
Note
The node has an extra seed (Node Seed) that can be used to differentiate between nodes with the same seed, e.g.,
When using multiple Random List nodes in a loop while using the index as a seed, you can change the extra seed to
get different results from the other nodes.
Animation Nodes automatically changes the Node Seed when you duplicate or add a new Random List node.
Examples of Usage
Description
This node is used to do mathematical set operations like Union, Intersection, Difference and Symmetric Difference.
Options
• Union - This operation adds the 2 input lists but unlike the combine list node. If an element is shared between
the 2 lists it will be considered as a single element. So input list [1,2,3] Union input list [3,4,2] outputs
[1,2,3,4].
• Intersection - This node will return a list of elements that are common between the 2 input lists. So input list
[1,2,3] intersection input list [3,4,5] outputs [3], because it is shared between the 2 lists.
• Difference - This operation will remove the elements of input list 1 from input list 2. So if input list [1,2,3]
difference input list [3,4,5] outputs [1,2]. Notice that 3 was removed because it is in list 2.
• Symmetric Difference - This operation return the elements from both lists if those elements are not shared
between both lists. So input list [1,2,3] Symmetric Difference input list [3,4,5] output [1,2,4,5].
Notice that 3 was not included because it is in both lists.
Inputs
Outputs
• NA
Examples of Usage
Description
This node creates struct elements and sets their values. See demonstration for more information about struct elements.
A new key can be added using the plus button or by plugging its value into the transparent socket.
Demonstration
Struct elements are not lists. They are what is known as dictionaries. Dictionaries are lists but each element is known
by a Keys instead of an index. A key is a string that usually explain the value it is carrying. Dictionaries unlike lists
don’t care about the elements order. Dictionaries can carry multiple data types.
An example of a dictionaries : Name = Bob, Age = 19, Height = 1.70 . Notice That every element has a
key (Name,Age,Height) that describe its value (Bob,19,1.70) also notice that the values can be of any data type
(String,Integer,Float) it can even have a dictionary as a value.
Creating such dictionaries in animation nodes :
Inputs
• Struct - The node can also be used to add keys to an existing struct and this input is where the original struct is
input.
Outputs
• NA
Description
Demonstration
This node doesn’t output all the values of the struct, you have to request what you want. Using the example we used in
the Set Struct Elements page. If we want to get the name of the person, we should add a string output and type “Name”
which is the key that store the name of the person.
Getting such value in animation nodes :
Inputs
Outputs
• Make Copies - Copy the element before outputting it. This makes sure the element is independent of the original
element in the struct and so changing that element won’t affect the output.
Examples of Usage
Description
This node takes a list of structs and output all the values of a specific common key between them.
If a list of structs all have a key named Name and you want to output all the texts in that key, you first have to convert
the type of the node to be Text because Name key is a text and then type Name in the field.
Inputs
Outputs
• NA
Examples of Usage
Object
This category include nodes that access, read and write to blender objects.
Object Input
Description
• Show in viewport - If this option is enabled, the property will show up in the Data Input panel in the AN tab
in the Tool Shelf. The name of that property is defined by the node label if it is set. This option is useful if one
want to edit some parameters in the node tree directly from within the 3d viewport without having to go the
node editor.
Object List
Description
This node is used to create an arbitrary list of objects. A new object can be added with the New Input button. A new
object can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Changes the type of the object list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Description
This node returns a list of objects that are included in the input object group.
Inputs
Outputs
• Objects - A list that contains all the objects in the input object group.
• N/A
Examples of Usage
Description
This node returns the current location, rotation, and scale of the input object.
Inputs
• Object - An object.
Outputs
• Location - A vector that contains the current location of the input object.
• Rotation - An euler that contains the current rotation of the input object.
• Scale - A vector that contains the current scale of the input object.
• Quaternion - A quaternion that contains the current rotation of the input object.
• Use Current Transformations - If this option is disabled the the node will have an extra input Frame which
define the frame at which the transformations is output.
• Frame - The value can either be Absolute or Offset, Absolute will return the transformations at the chosen
frame. Offset will return the transformations at the chosen frame relative to the current frame.
Notes
• To be able to use the quaternion output the rotation mode of the object have to be set to quaternion. The same
for other rotation models.
Examples of Usage
Description
This node sets the location, rotation, and scale of the input object to the input transformations.
To output a property, enable its representative check box.
Inputs
• Object - An object.
• Location - A vector that contains the location of the object.
• Rotation - An euler that contains the rotation of the object.
Outputs
• Delta Transforms - If enabled, the node will edit the delta transforms of the object instead of the transforms
themselves. Delta transforms are transforms that are added to the original transforms of the object, they are very
useful if you want to set the object’s location relative to its original location.
Examples of Usage
Description
This node returns the transformation matrix of the input object. Matrices are more reliable than transforms because of
their different forms and because they are always up to date even during physics simulations.
Inputs
• Object - An object.
Outputs
• N/A
Examples of Usage
Description
This node sets the transformations of the input object to the input transformation matrix.
Inputs
• Object - An object.
• Matrix - An input transformation matrix.
Outputs
• Type - This option lets you set the transfromation matrix as:
– World - World space transformation matrix.
– Basis - World space transformation matrix but without constraints and parenting.
– Local - Local space transformation matrix.
– Parent Inverse - Inverse of object’s parent matrix at time of parenting.
Examples of Usage
Description
This node returns a specific object property based on the input Data Path of the property.
To get the data path of any object property in blender, just right click on the property and click Copy Data Path.
Inputs
• Object - An object.
Outputs
• Create Execution Trigger - Create an execution trigger for the selected property.
Examples of Usage
Description
This node sets the chosen property to the input value. Custom properties can also be edited using this node by typing
[”Property Name”] in the expressions field, if there was no such csutom property, it will be created.
To get the data path of any object property in blender, just right click on the property and select Copy Data Path.
Options
• Multiple Values - If Object list was used as an input, this option will be available. If disabled, the input value
will be set to the property for all objects. If enabled, the input value will expect a list of values where each
element correspond to the value which will be set to the object property of the object at the same index.
Inputs
• Object - An object.
• Value - The value of the property.
Outputs
• N/A
Examples of Usage
Description
This node behaves just like the Object Attribute Output, but it is more convenient to use with lists where for instance
the location of the object has 3 values (X,Y,Z), this node will let you set the value for any of them independently.
To get the data path of any property just right click on the property and select Copy Data Path.
Inputs
• Object - An object.
• Path - The data path of the property.
• Array Index - The index of the property to edit. Where the first element indexed as zero and the third as 2.
• Value - The value of the property to edit.
Outputs
• Clear Cache - The node automatically cache data paths for faster future executions, pressing this would clear
that cache.
Examples of Usage
Description
This node will return a boolean which describe the visibility of some properties such as the object’s visibility in
viewport and in rendering.
Inputs
• Object - An object.
Outputs
• N/A
Examples of Usage
Description
This node let you set the visibility of multiple object’s properties.
Inputs
• Object - An object.
• Hide - A boolean that if True will hide the object.
• Hide Select - A boolean that if True will make the object unselectable.
• Hide Render - A boolean that if True will hide the object while rendering.
• Show Name - A boolean that if True will show the object name.
• Show Axis - A boolean that if True will show the object’s axis.
• Show X-Ray - A boolean that if True will enable x-ray.
Outputs
• N/A
Examples of Usage
Description
This node lets you move objects through blender’s layers system. Notice that an object can exist in multiple layers at
the same time.
Inputs
• Object - An object.
• Layer 1 - A boolean if True, the object will be included in the layer 1.
• Layer 2 - A boolean if True, the object will be included in the layer 2.
• Layer 3 - ...
Outputs
• N/A
Examples of Usage
Description
This node returns a list of shape keys in the input object. Those outputs can then be used in the Shape Key Output
node.
Inputs
• Object - An object.
Outputs
• N/A
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Object ID Key
Description
Inputs
Outputs
The outputs are based on the type of the ID key, however, if the ID key was an initial transformations ID key, the
outputs will be as follow:
• Exist - A boolean which is False if a key doesn’t exist and True if it does.
• Location - A vector which contain the location in the key.
• Rotation - An euler which contain the rotation in the key.
• Scale - A vector which contain the scale in the key.
• Matrix - A transformation Matrix stored in the key
• N/A
Examples of Usage
ID keys are particularly useful when one want to transform some objects relative to their original position. (One can
also use the delta transforms in the Transforms Output Node)
For instance, if I want to move an object 2 units in the x direction, if I used its current location and added 2 to it, it will
just keep moving forever because its new location will be its current location in the next node execution, So to solve
this problem, I can store the object position in an ID key and then add 2 to it.
Description
This node copies the data of one object to another. (They become linked)
Inputs
Outputs
• N/A
Examples of Usage
Set Keyframes
Description
This node is an operation node which means it operates independently. It set key frames as the animation plays for the
selected transformation channel. To add a transformation channel click the plus button after choosing its type.
Inputs
• Enable - Make sure to disable this whenever you are not recording and just playing the animation.
• Set Keyframes - The node will not insert any keyframes if this option is disabled.
• Remove Unwanted- If enabled will delete unwanted frames during the animation.
• Object - An input object to set frames to.
Outputs
• N/A
• N/A
Description
Inputs
Outputs
• N/A
Examples of Usage
Armature Info
Description
This node return some information about the bones of the input armature.
Options
Inputs
Outputs
• Matrices - A transformation matrices that represent the locations, rotations and scales of the bones.
• Centers - A vector list that represent the locations of the centers of the bones.
• Directions - A vector list that represent the directions of the bones. The magnitude of each direction vector is
equal to the length of the bone.
• Lengths - The lengths of the bones.
• Heads - A vector list that represent the locations of the heads of the bones.
• Tails - A vector list that represent the locations of the tails of the bone.
• Names - A text list that contains the names of the bones.
• N/A
Examples of Usage
Utils
Move Object
Description This node move the input object by the input vector every node execution.
Inputs
• Object - An object to move.
• Displacement - The displacement vector by which the object move each execution.
Outputs
• Object - The input object.
Examples of Usage
Transform Object
Description This node transform the input object by the input transformation matrix every node execution.
Inputs
• Object - An object to move.
• Matrix - The transformation matrix by which the object transform each execution.
Outputs
• Object - The input object.
Examples of Usage
Description Blender doesn’t update the object’s transformation matrix immediately after modifying the transforma-
tion, So you can use this node to update it.
Inputs
• Object - An object.
Outputs
• Object - The input object.
Description This node will transform the object to its identity state which is zeros in locations and rotations and
ones in the scale.
Inputs
• Object - An object.
Outputs
• Object - The input object.
Copy Transforms
Description This node will copy the location, rotation and scale of an object to another.
Inputs
• From - An object to copy transform from.
• To - An object to copy transforms to.
Outputs
• To - The object transforms are copied to.
Examples of Usage
Description This node will return the Active object and a list of the selected objects.
Inputs
• N/A
Outputs
• Selected Objects - A list of the selected objects.
• Active Object - The active object.
Examples of Usage
Description This node will return the active camera in the scene.
Inputs
• N/A
Outputs
• Active Camera - The active camera.
Object Instancer
Description
Options
• Copy from source - This option is enabled by default and it lets you instance an object with its data, however,
if the option is disabled, the node will create objects with empty data blocks which you can then fill and control
by other nodes like the Copy Object Data Node or the Object Output Node.
• Object Type - This option is only visible when copy from source is disabled. It lets you define the type of data
block the object should carry, so the data can be Mesh, Curve, Lamp, etc.
This example sums the last 2 options:
I used the object instancer node to create 5 objects with empty mesh data. I then used a Copy Data Node to copy the
mesh data from a cube to the first instance, however I didn’t edit or fill the mesh data of any of the other 4 object so
they are objects without any data and just act as an empty (An empty is just a location, rotation, and scale). Another
node that can fill in the mesh data of an object is the Object Output Node.
• Copy full object - If enabled will copy the modifiers and the constraints with the object. (Only available when
Copy From Source is enabled)
• Deep copy - If enabled will copy mesh data as well so that every data block has a single user. The new object
will be independent of the source. (Only available when Copy From Source is enabled)
Inputs
Outputs
• Remove Animation Data - Clear the animation data of the newly created objects.
• Reset Source Data - This will reset the source data for all instances.
• Unlink instances from node - This will separate the instances from the node to make sure they don’t get
removed when you remove the node.
• Hide relationship lines - This will hide the lines going to the container in the viewport.
Examples of Usage
Mesh
This category include nodes that process and create mesh objects.
Description
This node returns some information about the input object like its vertices locations and polygon edge indicies.
The data is from blender’s object data block, which means, when the object is edited in edit mode, AN won’t update
the output data unless you change to object mode.
Inputs
• Object - An object.
• Use World Space - This option lets you choose between local and global coordinate space for the outputs.
• Use Modifiers - If enabled, will return the data as modifiers were applied, that includes both the generative and
deformative modifiers.
• Scene - The scene the object belong to.
Outputs
• Vertex Locations - A vector list that includes vertices locations of the input object.
• Edge Indices - A list of edge indices that includes all the edges of the input object.
• Polygon Indices - A list of polygon indices that includes all the polygons of the input object.
• Vertex Normal - A vector list that contain unit vectors that represent the vertices normals of the input object.
• Polygon Centers - A vector list that contain the locations of the centers of the polygons of the input object. It
is computed as the average of vertices of the polygon.
• Polygon Normals - A vector list that contain unit vectors that represent the normals of the polygons of the input
object.
• Local Polygon Area - A float list that contain the areas of the polygons of the input object.
• Material Indices - An inter list that contains the material index for each polygon, where the first integer repre-
sent the index of the material assigned to the first polygon, ...
• Mesh Name - A string that contains the name of the mesh.
• N/A
Notes
• Mesh Name output is not the object name! It the the name of mesh data block that define the geometry of the
object. In blender you can find that name in the Data Panel.
Examples of Usage
Description
This node returns mesh data of a cuboid that represents the bounding box of the input object.
A bounding box is a box that bounds the object, that is, each face of the box is a least upper bound or greatest lower
bound of a specific vertex coordinate.
Inputs
• Object - An object.
Outputs
• Vertices - A vector list that includes vertices locations of the bounding box.
• Edges - A list of edge indices that includes all the edges of the bounding box.
• Polygons - A list of polygon indices that includes all the polygons of the bounding box.
• Use World Space - This option allows you to choose between local and global coordinate space for the bounding
box.
Examples of Usage
It is not every day where you would create a bounding box or visualize it. This node is useful as it actually gives you
the ability to determine the maximum and minimum value of the vertex coordinates at a certain axis, and you may use
it to perform normalization for instance.
In other words, if I were to calculate the x coordinate of the vertex that has the highest x coordinate (The maximum x
value of all vertices) I can just get the x coordinates of the vertex at index 6—It represents the intersection of the least
upper bounds in all axis so its x coordinate is the maximum x and its y is the maximum y and its z is the maximum
z—The same applies for the minimum but this time the vertex at index zero is sampled.
Description
Options
• All - The output will be a float list that contain all the weights of the choosen vertex group.
• Index - The output will be a single float that contain the weight of the vertex at the input index.
Inputs
Outputs
• N/A
Examples of Usage
Description
This node separates the input mesh data into it’s components:
• Vertex Locations.
• Edge Indices.
• Polygon Indices.
Inputs
Outputs
• Vertex Locations - A vector list that contains the locations of the vertices of the input mesh data.
• Edges Indices - An edge indices list that contains the edge information of the input mesh data.
• Polygons Indices - A polygon indices list that contains the polygon information of the input mesh data.
• N/A
Description
This node combines individual mesh data into a mesh data block.
Inputs
• Vertex Locations - A vector list that contains the locations of the vertices of the input mesh data.
• Edges Indices - An edge indices list that contains the edge information of the input mesh data.
• Polygons Indices - A polygon indices list that contains the polygon information of the input mesh data.
Outputs
• N/A
Examples of Usage
Transform Polygons
Description
Inputs
• Vertices - A vector list that represent the locations of the vertices of the polygons.
• Polygon Indices - The polygon indices list of the polygons.
• Matrix - A transformation matrix.
Outputs
• N/A
Examples of Usage
Separate Polygons
Description
Inputs
• Vertices - A vector list that represent the vertices locations of the polygons.
• Polygon Indices - A polygon indices that define the polygons.
Outputs
• Vertices - The vector list that represent the vertices locations of the separated polygons.
• Polygon Indices - A polygon indices list that define the separated polygons.
• N/A
Examples of Usage
Description
This node returns transformation matrices that describe the location and orientation of the input polygons. The local x
axis is aligned with the direction of the first edge of each polygon.
Inputs
• Vertices Locations - A vector list that represent the the locations of the vertices of the polygons.
• Polygon Indices - The polygon indices of the polygons.
Outputs
• Transforms - A matrix list that include transformation matrices that describe the location and orientation of the
polygons.
• Inverse Transforms - The inverse matrix of the transforms.
• N/A
Examples of Usage
Description
This node separate input polygons and return them in their unity position, that is, they are located at the center of the
world and lie on the xy plane.
It also return a list of transformation matrices that if used to transformed the output polygons, the result will be the
polygons in their initial position and orientation.
Inputs
• Vertices - A vector list that represent the vertices locations of the polygons.
• Polygon Indices - A polygon indices that define the polygons.
Outputs
• Vertices - The vector list that represent the vertices locations of the separated polygons at their unity position.
• Polygon Indices - A polygon indices list that define the separated polygons.
• Transformations - A matrix list that include the transformation matrices that describe polygons original loca-
tions and orientations.
• N/A
Examples of Usage
Generators
Line
Description This node return the mesh data of a line based on an input starting point and an input ending point.
Inputs
• Start - A vector that define the starting point of the line.
• End - A vector that define the ending point of the line.
• Steps - An integer that define the number of vertices that form the line.
Outputs
• Vertices - The vertices locations of the line.
• Edge Indices - The edge indices of the line.
Examples of Usage
Grid
Description This node return the mesh data of a 2d grid based on the input data.
Options
• Size - This option lets you set the dimension of the grid.
• Step - This option lets you set the dimensions of each individual cell.
Inputs
• X Divisions - The number of lines in the x direction.
• Y Divisions - The number of lines in the y direction.
• X Distance - The distance between lines in x direction. (Only available in Step option)
• Y Distance - The distance between lines in y direction. (Only available in Step option)
• Length - The length of the grid. (Only available in Size option)
• Width - The width of the grid. (Only available in Size option)
Outputs
• Vertices - The vertices locations of the grid.
• Edge Indices - The edge indices of the grid.
• Polygon Indices - The polygon indices of the grid.
Examples of Usage
Cylinder
Inputs
• Radius - Radius of the cylinder.
• Height - Height of the cylinder.
• Resolution - Number of vertices per loop that forms the cylinder.
• Caps - If enabled, the top and bottom of the cylinder will be filled with an Ngon.
Outputs
• Vertices - The vertices locations of the cylinder.
• Edge Indices - The edge indices of the cylinder.
• Polygon Indices - The polygon indices of the cylinder.
Examples of Usage
Operators
Description This node takes a vector list (Usually represent the location of some points) and return edge indices list
that represent some connection between those input points.
Options
• Amount - This option lets you define the amount of connections that each point should have.
• Distance - This option lets you define a distance, if the distance between a point and another is less that distance,
a connections is initialized between them.
Inputs
• Points - A vector list that contain points locations.
• Amount - The amount of connections each point have. (Only available in the Amount option)
• Max Distance - The maximum distance each connection is allowed to have. (only available in the Distance
option)
Outputs
• Edges - An edge indices list that represent the connections.
• Distances - A float list that contains the lengths of the edges defined by the output edge indices and the input
point locations.
Examples of Usage
Edge To Tube
Description This node returns the mesh data of a mesh composed of cylinders in places of the input edges.
Inputs
• Points - The locations of the vertices of the edges.
• Edge Indices List - The edge indices list of the edges.
• Radius - Radius of the cylinders.
• Resolution - The number of vertices per loop that forms the cylinder.
• Caps - If true, cylinders’ starts and ends will be closed using an Ngon.
Outputs
• Vertices - The vertices locations of the cylinders.
• Polygon Indices - The polygon indices of the cylinders.
Examples of Usage
Create Edges
Description This node creates edges based on two vectors lists that define the locations of the terminals of the edges.
Inputs
• Edge Starts - A vector list that represent the vertices locations of the starts of the edges.
• Edge Ends - A vector list that represent the vertices locations of the ends of the edges.
Outputs
• Vectors - A vector list that represent the vertices locations of the edges.
• Edge Indices - Edges indices that describe the connection between each corresponding vectors.
Examples of Usage
Description This node creates an edge indices which then can be used to create an edge indices list to create meshes.
Inputs
• Index 1 - The index of the first vertex.
• Index 2 - The index of the second vertex.
Outputs
• Edge Indices - The resulted edge indices.
Examples of Usage
Description This node creates a polygon indices which then can be used to create a polygon indices list to create
meshes.
Options
• Vertex Amount - This option generates a polygon indices of a specific number of vertices with the sequence 0,1,2,....
– Use list - It is the option you see beside the menu, if enabled, the node will expect a list of vertices
amounts and the output will be a polygon indices list that include polygon indices of corresponding
vertices amounts with the sequence 0,1,2,....
• Indices - This options convert an integer list to a polygon indices list.
Inputs
• Indices - An integer list that contain all the indices of the vertices that form the polygon. (Only available in
Indices option)
• Vertex amount(s) - The amount of vertices of the polygon, if this input was 3, the output polygon indices will
be 0,1,2. (Only available in Vertex Amount option)
Outputs
• Polygon Indices - The resulted polygon indices.
Examples of Usage
Edges Of Polygons
Description This node returns the edge indices of the edges that form the input polygons. Vertices that shared the
same polygon are going to share the same edges of the polygon as well.
Inputs
• Polygons - An input polygons.
Outputs
• Edges - The edges indices of the input polygons.
Examples of Usage
Edge Info
Description This node return some info about the input edge(s).
Inputs
• Points - The locations of the vertices of the edge(s).
• Edge Indices - The edge indices of the edge(s).
Outputs
• Length - The length(s) of the input edge(s).
• Center - The center(s) of the input edge(s).
Examples of Usage
Description
This node is used to create an arbitrary list of mesh data. A new mesh data can be added with the New Input button. A
new mesh data can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Mesh Data list - A list that contains all the input mesh data.
• Change type - Changes the type of the mesh data list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Description
Options
Inputs
Outputs
• N/A
Examples of Usage
Description
This node copy the input mesh data multiple times then transforms each new copy based on a corresponding transfor-
mation matrix or a translation vector then copied are combined into a single mesh data. The transformations are input
as a list of matrices or vectors where its length is the number of copies.
Options
The transformations can either be defined by matrices which support translation, rotation and scaling or by vectors
that only support translations.
• Matrices - This option lets you define the transformations using a transformation matrix list.
• Vectors - This option lets you define the translations using a vector list.
Inputs
Outputs
• N/A
Examples of Usage
Description
This node combines multiple mesh data into a single mesh data.
Inputs
Outputs
• N/A
Examples of Usage
Description
Inputs
• Bmesh - A bmesh.
Outputs
• Vertex Locations - A vector list that includes vertices locations of the input bmesh.
• Edge Indices - A list of edge indices that includes all the edges of the input bmesh.
• Polygon Indices - A list of polygon indices that includes all the polygons of the input bmesh.
• N/A
Examples of Usage
Create Bmesh
Description
Inputs
Outputs
• N/A
Examples of Usage
Description
This node returns a bmesh data type for the input object.
It is not recommended to use this node if you are not going to use bmesh operations and just want to get mesh data,
because it is a lot slower to create.(Object Mesh Data node can get the same data in about 33x the speed of the bmesh)
Inputs
• Object - An object.
• Use World Space - This option allows you to choose between local and global coordinates space for the output
vectors (vertices location).
• Use Modifiers - This option if enabled will return the data as modifiers were applied, that includes both the
generative and defomative modifiers.
• Scene - The scene the object exist in.
Outputs
• N/A
Notes
• Using Bmesh doesn’t mean that the info will be updated on the fly when you are in edit mode editing, you will
have to change to object mode to update the edits you applied.
Examples of Usage
Tools
Limited Dissolve
Description This node perform a Limited Dissolve bmesh operation on the input bmesh, this operation is similar if
not identical to blender’s limited dissolve operator.
Limited Dissolve dissolve the edges between faces which make an angle less than an input threshold.
Inputs
• Bmesh - An Input Bmesh.
• Angle Limit - The threshold for dissolving the edges. (If the angle between 2 faces is lower than this angle, the
edge between them will be dissolved.)
• Dissolve Boundries - This option if enabled will dissolve vertices inbetween faces boundries.
Outputs
• Bmesh - The resulted Bmesh.
Examples of Usage
Remove Doubles
Description This node perform a “Remove Doubles” bmesh operation on the input bmesh, this operation is similar
if not identical to blender’s remove doubles operator.
Remove Doubles join vertices that are close in space and the threshold is defined by an input.
Inputs
• Bmesh - An Input Bmesh.
• Distance - The threshold for merging the vertices. (If the distance between 2 points is lower than this number,
they will be joined)
Outputs
• Bmesh - The resulted Bmesh.
Examples of Usage
Recalculate Normals
Description This node recalculate the normals of vertices of the input bmesh.
It is often that the created mesh will have zero normals—The magnitude of the normals is zero—and you will have to
recalculate the normals by using this node.
Options
• Invert Normals - If enabled, computed normals will be inverted.
Inputs
• Bmesh - An Input Bmesh.
Outputs
• Bmesh - The resulted Bmesh.
Description This node set the shading of the input object to smooth or flat.
Inputs
• Object - An Object.
• Smooth - A boolean which if True will shade the object smooth and if False will shade the object flat.
Outputs
• Object - The input object.
Note If you shaded an object smooth and it get rendered black, then its normals are null vectors and you will have
to recalculate the normals using the Recalculate Normals Node.
Examples of Usage
Object Output
Description
This node edits the input object’s data based on a new input data.
Options
• Mesh Data - This option lets you write a mesh data to the input object. Since the mesh data block carries only
the vertices locations, edge, indices, and polygons indices info, those will be the only data in the output object.
(A bmesh data carries more information than the mesh data block like vertices normals.)
• Bmesh - This option lets you write a bmesh data to the input object. A bmesh data carry much more information
than the mesh data, such extra information like Vertex Normals, Vertex group weights and Material indices.
• Vertices - This option will only edit the vertices locations, that is, the input object should already have some
data and you are just editing the vertices locations of this data. This option is much faster than the Mesh Data
option assuming all you do is edit the vertices.
Inputs
• Object - An object to edit. The plus button let you add a new object and write to it.
• Mesh Data - Mesh data to write to the input object. (Only for the Mesh Data option)
• Bmesh - Bmesh to write to the input object. (Only for the Bmesh option)
• Vertices - Vector list that represents the new locations for the vertices. (Only for the vertices option)
• Material Indices - An integer list, the first integer represent the index of the material of the first polygon, the
2nd integer represent the index of the material of the 2nd polygon, ....
Outputs
• Make Mesh Exportable - If enabled, the mesh will be edited in order to be exported correctly. Use when
exporting using Alembic.
• Validate Mesh - If enabled, animation nodes will check if the mesh data is valid and if not, it will try to correct
it as much as possible. This option should always be enabled to avoid blender crashes. However, if you are
absolutely sure that your mesh data is valid, you should disable it because it slows down execution.
• Print Validation Info - If enabled and Validate Mesh is enabled, animation nodes will print the procedures
taken to fix the input mesh data.
Examples of Usage
Spline
This category include nodes that can process and create curves.
Description
Inputs
Outputs
• Splines - A list of splines that has all the splines in the input curve.
• Import Type - This option is set to all by default which return all the splines in the input curve. The other
option Single will add an extra input Index which will be the index of the output spline and of course the output
will be a single spline and not a list of splines.
Examples of Usage
Description
This node creates a new spline from input vectors, each vector will represent the position of a handle in the output
spline.
Options
• Bezier - This option will create the spline as a bezier spline which have a left and right handle.
• Poly - This option will create the spline as a simple poly spline, a poly spline is just a linear connection between
points and can’t be smoothed or edited but it is faster to create.
Inputs
• Points - A vector list that represents the position of the points of the output splines.
• Left Handles - A vector list that represent the position of the left handles of the spline.
• Right Handles - A vector list that represent the position of the right handles of the spline.
• Radius - A float list the contains the radii of each of the points of the spline.
• Cyclic - A boolean which if True will connect the first handle to the last handle and thus having a closed spline.
Outputs
• N/A
Examples of Usage
Description
This node creates a linear poly spline for every input edge, that is, every edge will represent a linear poly spline that
have 2 point which are the vertices of the edge.
Options
• Radius Per Vertex - This options sets the radius per vertex, so the node expects a radius list with the same
length as the the vertices list.
• Radius Per Edge - This options sets the radius per edge, so the node expects a radius list with the same length
as the the edge indices list.
Inputs
• Vertices - A vector list that represent the position of the vertices of the edges.
• Edge Indices - An Edge Indices list.
• Radius(radii) - The radius of the splines or a list of radii of the splines based on the selected option.
Outputs
• N/A
Examples of Usage
Description
This node is used to create an arbitrary list of splines. A new spline can be added with the New Input button. A new
spline can also be added by plugging it into the transparent socket.
Inputs
Outputs
• Change type - Changes the type of the spline list to another list type.
• Hide Inputs - Hides all the inputs in the node.
• Remove Unlinked Inputs - Removes all the inputs that are not connected to another node.
Caution
A warning will pop up when you use the Remove Unlinked Inputs button in the node, while if you used the the Remove
Unlinked Inputs button in the Advanced Node Settings the inputs will be removed without a warning.
Examples of Usage
Description
Options
• Point - This option will add a point with a linear handle (A non bezier point).
• Bezier Point - This option will add a bezier point which have a left and right handle.
Inputs
Outputs
• N/A
Examples of Usage
Transform Spline
Description
This node transform the input spline based on the input transformation matrix.
Inputs
Outputs
• N/A
Examples of Usage
Connect Splines
Description
This node connects all the input splines, that is, the ending point of each spline will be connected to the starting point
of the following spline.
Inputs
Outputs
• N/A
Examples of Usage
Trim Spline
Description
This node will trim (cut) the input spline to a specific normalized interval.
Options
• Uniform - This option samples the points regardless of the geometry of the spline.
• Resolution - This option samples the points based on the geometry of the spline.
To understand this better lets look at the following example:
The above example shows 2 identical splines where the upper one uses Uniform and the other uses Resolution. If one
were to sample some points at regular intervals on both splines, He would observe that:
• Points on Uniform are regularly distributed.
• Points on Resolution are dense at some areas and spaced at others.
So we notice that Resolution care about the geometry of the spline and so a regularly spaced parameters will be closer
at parts of the spline where it has dense geometry and spaced at relaxed parts.
Uniform on the other hand will yield results based on the actual distance along the spline, however, it is much slower
to compute.
Inputs
Outputs
• Resolution - It is the quality of the resulted spline, in other words, it is the number of points in the output spline.
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Description
This node will connect or disconnect the first and the last point of the input spline making it cyclic or not.
Inputs
• Spline - A spline.
• Cyclic - A boolean which if true will connect the first and the last handle of the input spline together, if fasle
will disconnect them.
Outputs
• N/A
Examples of Usage
Description
This node will edit the handles of the input spline so that the spline get smoothed.
In fact, the node just set the length of the handles to the smoothness value and align them to the tangent line to the
curve at their location. So if the smoothness value is set to zero, the bezier will act as a poly spline since it has no
handles.
Note that this only work for bezier splines and not poly splines.
Inputs
• Spline - A spline.
• Smoothness - A float that defines the amount of smoothness. (the length of the handles of the bezier spline)
Outputs
• N/A
Examples of Usage
Description
This node change the type of the input spline to either bezier or poly spline.
Options
Inputs
Outputs
• N/A
Examples of Usage
Replicate Spline
Description
This node copy the input spline multiple times then transforms each new copy based on a corresponding transformation
matrix or a translation vector. The transformations are input as a list of matrices or vectors where its length is the
number of copies.
Options
The transformations can either be defined by matrices which support translation, rotation and scaling or by vectors
that only support translations.
• Matrices - This option lets you define the transformations using a transformation matrix list.
• Vectors - This option lets you define the translations using a vector list.
Inputs
Outputs
• N/A
Examples of Usage
Spline Info
Description
This node returns some information about the input spline as the location of its points and handles.
Options
• Poly - This option will only return the locations of the points and not their handles.
• Bezier - This option will return both the locations of the points as well as their handles.
Inputs
• Spline - A spline.
Outputs
• Points - A vector list that contain the locations of the points of the input spline.
• Left Handles - A vector list that contain the locations of the left handles of the input spline.
• Right Handles - A vector list that contain the locations of the right handles of the input spline.
• Radii - A float list that contains the radii of the points of the input spline.
• Cyclic - A boolean that is true if the spline is closed, that is, every handle is connected to two other handles.
• Point Amount - The amount of points in the input spline.
• N/A
Examples of Usage
Evaluate Spline
Description
This node will return the position and the tangent line of a point on the curve at some normalized distance from the
starting point where this distance is defined by the input Parameter.
Options
• Uniform - This option samples the points regardless of the geometry of the spline.
• Resolution - This option samples the points based on the geometry of the spline.
To understand this better lets look at the following example:
The above example shows 2 identical splines where the upper one uses Uniform and the other uses Resolution. If one
were to sample some points at regular intervals on both splines, He would observe that:
• Points on Uniform are regularly distributed.
• Points on Resolution are dense at some areas and spaced at others.
So we notice that Resolution care about the geometry of the spline and so a regularly spaced parameters will be closer
at parts of the spline where it has dense geometry and spaced at relaxed parts.
Uniform on the other hand will yield results based on the actual distance along the spline, however, it is much slower
to compute.
Inputs
Outputs
• Location - A vector that represents the position of the point in the curve that correspond to the input parameter.
• Tangent - A vector that is aligned with the tangent line to the evaluated point.
• Resolution - It is the quality of the evaluated spline, in other words, it is the number of point in the spline used
in evaluation.
Examples of Usage
Project On Spline
Description
This node will project the input point to the input spline and return some information about the projection. The
projection of a point on a spline is the closest point to the input point and the vector going from the point to its
projection is perpendicular to the tangent at that point.
Options
• Extended - This option of enabled will virtually extend the spline from its terminals and project points on that
virtual line as well.The vitual line is just the tangent line to both terminals.
As you may see in this illustration: If extended is enabled, points that are close to the spline will be projected perfectly
as well as points that are away—Which are projected on a vitual line crated by the node. If extended is disabled, points
that are close to the spline will be projected perfectly but points that are away will always be projected to one of the
terminals of the spline.
Inputs
• Spline - A spline.
• Location - The location of the point to be projected.
Outputs
• Position - The position of the point—on the curve—that is closest to the input point.
• Tangent - A vector that respresents the tangent line to the output position point.
• Distance - The distance between the input point and the position point.
• Parameter - The location of the output position point in the normalized distance of the spline. (Is not calculated
if the Extended option is enabled)
• N/A
Examples of Usage
Description
This node returns the length of the input spline, it can be restricted to a defined interval.
Options
• Uniform - This option samples the points regardless of the geometry of the spline.
• Resolution - This option samples the points based on the geometry of the spline.
To understand this better lets look at the following example:
The above example shows 2 identical splines where the upper one uses Uniform and the other uses Resolution. If one
were to sample some points at regular intervals on both splines, He would observe that:
• Points on Uniform are regularly distributed.
• Points on Resolution are dense at some areas and spaced at others.
So we notice that Resolution care about the geometry of the spline and so a regularly spaced parameters will be closer
at parts of the spline where it has dense geometry and spaced at relaxed parts.
Uniform on the other hand will yield results based on the actual distance along the spline, however, it is much slower
to compute.
In this node, those options only matter when an interval is defined since the interpolation method is only used to define
the interval and not to get the length.
Inputs
• Spline - A spline.
• Start - The start of the interval.
• End - The end of the interval.
Outputs
• Resolution - It is the quality of the spline used to do the calculation, in other words, it is the number of handles
in the spline which is used in sampling the interval.
Examples of Usage
Description
This node will return n number of points along with their tangent vectors where n is the Amount input, Those points
are points on the spline in the input interval that are distributed based on the evaluation option—Uniform or Resolution.
Options
• Uniform - This option samples the points regardless of the geometry of the spline.
• Resolution - This option samples the points based on the geometry of the spline.
To understand this better lets look at the following example:
The above example shows 2 identical splines where the upper one uses Uniform and the other uses Resolution. If one
were to sample some points at regular intervals on both splines, He would observe that:
• Points on Uniform are regularly distributed.
• Points on Resolution are dense at some areas and spaced at others.
So we notice that Resolution care about the geometry of the spline and so a regularly spaced parameters will be closer
at parts of the spline where it has dense geometry and spaced at relaxed parts.
Uniform on the other hand will yield results based on the actual distance along the spline, however, it is much slower
to compute.
Inputs
Outputs
• Tangent - A vector list that contains vectors that are aligned with the tangent line to the evaluated points.
• Resolution - It is the quality of the evaluated spline, in other words, it is the number of handles in the spline
used in evaluation.
Examples of Usage
Description
This node takes a list of splines and write them to a curve object. It is possible to insert a single spline because the
node is vectorized.
Inputs
Outputs
• N/A
Examples of Usage
Loft Splines
Description
This node generates a mesh by sampling some points on the input splines and bridge (connect) them in order.
Options
• Bezier - This option will use a bezier interpolation to locate the segments of the bridge between the splines and
thus having a smooth output mesh.
• Linear - This option will use a linear interpolation to locate the segments of the bridge between the splines and
thus having a flat connection between the splines.
If the Surface Samples is set to 2 or the Smoothness is set to zero, the bezier interpolation will work just as a linear
interpolation.
Illustration
Inputs
Outputs
• Vertices - A vector list that contains the vertices locations of the output mesh.
• Polygons - A polygon indices list that carry the polygons information of the output mesh.
• Spline Distribution - The method used to sample spline samples (see Evaluate Spline Node for more info)
• Surface Distribution - The method used to sample surface segments (see Evaluate Spline Node for more info)
• Resolution - The number of handles used to create the spline used to perform the evaluation when using the
Uniform Distribution.
Examples of Usage
Revolve Splines
Description
This node creates a mesh from the input splines by revolving the profile spline around the axis spline.
Options
• Project - This option will sample some points from the profile spline, project them on the axis spline and
then revolve each point around its projection.This method output a nicer result especially if the axis and profile
splines are different in length but it is much slower due to the projection process.
• Same Parameter - This option will sample some point from both the profile and the axis splines and revolve
each point around its corresponding point. This method have difficulties especially if the axis and the profile
splines are different in length since corresponding points will be far from each other and thus resulting distortion
however this method is genrally much faster than the Project method.
Illustration
Inputs
• Axis - A spline that is used as the source of pivots for the revolving.
• Profile - A spline in which spline samples are originated for revolving.
• Spline Samples - The number of points sampled for revolving.
• Surface Splines - The number of points sampled during revolving.
Outputs
• Vertices - A vector list that contains the vertices locations of the output mesh.
• Polygons - A polygon indices list that carries the polygons information of the output mesh.
• N/A
Examples of Usage
Particles
This category include nodes that access blender’s particle systems and return some information about its particles and
hairs.
Description
This node return a list of particle systems in the input object along with the active (selected) one.
Inputs
• Object - An object.
Outputs
N/A
Examples of Usage
Particles Data
Description
This node return some info about particles of the input particle system.
Options
Inputs
Outputs
• Locations - A vector list that contains the locations of the particles of the input particle system.
• Velocities - A vector list that contains the velocities of the particles of the input particle system.
• Sizes - A float list that contains the sizes of the particles of the input particle system.
• Birth times - A float list that contains the times at which particles of the input particle system were born.
• Die times - A float list that contains the times at which particles of the input particle system died.
N/A
Examples of Usage
Hair Data
Description
This node converts hairs of the input particle system into splines.
Options
Inputs
Outputs
• Hair Splines - A spline list that contains splines that were generated from the hair of the particle system.
N/A
Examples of Usage
Animation
Time Info
Description
Inputs
Outputs
• N/A
Examples of Usage
Delay Time
Description
This node subtracts the delay input from the time input.
The essence of this subtraction is changing the frame at which an animation will start when using one of the animation
nodes or using the output in a custom animation node tree. That is because negative values are clamped to zero in the
animation process so subtracting 20 from the input frame will result in zero for the first 20 frame.
Inputs
Outputs
• N/A
Examples of Usage
Repeat Time
Description
This node resets the time every n number of frames where n is the input Rate. Technically it is the input Time modulo
the input Rate.
Options
Inputs
Outputs
• N/A
Examples of Usage
Animate Float
Description
This node mixes between two floats where the factor for mixing is the time mapped to an input interval Duration.
Inputs
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Animate Vector
Description
This node mixes between two vectors where the factor for mixing is the time mapped to an input interval Duration.
Inputs
• Interpolation - An Interpolation(Function) to evaluate the time at (Linear will just use the input time).
• Duration - The duration of the animation or the interval to map the time to or the value the time is divided by.
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Animate Euler
Description
This node mixes between two eulers where the factor for mixing is the time mapped to an input interval Duration.
Inputs
• Start - A value to start the animation with or the first input for mixing.
• End - A value to end the animation with or the second input for mixing.
• Interpolation - An Interpolation(Function) to evaluate the time at (Linear will just use the input time).
• Duration - The duration of the animation or the interval to map the time to or the value the time is divided by.
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Animate Quaternion
Description
This node mixes between two quaternions where the factor for mixing is the time mapped to an input interval Duration.
Inputs
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Animate Matrix
Description
This node mixes between two matrices where the factor for mixing is the time mapped to an input interval Duration.
Inputs
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Animate Color
Description
This node mixes between two colors where the factor for mixing is the time mapped to an input interval Duration.
Inputs
Outputs
• Time - The different between the input time and the duration (Isn’t affected by the input interpolation).
• Result - The value of the animation evaluated at the input time or the result of mixing.
• N/A
Examples of Usage
Interpolation
Construct Interpolation
Description
• Linear.
• Sinusoidal - Sometimes known as the ease in-out function.
• Power.
• Exponential
• Circular.
• Back.
• Bounce.
• Elastic.
Inputs
Outputs
• Interpolation - An interpolation.
• N/A
Notes
Ease in option need to be checked for some interpolations like the power and exponential interpolation to work.
Examples of Usage
Curve Interpolation
Description
This node takes some points and returns an interpolation that represents a spline interpolation of the input points (A
function that satisfy all the input points).
Inputs
Outputs
• N/A
Examples of Usage
Description
This node generates an interpolation from a Fcurve—A blender data block that represent animations of transformation
channels or other values.
Inputs
• FCurve - A FCurve.
Outputs
• N/A
Mix Interpolation
Description
Options
• Overlay - In this option, if one were to mix two interpolations by a factor F and evaluate the output interpolation
at the value V, He would observe that the result is identical to the result of evaluating both interpolations at V
and mixing their outputs by the factor F.
• Chain - This option stack input interpolations into a single interpolation. The first interpolation will be used
when evaluating at values from zero to input Position while the second will be used when evaluating at values
from there to 1, that is of course after they get compressed from 0,1 range to those smaller intervals. Here is an
illustration for mixing a linear interpolation with an exponential one:
Inputs
• Interpolation 1 - An interpolation.
• Interpolation 2 - An interpolation.
• Factor - A float that control the amount of each interpolation input to the output, Where 0 means the first
interpolation only and 1 means the second interpolation only. (Only in overlay option)
• Position - The position at which the first interpolation ends and the second interpolations starts assuming that
the fade width is set to zero. (Only in chain option)
• End 1 - It is the maximum value of the first interpolation. (Only in chain option)
• Start 2 - It is the minimum value of the second interpolation. (Only in chain option)
• Fade Width - It is the difference between the end of the first interpolation and the start of the second interpola-
tion. (Only in chain option)
Outputs
• N/A
Examples of Usage
Mirror Interpolation
Description
This node can be used to get the inverse of the input interpolation, the node can also combine the interpolation with its
inverse resulting in a symmetric function around the line x=0.5.
Options
• Chain - If enabled, the interpolation will be combined with its inverse, where the original interpolation will be
remapped to the domain [0,0.5] and its inverse in the domain [0.5,1]. If disabled, the output will be the
inverse of the interpolation.
Inputs
• Interpolation - An interpolation.
Outputs
• N/A
Examples of Usage
Evaluate Interpolation
Description
Inputs
• Position - The value at which the interpolation is evaluated at.(x in F(x) where F is the input interpolation.)
• Interpolation - An interpolation to evaluate.(F in F(x) where x is the input position)
Outputs
• Value - The output of the interpolation at the value Position.(F(x) where F is the input interpolation and x is the
input position)
• N/A
Examples of Usage
Interpolations are functions that takes a value between 0 and 1 and return a value that is also between 0 and 1. For
instance, this function can be a square function (f(x)=x^2) and when evaluated at 0.5 the output will be 0.25.
Falloff
Fade Falloff
Description
This node creates an index based falloff that associates input Start Value to all objects with index less than some input
index and the input End Value to all objects with index more than some input index, while the objects at indicies in
between are associated with values in between the Start Value and End Value evaluated at the input interpolation.
Illustration
The examples above shows the fade falloff node in action. We offset the vertices of the line by one unit in the z-axis
and used the Fade Falloff node as a factor for that offset. The Start Index is set to 2 so all vertices with index less
than or equal 2 are offset 2 units in the z-axis because the original offset multiplied by the Start Value is 1x2=2.
The End Index is set to 6 so all vertices with index larger than or equal 6 are not offset because the original offset
multiplied by the End Value is 1x0=0. Indices in between however (from 2 to 6) are offset with amounts linearly
changing between 0 and 2. Had I used a non-linear interpolation, values will no longer linearly change as in the
following example:
Notice how they are changing exponentially and how the start value affected the offset.
Options
Options are only different on how the start and end index are defined.
• Start / End - User define start and end indices directly.
• Start / Amount - User define start index and the amount of indices in the interval.
• End / Amount - Use define the end index and the amount of indices in the interval.
Inputs
Outputs
• N/A
Examples of Usage
Delay Falloff
Description
This node creates an index based falloff that associates a float that increases as the time increases where objects at
indicies that are closer to zero starts increasing before those that are farther away from zero. User can control the rate
of increasing relative to time and indices.
Illustration
The vertices of the line are suppose to move one unit in the z-axis but since I used the Delay Falloff as a factor, the
offset depend on time. We notice, as the time increase, the vertex at first index start moving, the vertex at the second
index didn’t start moving till the time became 5 which is the Delay input, the vertex at the first index stopped moving
when time reached 10 which is the Duration input. So we conclude that input Delay is the time it takes for an object
to start moving relative to the previous object while the input Duration is the amount of time it takes for every object
to reach its maximum value which is 1. The output is also evaluated at the input interpolation.
Inputs
Outputs
• N/A
Examples of Usage
Wiggle Falloff
Description
This node generates an index based falloff that associates a 1D perlin noise evaluated at some input value for every
object. Unlike Random Falloff node, noise can be smoothly animated. For more info, see Number Wiggle.
Inputs
Outputs
Examples of Usage
Random Falloff
Description
This node creates an index based falloff that associates a random float for every object.
Inputs
Outputs
• N/A
Examples of Usage
Description
This node creates an index based falloff that associates one of two input floats to every object. The node supports
random assignment of floats as well as every Nth object assignment.
Options
• Every Nth - This option assign input float A to indices that are divisible by some input integer n and input float
B to indices that aren’t. If n was 2 then the pattern will be BABABABA because even numbers are divisible by 2
while odd aren’t. If n was 3 then the pattern will be BBABBABB because 3,6,9 are divisible by 3 while other
numbers aren’t.
• Random - This option assign input float A and B randomly but limited with some probability. If the probability
is 1 all objects will have float B, if zero all object will have float A, if 0.5 half of the object will have A and the
other half will have B. But it is a probability so it is not guaranteed.
Inputs
• Step - An integer to check divisibility against. See Every Nth option above. (Only available in Every Nth
option)
• Offset - This integer is added to the index of every object. It acts as an offset for the pattern, so pattern ABABAB
offset by 1 will be BABABA. (Only available in Every Nth option)
• Seed - Seed of the random generator. (Only in the Random option)
• Probability - The probability that float B will be assigned to objects. See Random option above. (Only in the
Random option)
• A - Float A. Can be between zero and one.
• B - Float B. Can be between zero and one.
Outputs
• N/A
Examples of Usage
Description
This node creates a vector based falloff that associates to every object a float that is equal to inverse the distance from
it to some controller object, that distance can be 3D or 1D.
Options
• Sphere - This option associates to every object a float that is equal to inverse the distance from it to some
controller object. This float is always in [0,1] range, So some distances will be clamped to 1 or 0. We
conclude that objects that are closer to the controller will have a large float that doesn’t exceed 1 and as objects
gets away, their floats starts to fade till it becomes zero at some point. This float is added to the scale of the
controller object, so scaling the controller object will result in increase in the floats of every object.
Illustration In this illustration, I set the z-position of the points of a line to their falloff floats which formed some
kind of triangle. As we said, the float is equal to inverse the distance from the point to the position of the input object
which I placed at (0,0,0) in this illustration. Let the distance be D, then inverse of the distance is 1-D. So point
(0,0,0) will have a D of 0 (because distance between (0,0,0) and (0,0,0) is zero) and a 1-D=1-0=1, that’s
why the point in the middle have a z-location of 1. Point (1,0,0) on the other hand have a D of 1 and a 1-D=1-1=0
, that’s why the point at (1,0,0) has a z-location of zero. Points further away will have a negative inverse distances
and thus negative z-locations. But as we said, values are clamped to [0,1] range and so negative floats will be zeroes
and floats larger than one will be equal ones (We currently don’t have values larger than one).
What I am going to do is add some value to the floats which result in inverse distances larger than one which will then
be clamped to one, since the inverse distance is the z-location of the points, adding a value to the float will result in
moving the triangle in the z-direction. The illustration shows what happens when this value is added when clamping
is present.
Furthermore, multiplying the floats by some value will change the rate of changing of the floats and thus have a
wider based triangle, which is shown in the illustration as scaling the triangle which is what multiplication graphically
denote.
In the node inputs, input Offset is the value that gets added while input Width is the value that gets multiplied.
Shaded area is the actual points position after clamping, outline is the values before clamping. Notice how outline
exceed one and deceed zero:
• Directional - This option associates to every object a float that is equal to inverse the distance from it to some
controller object along a single axis. The chosen axis will be the local axis of the controller object, so rotating
the object changes the direction. This float is always in [0,1] range, So some distances will be clamped to
1 or 0. We conclude that objects that are closer to the controller along some axis will have a large float that
doesn’t exceed 1 and as object gets away, their floats starts to fade till it becomes zero at some point. This float
is multiplied by the scale of the controller object, so scaling the controller object will result in increase in the
floats of every object.
Use the same reasoning as the sphere option to understand this better.
Inputs
• Controller - An object to use as the controller. You probably want to use empties because actual objects won’t
make a difference, all the node needs is their location, rotation and scale.
• Offset - This float will be added to the floats of all object resulting in an offset just as if you scaled the controller.
(Only in Sphere option)
• Falloff Width - This float defines the distance between the ones and zeros, so a higher value will result in
smoother result with lower slope. (Only in Sphere option)
• Interpolation - Floats will be evaluated at this interpolation.
• Invert - If true, the floats will be inverted, so zeroes will be ones and ones will be zeroes.
Outputs
• N/A
Examples of Usage
Sound Falloff
Description
This node takes a sound and creates a falloff that associates a float to every object where this float is the intensity of
the input sound at a single frequency or the average of the whole domain based on the selected option. The falloff is
evaluated either based on the index of the object or based on another falloff. See options for more info.
• Sound - The input sound. The menu only displays the sounds of the same type as the Sound Type.
Sound Type
Average This option associates the intensity of sound at the current frame to the object at the index zero where
objects at higher indices get associated with sound intensities at future frames.
• Offset - The number of objects till value becomes of the next frame. If the value is 1 then first object is
associated with intensity at first frame, second object at the second frame. If the value is zero then all object
will be associated with the intensity at the current frame. If it is higher than 1, then objects between each two
consecutive frames get associated with a linear interpolation between the values at the bounding frames values.
Look at the following illustration:
The vertex at index zero is associated with a float that represent the intensity of the sound at the first frame, the intensity
of the sound at the next frame gets associated with the object at index 2 (Notice that the input offset is set to 2), as for
the objects that their index is not multiple of the input offset, their value is a linear interpolation between the bounding
frame values, so object at index 1 lie on the line that connect 0 and 2.
Spectrum This option associates the intensities of frequencies of the sound to every object where objects with small
indices or values gets associated with the intensities of the low frequencies and objects with large values or indices
gets associated with intensities of the high frequencies.
Index Frequency
• Index Frequency - The falloff is evaluated based on the indices of the objects.
The object at index zero got associated with the intensity of the first frequency while object at index 1 got associated
with the intensity of the second frequency.
• length - It is the distance between the lowest and highest frequency.
Notice that by reducing the length to half, the difference between the low and high frequency got reduced to half and
the highest frequency is now at index 5 and not 9 as before.
• Offset - This integer is added to the indices of the objects resulting in an offset of their frequencies.
• Index Frequency Extension Type - This defines what happens to objects with indices that are out of the range.
A length that is lower than the amount of indices would result in indices that are out of the range.
– Loop - This will repeat the frequencies.
– Mirror - This will repeat the frequencies in a ping pong style, so the end of the first range will match the
– Extended - This will associate the intensity of the lowest frequency to all the indices that are less than the
start of the range and the intensity of the highest frequency to all the indices that are more than the end of
the range. Notice how 0-4 and 13-17 indices have the same intensity in the following example:
Falloff Frequency
• Falloff - The falloff at which the sound falloff is evaluated.
In the above example a simple distance field is generated from the point distance falloff, when we input it to the sound
falloff, it gets evaluated based on its values.
• Interpolation - Output intensities are evaluated at this interpolation.
Outputs
Fade To Zero
• Low Frequencies - A frequency will be added at first which has a zero intensity. This make sure the first object
always gets associated with a zero float.
• High Frequencies - A frequency will be added at end which has a zero intensity. This make sure the last object
always gets associated with a zero float.
Examples of Usage
Spline Falloff
Description
This node creates a vector based falloff that associates to every object a float that is equal to inverse the distance from
it to some spline. This float is always in [0,1] range, So some distances will be clamped to 1 or 0. We conclude that
objects that are closer to the spline will have a large float that doesn’t exceed 1 and as object gets away, their floats
starts to fade till it becomes zero at some point.
Inputs
• Distance - This float is added to the float of every object which result in an offset for the distance.
• Width - The distance between the ones and the zeroes, can be though of as the slop as well.
• Interpolation - Floats are evaluated at this interpolation.
Outputs
• N/A
Examples of Usage
Constant Falloff
Description
This node creates a falloff that associate a constant float for every object.
Inputs
Outputs
• N/A
Examples of Usage
Custom Falloff
Description
This node creates an index based falloff that associates the first element from the float list to the first object, second
element to the second object and so on.
Inputs
• Strengths - A float list the represents the floats of the objects. If the number of object is greater than the length
of this list, extra object will have a floats equal to the input fallback value.
• Fallback - The fallback value.
Outputs
• N/A
Examples of Usage
Directional Falloff
Description
This node creates a vector based falloff that associates to every object a float that is equal to inverse the distance to
some point along some arbitrary direction vector. This float is always in [0,1] range, So some distances will be
clamped to 1 or 0. We conclude that objects that are closer to the input point along the defined directional vector will
have a large float that doesn’t exceed 1 and as objects gets away, their floats starts to fade till it becomes zero at some
point.
Options
• Left - Objects that are on the negative side of the direction vector will be zeroes. Object that are on the positive
side will start increasing as the distance increase till they reach one.
• Right - Objects that are on the negative side of the direction vector will be ones. Object that are on the positive
side will start decreasing as the distance increase till they reach zero.
Inputs
Outputs
• N/A
Examples of Usage
Description
This node creates a vector based falloff that associates to every object a float that is equal to inverse the distance to
some point. This float is always in [0,1] range, So some distances will be clamped to 1 or 0. We conclude that
objects that are closer to the input point will have a large float that doesn’t exceed 1 and as objects gets away, their
floats starts to fade till it becomes zero at some point.
Illustration
In this illustration, I set the z-position of the points of a line to their falloff floats which formed some kind of triangle.
As we said, the float is equal to inverse the distance from the point to some arbitrary point which I defined as the
(0,0,0) point in this illustration. Let the distance be D, then inverse of the distance is 1-D. So point (0,0,0) will
have a D of 0 (because distance between (0,0,0) and (0,0,0) is zero) and a 1-D=1-0=1, that’s why the point
in the middle have a z-location of 1. Point (1,0,0) on the other hand have a D of 1 and a 1-D=1-1=0 , that’s why
the point at (1,0,0) has a z-location of zero. Points further away will have a negative inverse distances and thus
negative z-locations. But as we said, values are clamped to [0,1] range and so negative floats will be zeroes and
floats larger than one will be equal ones (We currently don’t have values larger than one).
What I am going to do is add some value to the floats which result in inverse distances larger than one which will then
be clamped to one, since the inverse distance is the z-location of the points, adding a value to the float will result in
moving the triangle in the z-direction. The illustration shows what happens when this value is added when clamping
is present.
Furthermore, multiplying the floats by some value will change the rate of changing of the floats and thus have a
wider based triangle, which is shown in the illustration as scaling the triangle which is what multiplication graphically
denote.
In the node inputs, input Offset is the value that gets added while input Width is the value that gets multiplied.
Shaded area is the actual points position after clamping, outline is the values before clamping. Notice how outline
exceed one and deceed zero:
Inputs
Outputs
• N/A
Examples of Usage
Interpolate Falloff
Description
This node evaluates the floats of the input falloff at the input interpolation.
Inputs
• Falloff - A falloff
• Interpolation - An interpolation to evaluate the falloff at.
Outputs
• N/A
Examples of Usage
Remap Falloff
Description
This node remaps the floats of the input falloff to a new range. The node assume that the original range was [0,1]
Which is usually the case.
Inputs
• Falloff - A falloff.
• New min - The new minimum value.
• New max - The new maximum value.
Outputs
• N/A
Examples of Usage
Invert Falloff
Description
This node invert the input falloff. If its floats were x then the output will be 1-x clamped to the [0,1] range of
course.
Inputs
• Falloff - A falloff.
Outputs
• N/A
Examples of Usage
Mix Falloffs
Description
This node takes two or multiple falloffs and mix them together using one of the available algorithms.
Options
• Max - The output float will be the largest float of all falloffs.
• Min - The output float will be the lowest float of all falloffs.
• Add - The output will be the sum of the floats of the falloffs.
• Multiply - The output will be the product of the floats of the falloffs.
• Use Falloff List - It is the option you see beside the menu, if enabled, the input will be a falloff list.
Inputs
• A - A falloff.
• B - A falloff.
• Falloffs- The falloffs. If Use Falloffs List is enabled.
Outputs
• N/A
Examples of Usage
Evaluate Falloff
Description
This node evaluate the input falloff at the input index/vector/transformation matrix.
Options
• Note - The falloff is evaluated at the input index. Use this option when you have an index based falloff.
• Location - The falloff is evaluated at the input vector. Use this option when you have a vector based falloff.
• Transformation Matrix - The falloff is evaluated at the input transformation matrix. Use this option when you
have a vector based falloff.
• Use List - It is the option you see beside the menu. If enabled, the inputs will be lists and the node will evaluate
the falloff at all the elements of the list.
Inputs
• Falloff - A falloff.
• Index - The index to evaluate the falloff at.
• Location- The vector to evaluate the falloff at. (Only in Location option)
• Matrix - The transformation matrix to evaluate the falloff at. (Only in Transformation Matrix option)
Outputs
• N/A
Examples of Usage
Abstractly speaking, a falloff is a function that associates a float to every object. Those objects can be vectors, matrices
or indices which means that float is computed based on the vectors, matrices or indices which are just integers. The
computed floats are usually in the range of [0,1] but it is possible to go out of that range in some cases. Those floats
can then be used as a factor for some effect where zero means no effect and one means full effect, if the the float is
larger than 1, the effect will be amplified, so if it was a translation by two units in z-axis and if the float of the object
was 2 the translation will be 2x2=4 in z-axis.
The simplest falloff is the Constant Falloff which associate a constant float for all input objects. A constant falloff is
created automatically if no input falloff is provided.
The following example shows a node tree that creates 6 copies of a cube which all have a z-location of 1.5. While the
offset matrices node moved every matrix 3 units in the z direction, the constant falloff—Which associated a float of
0.5 for every matrix—tuned down the effect of that translation to be 3x0.5=1.5, and that’s why the final z-location
is 1.5 and not 3.
A more advanced falloff is the Point Distance falloff, which associate a float to every vector where that float equals
inverse the distance between the object and an input vector. If we then used that falloff in the previous example, the
objects that are closer to the input vector will move more along z-axis and the effect is tuned down as we move away
from the input vector.
Another often used falloff is the Object Controller Falloff which makes it easier to construct falloffs by representing
them with objects in the 3D viewport.
Falloffs are much more high level than other nodes, yet they give you a lot of control. E.g. It is possible to mix falloffs
together with the Mix Falloffs node. If you need even more control there also is a Custom Falloff node that takes a
Float List as input and associate those floats to the objects.
Everything that can be done using falloffs can also be done without them, but using falloffs has many benefits:
1. Much better Performance.
2. Less nodes are required to achieve desired effects.
3. They provide a more “declarative” approach to express animations which in return makes falloffs much more
artist friendly.
FCurves
Description
Inputs
Outputs
• N/A
Examples of Usage
Evaluate FCurve
Description
Option
• Offset - The input frame is relative to the current frame. So an input frame of 5 with the current frame at 5, the
actual evaluation will be at frame 10.
• Absolute - The input frame is the frame at which evaluation will happen.
Inputs
Outputs
• N/A
Examples of Usage
FCurve Info
Description
Inputs
Outputs
• Data Path - A string that contain the RNA data path for the animated property(For instance, if the location of
an object was the animated property then its data path will be:location)
• Array Index - An integer that contain the index of the animated property. Multidimensional property like
location,rotation and scale—XYZ—have an index for each channel, that is, x is 0,y is 1,z is 2.Properties that
are one dimensional will just return 0.
• N/A
Examples of Usage
FCurve Keyframes
Description
This node return the location and the value of the keyframes that composed the FCurve.
For instance, If one were to animate the x location of an object he would insert a keyframe at the frame 0 when the
object location was 0 and another keyframe at the frame 20 when the location of the object was 5. An fcurve would
be created as a result of this animation and this node will return two lists, KeyFrames Frames which will contain
[0,20] which is the location of our frames and KeyFrames Values which will contain [0,5] which is the x locations
of our frames.
Inputs
Outputs
• Keyframes Frames - A float list that contain the locations of the frames that composed the input fcurve.
• Keyframes Values - A float list that contain the values of the frames that composed the input fcurve.
• N/A
Examples of Usage
FCurve is a blender data which store the animation keyframes interpolation of the animated property.
A FCurve carry the animation data of only a single value which means, if the xyz locations of an object were animated,
three fcurves will be generated—One for each transformation channel.
Material
Description
This node lets you edit cycles node trees from inside Animation Nodes.
First, a material has to be selected in the material field, then, a node has to be selected in the node field, then, a list of
all the inputs will be contained in a list, select the required input and its input will be contained in the node to edit.
Inputs
Outputs
• N/A
• N/A
Examples of Usage
Viewport Color
Description
This node lets you set the viewport color of the selected material. It works for both cycles and internal materials.
Inputs
Outputs
• N/A
• N/A
Examples of Usage
Sound
Sound Bake
Description
This node let you decode, bake and cache a sound file.
Options
– Base - The base of the exponential function which the frequencies positions are define by. (This avoid
bad distribution of frequencies by using a logarithmic scale.)
– Exponent - The exponent of the exponential function which the frequencies positions are defined by.
(Input Zero if you want a linear definition of the frequencies.)
Inputs
• N/A
Outputs
• N/A
• N/A
Evaluate Sound
Description
This node returns the baked data—Ones that are baked using the sound bake node.
Options
• Type:
– Average - Returns a float that represent the intensity of the sound—Those that are baked using the
Bake button and not the Bake Equalizer Data.
– Spectrum - Returns a list of floats that represent the intensity of the frequencies—Those that were
baked using the Bake Spectrum button.
Inputs
Outputs
• Volume - The intensity of the sound at the current frame. (Only available in Average option)
• Volumes - A float list that contain the intensities of the Spectrum Data. (Only available in Spectrum option)
• Use Current Frame - If enabled, the sound will be evaluated at the current frame, if not, the sound will be
evaluate at the input frame.
Examples of Usage
Description
When sounds are baked using the Sound bake node, they are in fact added to the sequence editor at a certain channel,
and you can select a sound by its location in the sequencer channels.
Options
• Sound Type:
– Average - Returns the sound which was baked using the Bake Average button.
– Spectrum - Returns the sound which was baked using the Bake Spectrum button.
Inputs
• Sequences - The sequences at which the sound strips exist, you can get sequences list by using the Sequences
From Channel node.
• Bake Index - The index of the baked data. Multiple sound data can be baked using the Sound Bake node and
this index let you choose which one to get.
Outputs
• N/A
Examples of Usage
Sequence
Description
This node returns all the sequence strips in the sequence editor.
Inputs
• Scene - A scene.
Outputs
• N/A
Examples of Usage
Description
Inputs
Outputs
• N/A
Examples of Usage
Sequence Info
Description
Inputs
Outputs
• N/A
Examples of Usage
Geometry
Description
This node converts between the two representations of 3d planes—Point/Normal and Transformation Matrix.
Not to be mistaken by the primitive plane, Planes here are mathematical objects that can be defined by a normal and a
location or a transformation matrix since matrices can encode both the normal and the location of the plane.
Options
• Point/Normal To Matrix - This option will encode the input location and the input normal of the plane into a
transformation matrix.
• Matrix To Point/Normal - This option will decode the input transformation matrix and return the location and
the normal of the plane represented by that transformation matrix.
Inputs
• Point In Plane - A vector that correspond to the location of a point in the plane.(Only in the Point/Normal To
Matrix option)
• Plane Normal - A unit vector that correspond to the normal of the plane.(Only in the Point/Normal To Matrix
option)
• Matrix - A transformation matrix that represent the plane.(Only in the Matrix To Point/Normal option)
Outputs
• Point In Plane - A vector that correspond to the location of a point in the plane.(Only in the Point/Normal To
Matrix option)
• Plane Normal - A unit vector that correspond to the normal of the plane.(Only in the Point/Normal To Matrix
option)
• Matrix - A transformation matrix that represent the plane.(Only in the Matrix To Point/Normal option)
• N/A
Examples of Usage
Description
This node takes multiple vectors which represent points of a polygon and return the normal of that polygon.
At least 3 points are needed to compute the normal. If more than 3 points were input, the resulted normal will be the
average of the normals of each 3 points.
Inputs
• Point List - A vector list that contain the locations of the polygon points.
Outputs
• Normal - A unit vector that represent the normal of the polygon. A zero vector if points weren’t valid.
• Is Valid - A boolean which is True if blender was able to calculate the normal.
• N/A
Notes
The order of points matter as cross product is used to compute the normals, So points in reversed order will return a
normal that is in the reverse direction of the normal computed by the original list.
Examples of Usage
Description
This node takes 2 lines and returns the locations of 2 points (one on each of them) that are closest to each other.
Illustration
Blue points are the input points and orange points are the output points. Orange points are the closest points on the
lines.
Inputs
• Line 1 Start - The location of the starting point of the first line.
• Line 1 End - The location of the ending point of the first line.
• Line 2 Start - The location of the starting point of the second line.
• Line 2 End - The location of the ending point of the second line.
Outputs
• N/A
Description
This node returns the location of the point of intersection of the input line with the input plane.
Illustration
Blue points are the input points and orange point is the intersection with the input plane.
Inputs
Outputs
• Intersection - The location of the point of intersection of the input line and input plane.
• Is Valid - A boolean which is True if an intersection was found and False otherwise.
• N/A
Description
This node returns the location of the point of intersection of the input line with the input sphere.
Illustration
Blue points are the input points and orange points are the intersections with the input sphere.
Options
• Clip Inside Line - If enabled, intersections that are not on the input line will be ignored. By default, your line
define a straight line and not a segment, so points along that straight line are possible intersections.
Inputs
Outputs
• Intersection 1 - The location of the first point of intersection of the input line and input plane. (It is possible
that a line intersect a sphere two times, one at the front and one at the back)
• Intersection 1 - The location of the second point of intersection of the input line and input plane. (It is possible
that a line intersect a sphere two times, one at the front and one at the back)
• Is Valid 1 - A boolean which is True if the first intersection was found and False otherwise.
• Is Valid 2 - A boolean which is True if the second intersection was found and False otherwise.
If one of the Is Valid is True and the other is False, then this line is tangent to the sphere at the point of intersection.
• N/A
Description
This node returns some information about the intersection of input planes.
Illustration
Orange point is the intersection point and blue vector is the direction vector.
Demonstration
If you are familiar with the basics of solid geometry, you would know that a plane intersect another plane in a straight
line and not in a point. There is multiple ways to represent a straight line, the node uses the way of representing it
using a point and a unit vector to define its direction. This point could have been in any location along the line, but
the node tries to minimize the distance to the origin as much as possible, so it chooses the point along the line that is
closest to the origin point.
Inputs
Outputs
• Intersection Point - The location of the closest point to the world center that is on the line of intersection of the
planes.
• Direction Vector - A unit vector that describe the direction of the line of intersection of the two planes.
• Angle - The angle between input planes in radians.
• Is Valid - A boolean which is True if an intersection was found and False otherwise. If it is False, that means
that the planes are parallel or identical.
• N/A
Description
This node returns some information about the intersection of input sphere and input plane.
Illustration
Inputs
Outputs
• N/A
Description
This node returns some information about the intersection of the two input spheres.
Illustration
Inputs
• Sphere 1 Center - The location of the center of the first required sphere.
• Sphere 1 Radius - The radius length of the first required sphere.
• Sphere 2 Center - The location of the center of the second required sphere.
• Sphere 2 Radius - The radius length of the second required sphere.
Outputs
• N/A
Triangulate BMesh
Description
This node takes a bmesh data type and return a triangulated version of it.
Inputs
Outputs
• Quad Method - An integer that ranges between 0 and 3, it define the method used to perform triangulation of
quads.
• Ngon Method - An integer that is either 0 or 1, it define the method used to perform triangulation of Ngons.
Examples of Usage
Barycentric Transform
Description
Demonstration
Any point that lies on a triangle can be described in terms of the vertices of that triangle using what is known as
a convex combination. A convex combination is a linear combination of points (vectors) where all coefficients are
non-negative and sum to 1. If the point is close to one of the vertices of the triangle, then its coefficient will be the
largest.
The barycentric transform node compute the coefficients of the convex combination that describe the input point in
the input source triangle, then it uses those coefficients to compute the location of the point that lie on the input target
triangle through a convex combination of its vertices, see the below illustration if you didn’t get it.
Inputs
• Location - The location of the point that lies on the source triangle.
• Source Triangle Points - The location of the vertices of the triangle used to compute the coefficients of the
convex combination from.
• Target Triangle Points - The location of the vertices of the triangle to apply the convex combination to.
Outputs
• Morphed Location - The location of the point resulted from the convex combination.
• N/A
Examples of Usage
Construct KD Tree
Description
Demonstration
KD Trees is a space-partitioning data structure that can be used in multiple spatial searching applications like:
• Find the nearest point to a given point.
• Find points that lie inside a circle of given radius and center.
This data structure is used instead of a traditional nearest neighbor search because it is tremendously faster having a
time complexity of O(n) in the worst case.
Inputs
• Vector List - A vector list that contain the locations of the points.
Outputs
• N/A
Examples of Usage
Description
This node finds the nearest point in the input KD Tree to a given point.
Inputs
Outputs
• Vector - The location of the point that is nearest to the input point.
• Distance - The distance between the output point and the input point.
• Index - The index of the nearest point to the input point in the list used to construct the KD tree.
• N/A
Examples of Usage
Description
This node finds the nearest points in the input KD Tree to a given point.
Inputs
Outputs
• Vectors - The locations of the points that is nearest to the input point.
• Distances - The distances between the output points and the input point.
• Index - The indices of the nearest points to the input point in the list used to construct the KD tree.
• N/A
Examples of Usage
Description
This node finds the points that lie inside a sphere with a given center and radius in the input KD Tree.
Inputs
Outputs
• Vectors - The locations of the points that lies inside the sphere defined by the input vector and radius.
• Distances - The distances between the output points and the input point.
• Index - The indices of the nearest points to the input point in the list used to construct the KD tree.
• N/A
Examples of Usage
Description
This node constructs a BVH Tree from the input mesh data.
Demonstration
BVH trees or Bounding Volume Hierarchy trees are tree data structures that classify objects in a tree structure which
then can be used in:
• Ray Tracing
• Collision Detection
BVH trees are convenient to do ray tracing and collision detection because they are a lot faster than traditional ray
intersection operations.
Inputs
• Vector List - A vector list that contain the locations of the vertices of the mesh.
• Polygon Indices - A polygon indices list that contain the polygon indices of the mesh.
• Epsilon - It is the intersection threshold, it tells the BVH tree how close can a point be to the mesh so that it
can be considered an intersection. So a high epsilon value will consider a point that haven’t reached the mesh
surface yet an intersection. It is not recommended to use a high epsilon value as it can be very slow.
Outputs
• N/A
Examples of Usage
Description
This node sends a ray through the scene and gather some information about its intersection with the mesh defined by
the BVH tree.
Options
• Start At Infinity - If enabled, the ray will start from an infinitely far point along the line defined by the input
Ray Direction and Ray Start (Which in this case doesn’t represent the actual starting point but just the position
of the ray). Max distance input will also be unusable if enabled.
Inputs
• BVH - A BVH tree that represents the mesh you want to intersect the ray with.
• Ray Start - A vector that represents the starting point of the ray.
• Ray Direction - A vector that represents the direction of the ray. It doesn’t have to be normalized.
• Min Distance - It is distance from the ray start at which intersections are starting to be considered.
• Max Distance - It is the distance from the ray start at which intersections are not considered anymore.
Outputs
• Location - A vector that represents the location of the point of intersection if there was any. (It is a null vector
if there was no intersection)
• Normal - A unit vector that represents the surface normal at the point of intersection if there was any. (It is a
null vector if there was no intersection)
• Distance - The distance between the ray start and the point of intersection if there was any. (It is zero if there
was no intersection)
• Polygon Index - The index of the polygon that the ray intersect if it did. (It is -1 if there was no intersection)
• Hit - A boolean which is True if there was an intersection and False otherwise.
• N/A
Notes
• Adjusting minimum and maximum distances won’t affect the speed of the ray cast.
• If you want to define the ray by 2 points one of them is the starting point, linear algebra tells you to subtract
your second point from your starting point then plug it as the ray direction.
Examples of Usage
Description
This node find the nearest point on the surface of the mesh defined by the BVH tree to the input point.
Inputs
• BVH - A BVH tree that represents the mesh you want to find the point on.
• Vector - A vector that represents the location of the point to find the point nearest to it.
• Max Distance - It is the distance from the input vector at which the node stop searching and return nothing.
Outputs
• Location - A vector that represents the location of the nearest point if there was any. (It is a null vector if there
wasn’t any)
• Normal - A unit vector that represents the surface normal at the nearest point if there was any. (It is a null vector
if there wasn’t any)
• Distance - The distance between the input vector and the nearest point if there was any. (It is zero if there wasn’t
any)
• Polygon Index - The index of the polygon that the nearest point belong to if there was any. (It is -1 if there
wasn’t any)
• Hit - A boolean which is True if a nearest point was found and False otherwise.
• N/A
Notes
• The only situation where a point can’t be found is when the distance between the input vector and its nearest
surface point is larger than the input max distance.
Examples of Usage
Is Inside Volume
Description
This node check if a point exist inside the mesh defined by the BVH tree.
Inputs
• BVH - A BVH tree that represents the mesh to check the point against.
• Vector - A vector that represents the location of the point to check whether it is inside the mesh or not.
Outputs
• Is Inside - A boolean which is True if the input point lies inside the mesh defined by the BVH tree and False
otherwise.
• N/A
Notes
• This node works only on manifolds, that is, closed meshes that can be considered a volume. Non-manifolds
however are computed stochasticly and unreliable.
Examples of Usage
Viewer
Viewer
Description
This node view what ever is input to it. Simple data types like integers and floats and small text will be drawn on the
node itself. If Animation Nodes feels like data is a bit large like lists and big texts, it will draw a dedicated floating
viewer to view those data.
Notice how integers, vectors and texts were displayed in the node, while lists where displayed in a dedicated floating
viewer.
• Font Size - The size of the drawn text on the dedicated floating drawer.
• Max Rows - Maximum amount of rows to draw for the dedicated floating viewer.
• List Start - The amount of list elements to display from the start.
• List End - The amount of list elements to display from the end.
• Console - If enabled, the data will be printed on the terminal.
• Text Block - If enabled, the data will be written on a blender data block.
3D Viewer
Description
This node draws points in the 3D viewport based on a list of vectors or transformation matrices that defines those
points position.
Options
Loop Viewer
Description
This node is put inside a loop where it prints the input at each iteration in a new line in a text block.
Interpolation Viewer
Description
This node plot the input interpolation on a [0,1] range in a floating dedicated viewer.
Subprograms
Group
Lets us assume that you have three objects and you want to reset their transformations, hide them and shade them
smooth. One might make a node tree for that and copy it three times for each object. This would be extremely
inefficient both for performance and usability.
The solution is to use what is known as a Group or a Function, this group is a container that takes some inputs, do
something with them and maybe output some data as well. Once the group is defined, it can be called using an Invoke
Subprogram node and used multiple times in different areas of your node tree.
Example 1
Below is a node tree, that reset input object transformations, hide the object and shade it smooth. And we are going to
make a group out of it and expose the options.
This group has inputs but no outputs, it is what you might call an Operational Group because it doesn’t return
anything, it only does.
Had I defined the group, I can call it using the Invoke Subprogram node by searching for the group name or by
adding it from the subprograms menu in the toolbar or from the nodes menu. Notice that I didn’t have to copy the
whole node tree for each of the three objects, I just copied the group, which is not only more organized but also faster!
The group input node lets you define the default values for each of the inputs, it only works for basic data types like
numbers, vector and booleans. Those values will be set to the invoke node as soon as you add it.
Example 2
We will now make a group that takes some inputs, process them, then output some data. Our function will compute
Euler Characteristic which is equal to V-F+E.
After I implement the node tree and add the group input node, I can click the Output Node button in the group input
node to add a group output node which I then can add my outputs to.
By invoking the group and input the values for the Tetrahedron, Hexahedron and Octahedron, we see that Euler
Characteristic is indeed 2 for each of them.
Network Error
A network error is raised when there is something wrong with your connections. And it is raised in two main situations,
if you connect a node that depend on the group to some node inside the group itself and if the group output node has
no group input as it can’t exist on its own.
If you removed the Group Input node without removing the Group Output node with it. An error will be raised because
Group Output can not exist on it own. To fix this, you either remove it, or you add a new Group Input node, connect
your outputs and then click Use Input In Network button which will scan the connected network for an Input Group
node. Or you could click the plus button called Add Input to add a new Group Input.
Loop
Loops are subprograms that runs specific number of times, it can be used to repeat an action multiple times or to
automate some action.
Example 1
By default, there is a parameter called Iterations and it defines the number of times the subprogram will run, lets say
we defined it to be 5, then the loop will run 5 times. Each run has a distinct variable called index that starts from zero
and ends by n-1 where n is the number of runs which is 5 in this case. This means that at the first run, index will be
0, at the second run, the index will be 1, at the third run, the index will be 2, and so on. There exist another variable
Iterations that is constant for all runs and is equal to the numbers of runs or iterations, which is 5 in our example.
As you may see, we have a parameter called Iterations and two inputs called Index and Iterations, if I viewed both
inputs using the Loop Viewer node (Which prints inputs of each run in a separate line), you will see that the index of
the first run (first line) is 0 and its iteration is 5, the index of the second iteration is 1 and its iteration is 5, and so on.
Example 2
Loops enable us to append values computed inside the loop to some output list, the the output list will contain the
value computed at the first iteration as the first element, the value computed at the second iterations as the second
element and so on. Those outputs are called generators and can be added by clicking on the New Generator Output
button and then choosing their type.
As you may see, we added a new integer generator output which appends the index each iteration. And the output is
an integer list that contain the indices.
If I divided the index by the iterations minus one, the resulted list will include floats that ranges between zero and one.
This is because indices ranges between zero and n-1 where n is the number of iterations. Notice that we changed the
output generator to float.
Loops can also append multiple elements at the same time when given a list.
Example 3
The output generators has a hidden by default input called Condition which is a boolean. This input basically asks
you “Should I append the input value?” if the boolean was True then it is appended normally, if it was False, then the
value is not appended.
In the above example, we only append the value if the index is an even integer resulting in a list of even numbers. We
notice that the output list length can be different that the input iterations.
Example 4
Loops can loop over a list of values, that is, for each value in the input list of values, the loop will run, so it should be
noted that the number of iterations is equal to the length of the list. A new input will appear which include the value
in the list at the current index, so at the first iteration, the value will be the first value in the list, in the second iteration,
the value will be the second value in the list, and so on. A new iterator can be added by clicking on the New Iterator
button.
In the above example, we append the integer if and only if it’s an even number. So if you compared the input list to
the output list you will see that all odd numbers are not included.
Multiple iterator lists are permitted and in this case, the number of iterations will be equal to the the length of the
smallest list.
The above example multiply two lists, notice that the second list has an 5 elements while the first list has only 4 and
subsequently the loop only runs 4 times and the output is a list of four elements.
Example 5
Loops can have parameters which are constant for all iterations. A new parameter can be added by clicking on the
New Parameter button.
The above example double all the elements of the input list.
Each Parameter and iterator have some options which can be edited in the Advanced Node Settings of the subprogram.
Description
A description for the function of the loop. This description only appears in the Invoke Subprogram node when
choosing the required subprogram, however, it is a good practice to write a description for each subprogram so that
other users can understand its function.
Example 6
Each iterator has an option Use Iterator As Output which if enabled will just add the input iterator as an output,
this option may seem useless but it actually have a specific function which is to define the operation flow, look at the
following example.
Let us assume that we want to hide a group of objects then unhide them again for no good reason. One could make a
loop that hide and unhide objects then invoke that loop twice, one for hiding and one for unhiding, and this is what we
did in the left setup. However, it doesn’t work, my objects are still hidden even though I unhide them using the upper
loop, this happens because Animation Nodes doesn’t know which loop to execute first so it just executed the hiding
loop last and that’s why our objects are hidden. So to ensure that a loop will execute before another and since they
both take the object list as input. We expose the iterator as an output then use that output for the second loop, this is
how it the right setup work.
Example 7
The above example finds the maximum number in the input integer list. We first add a parameter and disable it as an
input and enable it as an output, that way, it is not visible as an input but it is visible as an output. I add a reassign
node for that parameter and make its condition visible. At each iteration, I check if the iterator value is larger than the
value of the parameter and if it is, I assign the iterator value to the parameter, I also add another condition such that if
the index is zero (if it is the first iteration) then I automatically reassign even if the iterator value is not larger than the
parameter value.
At the first iteration, the iterator was 16 and it gets assigned to the parameter because of the equal to zero condition,
at the second iteration, the iterator was 36 which is larger than the current parameter value which is 16 (assigned from
the last iteration), so I reassign the parameter to be 36, at the third iteration, the iterator is -25 which is not larger than
the current value of the parameter 36 so we don’t assign it. Since we enabled the output option for the parameter, it is
available as an output for the subprogram carrying the last assigned value which was 36 which is the largest value.
Example 8
The last feature of loops is the break condition which is a boolean. A break condition basically asks you every iteration
“Should I proceed to the next iteration?”, if it is True, the loops carry on executing the loop, it if was False, the loop
exist after current iteration and doesn’t carry on executing other iterations.
The example above slice a list, in other words, it returns a list with that starts at a specific index and ends with another
in the input list. This can be done using a generator condition where I append the value if it is larger than the start
index and lower than the end index, but this would be inefficient, if my list contain 100 element and I only want the
first 3 elements, the loop will have to run 100x. The solution is to use a break condition, to basically exist the loop
when you are sure that no other elements are needed.
More Examples
A lot of nodes documentation include loop examples, so make sure to browse some nodes for more example on loops.
Script
Animation Nodes provide you with a lot of helpful nodes for variaty of applications, however, some nodes may have
some limitations and thus force you to write some code. The script node enables you to write python code and invoke
it inside your node tree without having to write new nodes.
Example 1
In this example, the script just prints Hello World it doesn’t have any inputs or outputs.
Example 2
In this example, two inputs were given and an output is expected. When you add an input, it is as if you initialized a
variable with its name at the top of you code, do in our case, it is like we write a, b = 2, 3. The output is expected to
be initialized with the same name as the output name, so in your code, you have to equate res with a value which in
our case was the sume of the input values.
Example 3
In this example, the node return the x resolution of the scene. It doesn’t have any inputs. Notice that I didn’t have
to import the blender python API (bpy) thats because it is already imported in Animation Nodes. However, we can
import any modules we need assuming they are installed of course. Star imports won’t work because they are bad for
performance, so something like from bpy import * won’t work.
• Description - A description for the function of the script. This description only appears in the Invoke Subpro-
gram node when choosing the required subprogram, however, it is a good practice to write a description for
each subprogram so that other users can understand its function.
• Interactive Mode - If enabled, animation nodes will automatically import changes you make in the text editor.
If disabled, a button will appear Import Changes that enables you to import changes manually when needed.
• Debug Mode - If anbled, errors in the script will be drawn on the node. If disabled, errors becomes fatal ones
and will stop node executions till solved, so it is better to leave this option enabled.
• Initialize Missing Outputs - If enabled and outputs are not initialized, they will get initialized with their default
values, avoiding not type errors.
• Correct Output Types - If enabled, AN will try to correct output types as much as possible and return default
value if it couldn’t. For instance, if the output is an integer and it was initialized with a float, it will get converted
to an integer by rounding.
Node trees you create can be considered as programs but in a visual form. Those node trees may contain portions
where node setups are similar or with slightly different parameters, copying the same node setup to multiple locations
in the node tree would be extremely inefficient. Likewise, one may need to apply the same node setup to multiple
objects, doing that manually would also be inefficient and tedious.
Animation Nodes provide us with Subprograms which are smaller node trees that can be created once and used all
over the node tree as much as needed.
Animation Nodes have three types of subprograms which can all be called using the Invoke Subprogram node after
they are defined. Such subprograms should be independent of of the node tree itself, so you can’t use a node that
depend on the subprogram inside the subprogram. So it is recommended that you put all your subprograms in a
portion of the node editor away from the node tree itself.
Developer Guide
Setup Environment
Attention: The cloning target location used to be the addon folder of Blender. This is no longer the case.
You can clone it anywhere you want.
1. Install Python (Anaconda) First we have to install Python itself. You should use Anaconda for that. Just take
the newest version.
Installing Python this way has multiple benefits: - easier installation of other packages - easier handling of
multiple Python environments
Make sure that Anaconda has been added to the PATH system environment variable. You can test if the
installation worked by running python -V (in a newly opened terminal window). The output should
include Continuum Analytics, Inc. somewhere.
Depending on what Blender version you want to compile the addon for, different versions of Python are
necessary. All newer Blender versions up until Blender 2.79 officially use Python 3.5.x. The plan is to
update to Python 3.6 in the Blender 2.8 project.
As Animation Nodes currently does not work with Blender 2.8 I guess you want to compile using Python
3.5. What we can do now is to create a Python environment for that version. Fortunately Anaconda makes
this fairly easy to set up.
To create the Python 3.5 environment, just run conda create -n py35 python=3.5
anaconda. The new environment will be called py35. To activate it you need to run activate
301
Animation Nodes Manual, Release 2.0
py35 (or in some terminals source activate py35). When you now run python -V it should
show you that you are using Python 3.5. You have to activate the environment everytime you reopen the
terminal. More Information can be found here.
Note: The following steps should all be executed in the new correct Python environment.
2. Install Cython When you used Anaconda, it will be easy to install Cython.
Just run conda install cython.
3. Build Animation Nodes This step is the most error prone, if you have any problems, checkout the troubleshoot-
ing section at the bottom.
Go to main directory of Animation Nodes. This folder should contain a file called setup.py.
Run python setup.py. This can take a while.
It also creates a config.py file next to the setup.py. You can use it to specify where the compiled
addon should be copied. This should be the path to Blenders addon directory. Once you changed the file,
you can the setup.py file again. This time it copies all files into the specified location.
Later when you want to recompile AN, just run python setup.py. It will only recompile and copy
the files that changed.
The setup.py file has a few command line arguments:
• --all This will rebuild all cython files which can be quite useful when Cython does not automatically detect
all files that need to update after you’ve made a change. Should not be needed in most cases though.
• --export Create an animation_nodes.zip file that can be shared with others.
• --nocopy Don’t copy the compiled build over to Blenders addon directory.
Troubleshooting
If your problem cannot be solved with the information, please report it. Also feel free to contact me (Jacques Lucke)
personally. I’d like to help everyone who wants to compile AN. The more people are able to do this, the better.
Most errors happen because Python cannot find a correct C compiler to compile the extension modules. Here are some
very helpful links on the topic:
• Python Windows Compilers
• Compile C extensions on Windows 10 and Visual Studio 2017
Basicly you will have to install Visual Studio 2017 (Microsoft does not want you to install older versions) and use the
x64 Native Tools Command Prompt for VS 2017 to run the python setup.py command.
If Visual Studio 2015 is already installed on you machine but you get this error: unable to find
vcvarsall.bat it is relatively easy to fix:
You need to change the installation installed features. More information can be found here: http://stackoverflow.com/
a/35243904/4755171
Node Development
Welcome to this introduction into node development in Animation Nodes 2.0 or higher. In this guide you will learn
how to get started with writing your own nodes (and I suggest you learn this before you try to modify existing nodes!).
It will consist of multiple parts. Each part will go a bit more into detail so that you will be able to write more complex
nodes in the end. The following tutorials expect you to have a basic knowledge in Python.
To develop your own nodes you have to setup your development environment first. There are basicly two possible
setups:
1. Complete Setup: This mainly means that you are working in the real git repository of Animation Nodes. You
will have to make sure that you can compile the code etc. More information on how to do that can be
found here: Setup Environment
2. Lightweight Setup: The easiest way to start developing your own stuff. Basicly you just install the addon
normally and work directly in Blenders addon folder. I definitly suggest to use this method at first because
you can forget about compiling and all that stuff that can cause trouble. So if you have AN already installed
you don’t need to do anything.
Once you setup everything, you’ll have to choose where to put your new node in the existing code base. Usually
all nodes are in a subdirectory of the animation_nodes/nodes/ folder. However, they can be anywhere in the
Animation Nodes package. You can even decide to to create your own folder for your nodes. In that case don’t forget
to also create a new empty __init__.py file in that new folder. It tells Python that this folder is part of Animation
Nodes.
For this tutorial I suppose that the new file will be in a folder like animation_nodes/nodes/category/. If
you put it somewhere else you have to adjust the relative imports accordingly.
Now you are ready to create the actual file. Since Animation Nodes 2.0 there are two different types of source code
files:
1. Python files: .py These are just normal python files. If you choosed the lightweight setup you have to use this
type. Most nodes should be of this type, there are only a very few nodes which aren’t. I suggest to choose
this type always at this stage. It will be easy to change it later if necessary.
2. Cython files: .pyx Cython is another programming language that builds on top of Python. The main benefit
is that it can be compiled into machine code which can make it much faster than normal python code.
For most nodes this is absolute overkill, the performance benefit will only be visible be computational
expensive operations. Also you can only work with Cython files when you setup the complete working
environment.
The first simple node we want to create will be able to copy the location of one object to another object with an offset.
First create a file for this node following the rules above. Then copy this little template code into the file:
1 import bpy
2 from ... base_types import AnimationNode
3
5 bl_idname = "an_TemplateNode"
6 bl_label = "Template"
7
8 def create(self):
9 pass
10
11 def execute(self):
12 pass
This template is what I personally use for all new nodes, it is very easy to build up on it.
Now we have to choose a name for our new node. The most important thing here is the bl_idname because this is
the identifier for your node, when you change it later on, all files that used this node will be broken. Also it should
have a prefix like an_ so that it there will be no problems with other addons. So make sure that you give it a good
name that tells as exact as possible what the node does. The class name and the bl_label property can be changed
later without problems if necessary. Here is the updated “header” for our specific example:
1 class CopyLocationWithOffsetNode(bpy.types.Node, AnimationNode):
2 bl_idname = "an_CopyLocationWithOffsetNode"
3 bl_label = "Copy Location with Offset"
The next step is to create the sockets we need. Therefor there is the create(self) function. In our example node
we need three inputs. One source object, one target object and the offset vector. So let’s create those:
1 def create(self):
2 # Type Name Identifier
3 self.newInput("Object", "Source", "source")
4 self.newInput("Object", "Target", "target")
5 self.newInput("Vector", "Offset", "offset")
This node is already fully functional now. Below is all the code for this node again. To test it you have to restart
Blender. If you you used the Complete Setup described at the top you also have to run python setup.py in order
to recompile the code and copy it over to Blenders addon directory. Otherwise restarting Blender is enouph.
1 import bpy
2 from ... base_types import AnimationNode
3
8 def create(self):
9 self.newInput("Object", "Source", "source")
10 self.newInput("Object", "Target", "target")
11 self.newInput("Vector", "Offset", "offset")
12
In the last part we created our first little node that copies the location from one object to another object and applies a
custom offset. Here is the result of the last chapter:
1 import bpy
2 from ... base_types import AnimationNode
3
8 def create(self):
9 self.newInput("Object", "Source", "source")
10 self.newInput("Object", "Target", "target")
11 self.newInput("Vector", "Offset", "offset")
12
In this part we want to extend this node. At first we want to change the node so that it outputs the new location of the
target object. Therefor we need to write a new line in the create(self) function like so:
1 def create(self):
2 self.newInput("Object", "Source", "source")
3 self.newInput("Object", "Target", "target")
4 self.newInput("Vector", "Offset", "offset")
5 self.newOutput("Vector", "Target Location", "targetLocation")
Pretty straight forward, right? Now I have to adapt the execute method so that it actually returns a vector. At the
moment it just return None all the time. It is very important that execute always returns a vector now. All the other
the might use this value depend on this being a vector and don’t check the type explicitly. This means that you should
return default values if there is anything wrong in your node. The new method can look like so:
1 def execute(self, source, target, offset):
2 if source is None or target is None:
3 return Vector((0, 0, 0)) # this is the default value
As you can see we create this Vector((0, 0, 0)) object. Every individual vector is expected to be this type.
In order to make this code work we need to import the type at the top of the file: from mathutils import
Vector.
The node is completely functional now again.
1 import bpy
2 from mathutils import Vector
3 from ... base_types import AnimationNode
4
9 def create(self):
10 self.newInput("Object", "Source", "source")
11 self.newInput("Object", "Target", "target")
12 self.newInput("Vector", "Offset", "offset")
13 self.newOutput("Vector", "Target Location", "targetLocation")
14
Now we want to change the node so that it outputs not only the location of the target object but also the location of the
source object. I guess at this point it is clear how we have to change the create(self) method.
1 def create(self):
2 self.newInput("Object", "Source", "source")
3 self.newInput("Object", "Target", "target")
4 self.newInput("Vector", "Offset", "offset")
5 self.newOutput("Vector", "Source Location", "sourceLocation")
6 self.newOutput("Vector", "Target Location", "targetLocation")
Python has the wonderful feature that you can easily return multiple objects from a method. To return two objects we
will use exactly this feature. There are two main things you have to know about that:
1. The amount of returned objects always has to match the amount of output sockets.
2. The order of the returned objects has to correspond to the order of the output sockets.
To fulfill these two requirements the code of the execute method can look like so:
1 def execute(self, source, target, offset):
2 if source is None or target is None:
3 return Vector((0, 0, 0)), Vector((0, 0, 0)) # we need two defaults as well
4
Again our node is fully functional and so we come to the end of this part.
1 import bpy
2 from mathutils import Vector
3 from ... base_types import AnimationNode
4
9 def create(self):
10 self.newInput("Object", "Source", "source")
11 self.newInput("Object", "Target", "target")
12 self.newInput("Vector", "Offset", "offset")
13 self.newOutput("Vector", "Source Location", "sourceLocation")
14 self.newOutput("Vector", "Target Location", "targetLocation")
15
Part 3 - Properties
In this chapter we want to give the nodes some properties so that the user of our node can decide which axises he wants
to copy from one object to the other. We start with the result of the first part, because we don’t really need output
sockets in order to understand this. So here is the original code:
1 import bpy
2 from ... base_types import AnimationNode
3
8 def create(self):
9 self.newInput("Object", "Source", "source")
10 self.newInput("Object", "Target", "target")
11 self.newInput("Vector", "Offset", "offset")
12
In order to create properties we first have to import the property types Blender provides: from bpy.props
import *.
Note: In general it is a bad idea to do “import star” in Python. However this is the only case where I think this is
acceptable because it makes coding much easier and every Blender developer knows what happens (it imports these
properties).
Now we want to create three properties, one for each axis. They should have the type bool because we want to turn
specific axises on or off.
1 import bpy
2 from bpy.props import *
3 from ... events import propertyChanged
4 from ... base_types import AnimationNode
5
As you can see I also imported the propertyChanged event handler. This is absolutely necessary but results in
a better user experience. This way when the user changes these properties and Property Changed ist activated in the
Auto Execution panel an update is triggered. Otherwise Animation Nodes cannot know that these properties changed.
As always the next step is to implement this functionality in the execute method.
1 def execute(self, source, target, offset):
2 if source is None or target is None:
3 return
4
This node is fully function again but there is still one problem. The user can’t see the properties so far. To change
that we have to implement another function called draw(self, layout) that will specify which properties will
be drawn in the node itself.
1 def draw(self, layout):
2 layout.prop(self, "useX")
3 layout.prop(self, "useY")
4 layout.prop(self, "useZ")
Now the new feature is complete, here is the full code again:
1 import bpy
2 from bpy.props import *
3 from ... events import propertyChanged
4 from ... base_types import AnimationNode
5
14 def create(self):
15 self.newInput("Object", "Source", "source")
16 self.newInput("Object", "Target", "target")
17 self.newInput("Vector", "Offset", "offset")
18
22 layout.prop(self, "useZ")
23
The development method you’ve seen so far works great and should always be used when possible, because it keeps
the code clean. However it has one big disadvantage, it only works when the amount of sockets stays the same all the
time. This is because the execute function has a fixed number of parameters.
Many a bit more advanced nodes support multiple modes though. E.g. the Math nodes support a lot of different
operations and some of these require different sockets. In order to show how nodes with multiple operations work,
we’ll forget about the node we developed in the last parts and focus on a new one.
We now want to develop a node called Generate Points (maybe you should try to find a more specific name...) that has
two modes:
1. Line: Takes two vectors (start and direction) and an integer (amount) as input and calculates a vector list with
points on the line.
2. Circle: Takes a float (radius) and an integer (amount) as input and calculates a vector list with points on the
circle.
Obviously the old approach doesn’t work here anymore because both modes have different amounts of inputs. But
before you’ll learn about another approach on how node execution works in AN, we’ll focus on how to create a node
with dynamic sockets in the first place.
For our example we will use an EnumProperty to allow the user to switch between both modes. Furthermore we
have to tell Animation Nodes that it has to recreate the sockets when the mode changes. There are many nodes in AN
already which have to do this as well. The general structure of the code looks like so:
1 import bpy
2 from bpy.props import *
3 from ... base_types import AnimationNode
4
22 def create(self):
23 self.newInput("Integer", "Amount", "amount")
24 if self.mode == "LINE":
25 self.newInput("Vector", "Start", "start")
26 self.newInput("Vector", "Direction", "direction")
27 elif self.mode == "CIRCLE":
28 self.newInput("Float", "Radius", "radius")
29 self.newOutput("Vector List", "Points", "points")
30
So now that you know how to make nodes with changing sockets, it is now time to show how to write the execution
code in that case. The solution is to define a new function called getExecutionFunctionName(self). It
returns a string that contains the name with the function that should be called at that moment. Basicly it looks like this:
1 def getExecutionFunctionName(self):
2 if self.mode == "LINE":
3 return "execute_Line"
4 elif self.mode == "CIRCLE":
5 return "execute_Circle"
6
With that new knowledge it is easy to fill in the missing code in the correct functions to get the final node. I’ll just skip
forward to the end now because how to calculate points on lines and circles is not part of this tutorial. However here
is the code:
1 import bpy
2 from bpy.props import *
3 from math import sin, cos, pi
4 from ... data_structures import Vector3DList
5 from ... base_types import AnimationNode
6
7 modeItems = [
8 ("LINE", "Line", "Distribute points on line", "", 0),
9 ("CIRCLE", "Circle", "Distribute points on circle", "", 1)
10 ]
11
19 def create(self):
20 self.newInput("Integer", "Amount", "amount")
21 if self.mode == "LINE":
22 self.newInput("Vector", "Start", "start")
23 self.newInput("Vector", "Direction", "direction")
24 elif self.mode == "CIRCLE":
25 self.newInput("Float", "Radius", "radius")
26 self.newOutput("Vector List", "Points", "points")
27
31 def getExecutionFunctionName(self):
32 if self.mode == "LINE":
33 return "execute_Line"
34 elif self.mode == "CIRCLE":
35 return "execute_Circle"
36
Socket Types
A socket is the point where 2 nodes can be linked. Therefor sockets are the main interface between a node and the
user. You might think having many different socket types is unnecessary but it has very important advantages.
• It can help finding which sockets make sense to connect; Although this is not always the case because some
sockets change there type automatically when they are linked.
• The clearer a socket is defined the better the performance of a node because it doesn’t have to check the input
type which adds a lot of overhead. That is also the main reason why Python is slower than many compiled
languages.
Currently there are 36 different socket types, but this may change over time. To see which sockets you have installed
go to the addon directory and take a look into the sockets folder. All files except __init__.py and info.py
represent one socket.
Many sockets come in pairs. E.g. there is an Object and an Object List socket. List sockets are by default just
an empty python list (not a tuple!). To get the bl_idname of a list socket take the base id name and insert List
before Socket. Sockets that have a corresponding list data type are often called base sockets.
Node API
Class Properties
bl_idname: Unique string that identifies the node type. Make a good decision here because later changes will break
existing files. Examples are an_FloatMathNode or an_EvaluateSpline.
bl_label: String that will be used as default name and in the search box.
The next class properties are only optional.
onlySearchTags: When True the bl_label won’t be used in the search box.
Data Interface
This is a passive node that stores data so that other scripts can access (and change) it. The main idea is that another
script references this node and calls the getValue or setValue function.
Here is an example on how to access the data:
1 import bpy
2
3 tree = bpy.data.node_groups[INDEX_OR_NAME]
4 if tree.bl_idname == "an_AnimationNodeTree":
5
6 node = tree.nodes[INDEX_OR_NAME]
7 if node.bl_idname == "an_DataInterfaceNode":
8
9 node.setValue(VALUE)
10 node.value = VALUE
11
12 // or
13
14 value = node.getValue()
15 value = node.value
Note: After restarting Blender the stored data will not be available anymore.
Documentation Guide
Formatting examples
Sidebar Title
Subheadline
Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate
strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view
of disruptive innovation via workplace diversity and empowerment.
Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a
new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User
generated content in real-time will have multiple touchpoints for offshoring.
Subsubheadline
Capitalise on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with
additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop
1 def my_function():
2 "just a test"
3 print(8/2)
Todos
Release Notes
It is possible to bake a custom amount of frequency ranges in the Sound Bake node. Previously there were 10 hardcoded
ranges.
317
Animation Nodes Manual, Release 2.0
The Debug and Debug Drawer node have a Conditional input now (which is hidden by default). This allows more
precise and easier debugging in loops and other cases where a node is executed multiple times with different inputs.
This node can easily be used together with the new conditional debug nodes. It’s important to know that this node will
only work while during creation of the node tree. When you start the render it is disabled, because your render should
not depend on the selection.
The two new socket types Shape Key and Shape Key List are part of AN now. Also the Object Instancer node handles
objects with shape keys much better in v1.5.
There are two new socket types for fonts (Font and Font List). Furthermore you have the ability to set the font of a text
object using the Text Object Output node now.
New Snap and Absolute operation that can be used in the Vector, Euler and Quaternion Math node. This enables you
to snap values to specific increments.
Note: Snap operation is also added to Float Math node, while removing the Round operation from the list. (To round,
you can use Snap by setting Step Size to 1, 0.1, 0.01 etc. Or use the independent Round node)
Previously you were not really able to work with quaternions in a more complex way.
This node can convert a text into a number which is handy when you want to parse a text block or something similiar
that contains numbers.
The Rotation Matrix node allows to create a rotation matrix for all 3 axis at once now (previously you had to create
three individual matrices and combine them or misuse the Compose Matrix node which is slower).
The Shear Matrix node calculates a matrix that can be used to shear meshes. You can’t use this matrix on objects
because it cannot be decomposed into location, rotation and scale. Instead it can be used with the Transform Vector
List node.
BVH Tree
Next to the KD-Tree which can be used to find close points, you have access to Blenders BVH-Tree module now. A
BVH Tree is a data structure that allows quick ray cast operations on many polygons. Make sure to use Blender 2.77
when you use these nodes because there is a bug in the previous version. The Raycast and Find Nearest Surface Point
nodes have additional Min/Max Distance inputs and a Polygon Index socket output which you can unhide in the node
panel in the right.
Access many different properties of a given sequence (the image doesn’t show all).
The Particle Info node gives you access to some more particle properties like hair points now (the image only shows
a subset of the possible outputs).
The same node can be archieved with a combination of some existing nodes, but having a specialised node for that
makes everything easier.
Dynamic node labels allows you to have cleaner node trees because some nodes can show useful information in their
label, which allows you to collapse them without disadvantages.
This node allows other addons to exchange data with AN. More information is available here: http://
animation-nodes-manual.readthedocs.org/en/latest/dev_guide/data_interface.html
ID Key System
The ID Key system got a major overhaul again. It is much more stable now, which means it doesn’t accidently remove
some sockets. In general the ID Key System allows you to store data for individual objects in custom properties. The
best known usecase for that is to store initial transformations of multiple objects so that you can still access them when
the objects were moved by AN.
The Object Instancer takes Scene List as input instead of only one scene now. This allows you to put the the instances
into multiple scenes without having to make multiple Instancers.
Each node tree has a global Scene that is used in all Scene and Scene List sockets by default. The global scene can by
changed in the Animation Node Tree panel. It is never None.
List Operations
There are two new nodes that deal with lists now. The Set List Element and Remove List Element nodes.
The Remove List Element node has three modes:
• Remove only the first occurrence of an element (limited to certain types)
• Remove all occurrences of an element (limited to certain types)
• Remove the element at a specific index (works with all list types)
This allows to model functions for eg finding the minimum and maximum using a Loop. The Condition socket is
hidden by default.
This new node allows you to dynamically link and unlink objects from an object group.
The Number List Math node has a new operation now that can be used to quickly calculate the average of multiple
numbers.
The new Vector List Math supports adding multiple vectors together as well as calculating the average.
The Overview panel allows you to turn Auto Execution on and off for multiple node trees at once. Beside that you can
jump to a specific tree by clicking on its name now.
Clicking on the Statistics button opens the new Statistics View that can give some interesting insights into how large
your node tree is. The two numbers in the Nodes column is the total node count as well as the functional nodes
(Reroute and Frame nodes are excluded).
The Set Vertex Color node didn’t change much in its appearance but it is 15x faster now. What makes this node so
special is that it is the only non-hacky way to modify colors of individual objects that use the same material. (A hacky
way would be to missuse the pass_index property.) Also it has very little overhead when the same color is already set.
The ultimate solution to this problem is to get access to Custom Properties of individual objects in Cycles materials.
Sorting lists was only possible using Expression or Script nodes so far. Using the new Sort List node this is not needed
anymore. The node automatically adapts to the list type that it is connected to. There are two sort types that work with
all list types:
• Custom: You’ll get a little text box in which you can insert an expression that will be used to get the
sorting-key of the individual objects.
• Key List: In this mode you can provide the node with an extra list that has the same length as the list you
want to sort. The second list contains the sorting-keys for the individual objects. Most of the times you
will need to make a simple loop with a generator output to create this key list. Supported key list types are
Float and String.
Beside these two generic sorting modes, there are some simple sorting templates for specific list types (currently only
for object lists). We can add more of these templates over time when needed. The node uses a stable sorting algorithm.
Warning: Moving and sorting objects based on their position is not always a good idea, because it leads to flickering..
Geometry Nodes
A small set of geometry nodes has been added to make certain operations easier.
The object output nodes have been unified into more similiar nodes.
The Set Splines on Object node does not exist anymore. It is part of the Curve Object Output node now.
Previously we had three nodes to replace the mesh of an object: Set Mesh Data on Object, Set BMesh on Object and
Set Vertices on Object. These are all part of the Mesh Object Output node now. Additionally we can set material
indices of polygons with this new node.
Smaller Changes
The Get List Element node has a Clamp checkbox now, that allows you to clamp the index to the length of the list.
The Create List node displays the amount of elements in the output list.
The Object Mesh Data node outputs the name of the mesh now (the socket is hidden by default).
The Random Text node has a Node Seed property now.
The Number, Vector, Euler and Quaternion Wiggle nodes have a Speed socket again and a better default speed than
before.
The Auto Execution panel changes when preview rendering is enabled now. This is to make it more appearent that the
Always option is turned of in that case.
The List category got submenus for the Create and Combine List nodes in order to force the user to make a type
decision right at the beginning. It is possible to change that type later, but it might not be obvious. (The recommended
way to insert specific Create/Combine List nodes is to use the search.)
The Transform Polygon can be used with a custom pivot point now.
When a user tries to connect a link to a Script node he now gets an info popup that explains that he should use the
Invoke Subprogram node to execute the script.
AN uses a new better algorithm to sort the nodes before the execution now. This results in a small speedup when
working with many nodes and large networks.
The Object Instancer node supports creation of empty objects now.
The Frame and Reroute nodes are now in the menu like in the other node systems.
The Direction to Rotation node also outputs a rotation matrix and a quaternion now.
Execution Triggers
Until now Auto Execution of node trees was limited to certain predefined events like Always, Frame Changed, etc.
Most people don’t like to have Always enabled all the time because slows down the scene and heats up the cpu. This is
a problem because sometimes the result of the node tree only depends on the location of an object. So it would make
sense to only execute the tree when the location changes. This is exactly what these new Execution Triggers allow you
to do.
You just need to create the trigger, select an object and write/paste the data path to the property. For convenience some
nodes have a button in the advanced settings that quickly creates the Trigger for this specific node.
Network Navigation
The functionality of the TAB key has been improved. It has context sensitive behaviour now. Before this release it
was only possible to jump from an Invoke Subprogram node to the corresponding subprogram. Now function depends
more on the active node. Just try it out. It should become pretty clear what happens when certain nodes are selected.
More information can be found in this GitHub Issue.
Select Area
I always found it annoying to use Blenders text editor together with AN, mainly because it required so many click to
setup it up. For this release I developed a new operator that makes it much faster to setup the text editor. The operator
itself is very generic, it allows you to create/select an area in the Blender interface, the caller than decides what to do
with this area. It is already used in multiple places: Script node, Text Block socket, Debug Loop and in the Developer
Panel.
The button to assign the active object to an object or spline socket got a new functionality. When you hold down Ctrl
and click it you get a little popup that allows you to rename the object in place. This is very handy when you want to
clean up your scene but don’t want to seach all the objects in the outliner or the 3d viewport.
Bake to Keyframes
Baking animations is often required before rendering. Sometimes because AN is unstable during rendering (often
this can be fixed by locking the UI during rendering!) or AN just does not exist on the computer that will render the
animation (think about renderfarms).
You could already create keyframes before using the Set Keyframes node but it can be easier than that. And it is now.
The Bake to Keyframes button can be found in the Overview panel. Basicly it works in three steps:
1. Change the execution code type (more info below) to Bake
2. Visit each frame in the timeline once
3. Change the execution code type to Default
If you want to exclude certain node trees from the baking progress you can just disable Auto Execution for them.
This operator can bake everything that can be animated with keyframes. That excludes spline, text and mesh animation!
This nodes support baking so far: Object Attribute Output, Object Data Path Output, Object Matrix Output, Object
Transforms Output, Object Visibility Output, Curve Object Output (limited), Text Object Output (limited) and Text
Sequence Output (limited).
This node is mainly a companion or complement to the transform nodes. It helps setting a custom “pivot point” for the
transformation operations, a process similar to parenting. Basically it replaces the need for some matrix construction
setups that can prove to be confusing sometimes and not very “artist friendly”
Basic usage examples:
• transform (rotation) of object goes around Empty
• Rotation around axis, where X and Z are defined by points
It does define the reference pivot in several ways, from simple location to matrix or combinations of vectors and
directions.
A classic and very used case, would be “flipping” a polygon around an edge, where defining Z as normal and a side
(0-1) as center and X direction. (this can be defined otherwise with matrices etc. but can prove quite complex setup)
Note: When used along with a Transform Polygon node, the pivot type of that node should be set to World.
Structs
Structs are a new socket type. It can store multiple values in one socket. Having such a type has multiple benefits:
• It’s easier to manage many records.
• Can replace Generic Lists in some cases (generic lists are bad because they don’t which data type
they contain)
• Allows us to have a new set of nodes in the future. E.g. for automatically reading and parsing .csv
files.
It’s also worth mentioning that struct nodes make sure that data types stay correct.
This is a node that exposes vertices, edges and faces as mesh data (Vectors and Indices) or Animation Nodes Vertes
and Polygon data, just like the Object Mesh Data node, but from BMesh.
This comes handy when you need certain mesh data processed (like recalculatng normals) and then use it further
without the need to put it into a “real” blender object. Also may find it useful for having Polygon or Vertex data out of
mesh data made by nodes.
In the example, we use the transform polygon template, but to provide polygons out of the grid mesh, this bmesh to
mesh data is used.
Geometry Nodes
There is a new set of tools (and menu) called Geometry. This contains “helper” functions to process some data or
establish relations between elements, somehow more complex than vector math or matrix or rotation functions.
This node can read a text file from the hard drive without having to open it in Blender. You can also specify an encod-
ing. Most common are ascii and utf8 but there are much more. A full list can be found in the python documentation
on codecs.
The node caches the text internally and only reloads the text when the file changed.
Expression Node
2. Previously the expression node was almost always used together with a Convert node. This is not necessary
anymore because the output socket of the expression node changes its type automatically now. Furthermore the
data type of the expression result is checked and corrected if possible. This is to make sure that the node does
not infiltrate the node tree with invalid data. The automatic type checking can be turned off in the advanced
settings to remove overhead in extreme cases. The output data type can be changed manually by clicking on the
little button next to the expression field.
Dynamic labels are becoming more and more important in AN in order to create cleaner looking node trees. They
allow you to collapse nodes without loosing any information on what they are doing. Here are some examples:
Slice List
The slice list node has been extended to support all the different slice that Python supports. The Start, Stop and Step
sockets be enabled and disabled as needed.
This node has two options now. You can either load all splines on a curve object or only one with an index. Previously
you would import all splines first and pick one of them with the Get List Element node afterwards. Unfortunally this
adds unnecessary overhead because you imported the other splines although you don’t need them.
Developer Tools
AN can generate different execution codes based on the same node tree now. This is used for some features which
make the execution slower but should have zero overhead when they are disabled. Currently there are four different
execution code types:
• Default: This should be turned on most of the time. It just creates the execution code like before
without any extra features enabled.
• Monitor Execution: This creates a try-except block around the execution code of every node.
Furthermore it checks if all the linked outputs have been calculated or if a node forgot something
(this would raise an Exception in another node). This mode is helpfull when a node raises an
exception but you cannot tell which one. It should only be turned on when there are problems.
• Measure Execution Times: Measure the total and average time each node takes to execute and
display the results in the node editor. I personally use this a lot when I try to improve the
performance of certain nodes but it also helps to find the performance bottlenecks of whole
node trees.
• Bake: This is mainly used by the new bake function and should not be activated manually (although
it is no problem to activate it). When it is enabled nodes like the Object Transforms Output node
automatically create keyframes for the properties they change.
Function Profiling
This feature is more important to people who develop AN, but it can also be useful for others to find out which
functions make your node tree slow. Unfortunally it isn’t very easy to understand the profiling output if you don’t
know anything about programming.
Minor Changes
The execution time is now drawn into the top left corner of the node editor to make it visible when the toolbar is
closed.
The Compose Matrix node is roughly 40% faster now.
The Splines from Object node is 30% faster for bezier splines.
The Interpolation from Curve Mapping node does not remap the values anymore. If you need an overshoot in the
interpolation you can press the minus-icon to zoom out.
The Shade Object Smooth node is twice as fast now.
This Floating Advanced Panel that you can open with the U key is fixed now.
The width and location of the selected node in the Node Panel aren’t visible anymore when Debug is disabled in the
user preferences of AN.
The Change Text Case node has two new modes: Capitalize Words and To Title Case.
To make you aware of any problems in the node tree there will be a thin red border around the node editor now (only
when problems exist obviously).
For ages there was a double update whenever a node has been created or removed. This is now fixed. This is especially
important for large node trees when the code generation takes a noticeable amount of time.
AN always creates a python script based on your node tree. This script needs to be recreated each time the node tree
changes. In setups with only a few nodes you never notice that because it is fast but as soon as you have more than a
few hundred nodes the time spend for the code creation can become noticable. With this release the code generation
process is 2-3x faster for large node trees.
You can sort the generator outputs of a loop now. To do it you need to select the corresponding Loop Input node and
go into the advanced settings.
I moved the settings for the Debug Drawer node into the advanced settings (in the right sidebar of the node editor, or
press U while the node is selected). The reason for that is that I rarely need to change these settings and they took too
much space.
Broken Nodes
I’m not 100% if this is a full list but you’ll definitly have to replace these nodes when updating older files to this
release:
• Splines from Object
• Object Matrix Output
Key Features
Cython
Many parts of Animation Nodes has been rewritten using the Cython programming language. It’s a language that mixes
Python and C and is perfectly suited to develop addons with high performance for Blender. There is one disadvantage
though, we now have different versions of Animation Nodes for different platforms. So you have to download the
correct version for your platform.
Subsequently, generating vectors is now 400x faster compared to non cythonized versions. Maths is also 200x faster.
Vectorization
Lists are an essential part of Animation Nodes. In previous versions the only way to use lists effectively was to use
loops. These have an advantages as they give you a lot of flexibility. However, in many cases the flexibility of loops
are not needed. This release includes an alternative approach to edit lists: Vectorized Nodes. A vectorized node is a
node that can work on individual values as well as on lists. Together with Cython, this leads to big speedup for some
operations.
Currently, vectorized nodes can be visually distinguished: When no links connected, all vectorizable sockets, including
input(s) and output(s), are temporarily displayed in a color with transparency of 0.8 (while for any list data type, the
socket transparency is 0.5; and for any base data type, the color is solid). Transparency will be shifted to 0.5 when
connecting with valid list data.
Not all nodes which could have this functionality have it yet. Fortunately, vectorizing a node does not break it, so
some nodes can be vectorized after the first release of AN 2.0.
Falloffs
While the first two key features were mainly targeted at all users of Animation Nodes, falloffs have been designed
specifically for motion graphics designers. In general, a falloff is a function that tells an effect how much it should
influence a specific object. You can think of it like a mask for an effect (similar on how we can use weight painting to
control the influence of some modifiers).
Compatibility
Similar to the last releases, this release will break most existing files in a way so that they don’t work anymore in this
release. This is necessary to not slow down future development (keeping old stuff working always means that some
new features would not be possible). There might be some files that still work in this release but you should not expect
that.
Updating files to work in this version is easy in some cases but very difficult in others. In general I suggest to either
use the old version for old files or rebuild the node trees from scratch.
It is also possible to change existing files in a way that they automatically load the correct version of AN when loaded.
This might also be useful when you want to render animations that use AN on a renderfarm, basically you can put the
.blend file and the addon into a .zip file and upload it to the renderfarm (Note: this is only possible when the renderfarm
allows you to execute python scripts, sometimes you first have to ask for permission). For more information contact
me (mail@jlucke.com).
Documentation
Every node is documented in this manual now. We now start to improve the documentation of individual nodes step
by step. Every help is welcome, mainly to make it more useful for artists.
Changes in Detail
Misc
Sockets
Data Inputs
Input of data input nodes like input integer, float are now hidden because it confuses people. It can be unhidden just
like any node if needed.
Converter
Converter node now has a lock button to lock the data type and stop it from changing the output socket automatically.
Generators are now vectorized which means they can append multiple values if given a list.
Groups
In the Group Input node the socket is renamed from New Parameter to New Input.
In Group Output node, the socket is renamed from New Return to New Output.
Expression
Keyboard Shortcuts
Animation Nodes currently uses the W, E and U key in the node editor. The W and E key have not changed since the
last release but the U key now opens a popup that not only shows the advanced settings of a node but also its sockets.
This is useful as some nodes have hidden sockets or allow reordering/deletion of sockets.
Furthermore there is a new shortcut (shift ctrl Q) to disable Auto Execution for all AN trees. This is helpful when you
accidentally made a mistake and the execution time becomes very long.
3D Viewport
An option to show the indices of vertices, edges and polygons is available under the display panel in properties menu
now. Note that this option is designed to be used in object mode.
Templates
Templates were removed. There will be a better template system in the future.
The Measure Execution Time tool now displays the minimum execution time instead of average.
Performance Mode
Lists
Create List
Remove Inputs in advanced node settings became Remove Unlinked Inputs which removed inputs if they weren’t
connected to any other node.
The advanced node settings were moved to the node itself for easier and faster access. The node can now get multiple
elements if given a list of integers that represent their indices. To do this check Use Index List button. Note that Edge
Indices and Polygon Indices can be converted to an Integer List implicitly like in the example below.
Mask List
This new node selectively removes list elements based on a boolean list.
Sort List
Name, Post Distance and Direction options were removed because they can be achieved using other options.
Random List
This node was newly added. It simply returns a list that contains some random elements from the input list. Unlike
the multiple option in the Get Random Element node, elements can be repeated and thus the length of the output node
can be larger than the input list.
Mesh
This category is one of the heavily updated one, a lot of nodes were removed and a lot were added.
Vertex and Polygon data outputs were removed as well as their data types, they are no longer available in AN 2.0. As
an alternative, some new outputs are available: Vertex Normals, Polygon Centers, Polygon Normals, Local Polygon
Areas and Material Indices. The new outputs are pretty much what the polygon and vertex data included, so there no
loss of flexibility here, in fact it is much more efficient.
This newly added node return the weights of the selected vertex group.
Cylinder Mesh
Grid Mesh
Grid Mesh generator was redesigned and can now be defined either using grid dimensions or step sizes for cells.
Find Close Points (previously named Find Close Vertices) node has been redesigned. There are now two modes:
Amount and Distance. The node also returns distances between points as an output.
Edges To Planes
Edges To Planes node was removed and replaced by Edges To Tubes node.
Edges To Tube
This node was newly created as a replacement to the Edges To Planes node and it simply create tubes in places of
edges.
Create Edges
This node was newly created and it returns edges info for edges that connects each two vectors in the two input vector
lists. The first vectors in both lists are connected together, the second vectors in both list are connected together and
so on.
A new option was added to create indices of the pattern 0,1,2,3, ... ,n where n+1 is an input integer. This
is helpful if vertices are in the right order. The node also support the creation of multiple indices list with different
number of indices by checking the Use List button next to the type menu.
Edge Info
This node was newly added and it return some information about the input edge data like their centers, length, starting
and ending points.
Create Bmesh
This node was newly added and it create a bmesh data type from a mesh data type.
This node was newly added and it returns the mesh data of the input object. See example above.
This node was newly added and it instances the mesh data and transforms it based on the input transformation matrices
(or vectors).
This node was newly added and it returns transformation matrices that describe the location and orientation of the
input polygons. The local x axis is aligned with the direction of the first edge of each polygon.
This node was newly added. It separates the input polygons and return them in their unity position, that is, they are
located at the center of the world and lie on the xy plane. It also return a list of transformation matrices that if used to
transformed the output polygons, the result will be the polygons in their initial position and orientation. This node is
useful when used with transform polygons.
Transform Polygons
This node was newly added and it transforms input polygons based on an input transformation matrix. Note that the
individual polygons should be separated from each others for this operation to make sense.
Separate Polygons
This node was newly added and it simply separate the input polygons, the result is exactly the same if you used the
Prepare Polygon Transformation node and transformed the polygons based on the transformation matrices given.
Advanced settings have been changed and extended. Now, with the new Ensure Animation Data feature (enabled by
default), it allows exporters (mainly Alembic) to export the mesh correctly.
Get bounding box node now returns the mesh data of the bounding box as well as its center.
Polygon Info
Vertex Info
Texts
The old term “String” has been renamed to “Text” in many places.
Repeat Text
Replicate Text
Replicate Text node was removed because the same function can be done using the repeat text node by leaving the text
input empty. See example above.
Reverse Text
Reverse Text node was added that reverse the input text’s character’s order.
Sounds
Sound nodes have been redesigned visually and had some inputs renamed but functionally it is still very similar.
The Single and Equalizer sound types are called Average and Spectrum now. These names are used more often in
other software as well.
Also the output of the Evaluate Sound node is called Volume/Volumes now depending on which sound type is selected.
Many common sound animations can be achieved using the new sound falloff.
Of course the older, more flexible approach, is still available.
Vectors
Random Vector
Random Vector node can now generate a list of random vectors. This can be done by checking the Create List button
beside the node seed. The node is now 400x faster than before. A Normalized Vector feature was added as an
advanced setting.
Vector Wiggle
Transform Vector List node was removed because now the Transform Vector node is vectorized and can operate on
lists of vectors.
Offset Vector
This new node was added to make use of falloffs with vectors. The node simply translate the vector based on a
translation vector, the factor of translation is controlled by a falloff.
Viewer
Viewer
The Debug, Debug List and Debug Drawer nodes were combined into a single node called Viewer. It automatically
determines whether data should be drawn inline (single element) or in a box (list, or a long text), and returns infor-
mation such as datatype and list length (depending on input datatypes). The result can also be output to text block or
console.
3D Viewer
This newly added node draws point an empty like objects in the 3D viewport. If vector(s) were given, then points are
drawn in their locations. If matrices were given, then empty like objects are drawn to show their orientation as well as
their location.
Numbers
Float Range
Float Range node can now generate floats inside the closed interval [start, stop]. This can be done by choosing
the Start/Stop option. The node now is 400x faster than before.
Random Number
Random Number node can now generate a list of random floats. This can be done by checking the Create List button
beside the node seed. The node is now 400x faster than before.
Map Range
Map Range node has a new UI for easier and faster workflow. And it is vectorized, so it can now remap a list of floats.
Float Math
Math node is now 200x faster. It is vectorized such that you can operate on two lists element wise, operate on a single
list for single input operations and operate on a list and a value where the value is added, multiplied, etc to all the value
of the list.
The math node also have a new UI feature: A small menu called Quick Settings will appear whenever the node
is duplicated. This menu includes four buttons which convert the type of the math node to addition, multiplication,
subtraction or division. This allow faster conversion if needed. If you don’t want to convert, then pressing the check
mark will hide the menu telling AN that this is the type you want. Moreover, a button is present in the advanced node
settings that hide the menu for all nodes in the current node tree.
Float can now be automatically converted to Integer without an extra node.
Constants
There is a new Number Constants node which provides easy access to a few constants.
Matrices
Distribute Matrices
This node was newly added and it generate a list of transformation matrices distributed on a line, grid, circle or mesh
vertices.
Replicate Matrix
This newly added node instances and transforms input transformation matrices based on some other input transforma-
tion matrices (or vectors).
Transform Matrix
This node transforms a matrix (or matrix list) by another matrix input.
Offset Matrices
This newly added node makes use of falloffs with matrices. It transforms all input matrices in a certain way. The
falloff controls how much each matrix is influenced. There are also a couple of advanced settings which control the
transformation behavior.
Objects
The Object Transforms Output node has a new UI for enabling transformation channels. The node now supports
editing the delta transforms of object. Delta transforms are transforms that are added on top of the current transforms.
So now you can define objects relative transforms without any ID keys. If you want to change the delta transforms
you have to enable this option in the advanced settings. The node is also vectorized, so you may edit delta transforms
for multiple objects.
The node now has an operator to create an execution trigger for the property at the input path ID.
The node is now vectorized and can take a list of object. When the input is a list of object, thee Multiple Values
option appears. Now you have two options. To set the input value to all object or to provide a list of values to be set to
objects element wise.
Has a new cache to allow faster execution. The cache can be cleared from the advanced settings.
Armature Info
This node was newly added and it gives access to some information about bones of the input armature like their centers,
transformation matrix, directions, lengths, tails, heads and more.
Object Instancer
The object instancer node now have an option to hide the source object.
Splines
A radius input was added to the node to set the radius of the newly created point.
You can now set the left and right handles of the spline points manually as well as setting their radius.
Replicate Spline
This newly added node instances splines and transforms them based on the input transformation matrices.
Spline Info
Spline Info node now returns the locations of the handles of the points as well as the radii and amount of points.
This newly added node set the radius of the points of the input spline.
Two options to define the radius of spline points were added. The first options sets the radius per point, so it expects a
float list of the same size as the vertices of the edges. The second option sets the radius per edge so it expects a float
list with the same length as the edges indices list. It should be noted that the node is vectorized, so you might just enter
a single float and it will be set as the radius of all points and edges and the option won’t matter.
Project On Spline
A new output Distance was added and it is equal to the distance between the input point and the projected point. In
other words, it is the shortest distanced between the input point and the closest point on the spline. Or in other words,
it is the length of the line that is perpendicular to the tangent at the surface and starts at the input point and ends at the
point of tangency.
Trim Spline
Trimming a bezier spline produces much cleaner results now. Also the node has been vectorized.
Booleans
Compare Node
There is a new condition (Is None) which checks if the input is a Python None object. Many types in AN are (by
definition) never None. However certain types (like Object, Sequence, Generic, ...) are allowed to be None, so this
mode only makes sense when used with one of those types.
Logic Operators
Two new operators were added: Not (A and B), Not (A or B).
Two new options were added to the boolean list logic node: Not All True, Not All False.
Number To Boolean
This node converts a number into a boolean in a standard way. If the number is zero, it will return False and otherwise
True.
Falloff
This whole category was added and it provides a high level approach to controlling effects and animating them. Below
are some of the nodes it includes.
Fade Falloff
Delay Falloff
This falloff can be used to delay the effect of some objects based on time. In the example below we make some objects
appear earlier than others. It works good in conjunction with the Object ID Key node.
Wiggle Falloff
This falloff can be used to control an effect based on a noise function. So far there is only 1D noise meaning that the
effect strength only depends on the time and not on the location of a vertex.
Random Falloff
Much like the wiggle falloff, this can be used to control and effect based on a random factor except this factor is
completely random and can’t be animated, it is much faster than wiggle falloff so use this node if you are not going to
animate.
This falloff chooses between two values based on a pattern. Currently two patterns are supported: Every Nth and
Random.
This falloff is a wrapper for multiple other falloffs to make them easier and faster to use in practice. So far it supports
spherical and direction falloffs.
Sound Falloff
Sound falloff provide a much more efficient way to evaluate baked sound data. You can evaluate the sound data based
on the object indices or based on another falloff. So you may use a point distance falloff to evaluate the sound data
resulting in this radial sound visualization:
Or you can do an index based evaluation of the sound to control the scale of some radially distributed objects resulting
in:
To create a normal equalizer animation, start with something like that:
Spline Falloff
The spline falloff enables you to control an effect based on the shortest distance to a spline.
Constant Falloff
This is the default falloff. With this every effected element is effected with the same strength.
Custom Falloff
A custom falloff lets you create a falloff from a list of factors for total control.
Directional Falloff
A directional falloff lets you control an effect based on the distance along some vector from some point. It is the same
as the direction option in the object controller falloff but inputs are exposed and not controlled by an object.
A point distance falloff lets you control an effect based on the distance to some point. It is the same as the sphere
option in the object controller falloff but inputs are exposed and not controlled by an object.
Interpolate Falloff
With this you can edit a falloff. For this node to make sense the input falloff should only produce factors between 0
and 1. Most of the common falloffs do this anyway.
Remap Falloff
This node remaps the floats of the input falloff to a new range. The node assumes that the original range was [0,1],
which is usually the case.
Invert Falloff
Mix Falloff
This node mixes between two or more falloffs. It supports multiple modes: Max, Min, Add, Multiply.
Evaluate Falloff
This node evaluates the falloff for the given inputs. So it returns a list of strenghts (a number one for every element).
This can be used to control custom effects.
ID Keys
An ID Key allows to store custom values on a per object basis. The Id Keys system got a major update.
Until now there was only one ID Key by default (Initial Transforms). Now there is a second one (Index) which can be
used for all kinds of things. E.g. it can be used to sort objects before passing them to Animation Nodes. There are a
couple of operators that help with that.
It is possible to create a new ID Key now. Note that it might disappear after a restart when it is not used anywhere.
Furthermore some ID Keys can be removed as well. Wether a ID Key can be removed depends on where it is used. It
cannot be removed when a Object ID Key node uses it or when it is one of the default id keys.
Animation Nodes currently supports 4 different types of ID Keys: Transforms, Text, Float and Integer. All of these
can be accessed using the Object Id Key node.
Similar to how Transforms ID Keys can be loaded from the current transforms of an object, integer ID Keys can be
generated in multiple ways.
Random Method
Distance Method
Rotations
Random Euler
Random Euler node can now generate a list of random eulers. This can be done by checking the Create List button
beside the node seed. The node is now 400x faster than before.
Geometry
This node returns four outputs: Image U, Image V, Z Depth and a Visible boolean. Image U and V represent the point
position in a UV coordinate based on the active camera view, while Z Depth tells you how far the vector is away.
Triangulate Polygons
Triangulate Polygons has been removed because it is nearly never used and hard to maintain. However, it may be
rewritten in a better form in the future.
Intersect Polyline Plane was removed because it is nearly never used and hard to maintain
Interpolation
Curve Interpolation
The Interpolation From Curve Mapping node was renamed to Curve Interpolation. The node now support caching
of interpolation for tremendously faster if it has to be evaluated very often. Below is a curve interpolation with and
without cache option.
Mix Interpolation
This newly added node mixes between two interpolation using one of two algorithms. Overlay which simply over-
lay both interpolation where zero means the first interpolation and 1 means the second. Chain which stack input
interpolations beside each others.
Mirror Interpolation
This newly added node inverts the interpolation and possibly combine it with the original if chain was checked.
Pretty much all nodes that can evaluate BVH or KD Trees are vectorized.
Particle System
The particle system category was redesigned to be more compact and useful.
Particle Data
This newly added node combines the filter particles and particle list info node. It filter particles based on the selected
options, then it return particle info like their locations, velocities, sizes and so on.
Hair Data
This newly added node returns the particle system hair as a list of splines.
Get Particles
Filter Particles
Particle Info
Support
• Get involved in the development. If you already have some programming experience with python I’d love to
help you get started in developing new nodes and other features for Animation Nodes.
Donation Links
External Links
383