AN Experiment 2018 Test 8 - dancing cubes

Nikolaus Gradwohl2018-05-08T08:16:49+02:00

For this animation nodes experiment I made some cubes hover above the surface of a sphere by normalizing the position vector

you can download the blend file here

dancing cubes

read more ...

AN Experiment 2018 Test 7 - growing

Nikolaus Gradwohl2018-05-03T05:25:53+02:00

For this AnimationNode experiment I made growing vines out of vertices using random 2d noise patterns. I used a grid mesh to generate the inital vertices and iterate over the list of vertices in the mesh using a loop. Then I used a second loop to generate the spline for each vertex.

The number of vertices in each spline is controlled by the framerate and each vertex is moved by a random amount along the x- and y-axis.

The node setup is a bit too complicated for a screenshot but you can download the blend file here


read more ...

AN Experiment 2018 Test 6 - dont overlap

Nikolaus Gradwohl2018-04-30T06:05:03+02:00

For this animation nodes experiment I created a group of spheres and calculated their sizes so that they touch but never overlap. I iterated over the list of positions and calculated the distances to all other spheres using a Vector Distance Node. Then I sorted the list of distances and took the second entry to get the minimal distance to a different node (the first entry is always zero - its the distance of the current sphere to it self). The sphere is then scaled to half of the minimum distance to make sure no spheres overlap node setup

The spheres are moved using a Vector Wiggle node

you can download the blend file here

dont overlap

read more ...

AN Experiment 2018 Test 5 - L-System

Nikolaus Gradwohl2018-04-27T06:15:48+02:00

For this AnimationNodes experiment I played with the new L-System node that comes in version 2.1. The L-System shown in this animation was generated by the instruction


And here is the nodesetup I used


If you have no idea what I'm talking about Jacques Lucke has some very cool introduction videos to the L-System nodes on his youtube channel

you can download the blend file here


read more ...

AN Experiment 2018 Test 4 - noise displace

Nikolaus Gradwohl2018-04-25T07:13:34+02:00

For this animation node experiment I used the Vector Noise node to create displacements of the mesh vertices of a icosphere along their normal vector. This creates a similar effect to using the displacement modifier with a noise texture, but you could use any node setup instead of the simple noise I used to create crazy complex animated displacements.

you can download the blend file here

noise displacement

read more ...

I made TNT on my 3D Printer

Nikolaus Gradwohl2018-04-23T06:58:27+02:00

I printed a 2,4,6-Trinitrotoluol molecule - better known by its abbrevation TNT - on my 3D printer this weekend. I constructed a tetraedic and a hexagonal basic shape using openscad and printed the atoms in different colors. I originally intended to connect the atoms using double sided tape but the molecule got pretty unstable and fell apart spontaneously. So I used some hotglue to glue the atoms together.

Oh and sorry for the clickbait title - I couldn't resist :-)

tnt molecule

read more ...

AN Experiment 2018 Test 3 - waves

Nikolaus Gradwohl2018-04-18T07:04:28+02:00

I made a group of concentric spirals along a circle and modified their rotation phase and radius

you can download the blend file here


read more ...

AN Experiment 2018 Test 2 - noise position

Nikolaus Gradwohl2018-04-16T05:08:08+02:00

for this Animation Nodes experiment I used the vector noise to change the position of objects

you can download the blend file here but be aware that this has been created with a development version of - so some nodes might change a bit until the final release

noise position

read more ...

AN Experiment 2018 Test 1- curly noise

Nikolaus Gradwohl2018-04-13T08:05:08+02:00

I finally managed to fix all my python and cython version missmatch errors and started experimenting with a animation nodes 2.1 development branch - this is my first experiment using the vector noise node and the curly noise setup described in the brilliant answer by omar Ahmad

you can download the blend file here but be aware that the 2.1 branch of the Animation Node Addon is currently under heavy development so maybe the examples here won't work out of the box with a final version.

vector noise test

read more ...

creating midifiles using ruby

Nikolaus Gradwohl2018-03-26T07:21:37+02:00

I have been experimenting with randomly generated drum patterns lately and found out pretty soon, that a totally random generated pattern isn't exacly what I was after, I wanted a pattern generator where I can specify propabilities for each drum hit to occure. So I wrote a ruby script using midilib that generates midi files containing patterns, which I can then import into bitwig and loop and arrange for my tracks.


Midilib is a nifty little ruby library that allows you to read or write midifiles. For my purpose I used the library to write the files.

the library can be installed using gem

gem install midilib

A midifile contains sequences, sequences contain tracks and tracks contain midi events. These events can be any midi event like noteOn, noteOf, controlChange, programChange, ... For each midiEvent in a track the delta time to the last event is stored.

in midi lib you can specify a time_from_start value and lets midilib recalculate the delta values before saving the track.

So here is a ruby script that generates a hihat pattern (channel 1, midi note 44 in my kit), where the notes are placed on a 16th grid with a random chance between 20% and 50%.

require 'midilib/sequence'
require 'midilib/consts'
include MIDI

seq =

track =
seq.tracks << track << <<, 'Test Pattern')

track =
seq.tracks << track = 'Loop1'

s = 0
l = seq.note_to_delta('16th')
e = Random.rand(0.2..0.5)

16.times do
    if ( Random.rand < e ) then
    on =,44,127,0)
    on.time_from_start = s
    off =,44,127,0)
    off.time_from_start = s + l << on << off
s += l

track.recalc_delta_from_times'pattern3.mid', 'wb') { |file| seq.write(file) }
read more ...