RYGCBMK◯ is released!

My little two-minute serve of abstract rhythmic procedural animation is available for all to see! Yay!

You can watch it above on YouTube, download it off Vimeo (CC-BY licence) or listen to the soundtrack on SoundCloud.

If you’ve got Blender 2.78 (even the current 2.78 nightly at the time of writing) with the Animation Nodes plugin, you can download this zip file full of shots to play with. There are even some shots in there which didn’t make the cut.

The final shot running order is as follows:

  • quollism ident: combination of 050, 264 and 452
  • morse code: 120
  • ball snake: 471
  • ring snake: 472
  • doughnut wave: 454
  • braille fireflies: 431
  • bouncy dot: 450
  • do-si-do spheres: 020
  • infinity looper: 470
  • purple attractor: 453
  • rainbow sine balls: 070
  • flippy pink doughnuts: 051
  • grooving amoeba: 060
  • splitting rainbow ball: 170
  • hexagonal echoed rings: 140
  • metaball pipe: 160
  • cool abstract bubbles: 181
  • weird stripy thing: 171
  • grooving bubble tank: 180
  • ring with lasers: 200
  • keke spheres: 220
  • happy bubble snake: 210
  • multicoloured ring explosions: 250
  • spinning mandala: 260
  • travelling mandala: 261
  • receding mandala: 263
  • approaching mandala: 262
  • fake oscilloscope: 264
  • alchemical symbols: 280
  • scribble ball: 270
  • rainbow ring: 290
  • rave curves: 320
  • heartbeat: 300
  • balls on wires: 330
  • random object sine: 331
  • migrating acid eggs: 371
  • jelly boomerangs: 380
  • galaxy: 350
  • ballswarm argument: 370
  • three pulsing objects: 400
  • ball and stick creature: 410
  • colour morphing sinewave: 402
  • neon cell: 473
  • folded circle: 420
  • line swoop: 401
  • travelling mandala: 451
  • reverse flashing rings: 430

I’m not sure what else to add at this point other than I hope my colourful little dancing spheres and toruses brighten your day. 🙂

Time can also be space

It’s been 9 to 15 April 2017. Happy Easter and if you’re in Australia, remember: bilbies not bunnies.

Squishy Mandala says “Save the bilby!”

It’s just a couple of days until RYGCBMK◯ comes out and I have just a few shots to go. Looking back at some of the earliest shots I made, they jar badly with the overall “round shapes on black” aesthetic I ended up adopting. The hand-drawn shots also jarred a bit. With the extra time afforded me by the Easter break, I’ve started replacing the most out-of-place crappy shots with nicer updated shots. The replacements often retain the original idea but re-execute it in a way that feels like it belongs with the rest of the reel.

Stills really don’t do these shots justice.

But enough about that. Let’s talk about how to do interpolation between two values in Animation Nodes.

Here’s a shot that I did last night.

Pretty sure I had one of those balls in the 1990s..

As the purple rainbow ball moves across the screen, the small ball move towards it and grow larger. The node setup that places the nodes looks like this.

Kind of went crazy with the animate nodes for Scale there..

The key to controlling movement and size is in the Animate nodes. I’m feeding the Time input of the Animate Vector node with a Distance value instead. Instead of changing a value according to how much time has gone by, I’m changing it according to  how far the “attractor” object is to a position which is pre-calculated for each ball.

If the ball is closer to (before) the calculated position than the “duration” (a minimum influence distance), the Animate node interpolates towards the “Start” input – the rainbow ball’s position, or a larger size. If the distance is greater than (after) the “duration”, the node interpolates all the way to the “End” position – the small ball’s calculated position, or a resting size.

I used the same interpolation trick to send little pulses of light down these wires, even though the start and end points are constantly moving.

Animate nodes: not just for animating!

That’s all for this week. I’ll post a mini-update on Monday with the details of where you can see the finished reel, but that’s all for now. Back to it!

Sine functions to the left of me, matrices to the right..

It’s been 2 to 8 April 2017. I got a new semi-modular synthesiser this week so I lost a couple of evenings to playing with the new toy adding to the RYG-O soundtrack.

Music is never as exciting to look at, is it?

For this week’s shots I moved away from procedural meshes and back to working with lots of duplicated objects. I made a spiral galaxy, swarms of weird little swimming eggs, swarms of psychedelic kidneys and swarms of little balls having arguments with one another.

They are strangely individual swarms of balls.

One of the useful discoveries I made this week was figuring out that I could parent objects to other objects as part of Animation Nodes. The node setup for parenting is even pretty simple.

It’s as easy as setting “parent” in the Object Attribute Output node.

I used parenting to create the galaxy shot. I started with a spiral-making loop I made on Sunday. I created three sets of spiral objects with different colours of spiral and different sizes of blob. I parented each spiral to a different empty and set the empties spinning, then parented those empties to a master empty which moved them across the screen. Initially all three spiral bits were parented to one empty, but everything rotating at the same rate was dull to look at. It helped a lot to experiment with the rotation using empties as a guide instead of having to maths it.

It’s been too long between OpenGL renders…

Also this week I found out that constant updating can be switched off. This is useful when working with thousands of duplicated objects at once. The spiral was slowing my computer down pretty badly.

Over to the swimmy eggs now. Each of the eggs swims towards the top of the screen at a randomised rate which is peculiar to that egg. Of course, when certain aquatic animals like jellyfish or octopodes propel themselves through the water, there’s a push forward then a lag as the “water” absorbs its momentum.

This is an early version of the eggs which looked a little too much like an LSD hallucination of a thousand screaming mouths.

To mimic this, I added a couple of sine functions to make things more interesting – one controls the compression and expansion of the eggs’ shape, and the other offsets to the position to make the motion speed up and slow down. The two sine functions are out of phase – they both have a period of 12 frames, but they reach their respective extremes at different points. The actual node structure that makes this possible is a bit hard to follow, but this is the node setup I used to figure out how to tweak it so that it not only fit the swimming action but the beat of the soundtrack.

This is me hiding my mess.

Here the complexity of the maths and node tree is kept away from where I have to think about it, and that’s how it should be.

Good factoring also means putting messes in their own separate node tree to make it easy to reuse them in another file.

The psychedelic kidney swarm was made possible thanks to Omar Ahmad’s excellent write-up on transformation matrices in AN. I’d wanted to get the eggs swimming in different directions, and that meant having them turn to whichever direction they were headed in. I was getting nowhere with that on Thursday night, but finding Omar’s tutorials inspired me to give it another try on Friday night. Even though I couldn’t get the kidneys to change rotation/direction mid-swim, I did manage to get them turned to face the direction that they’re swimming in a straight line.

At least they’re not screaming mouths.

Here’s a more presentable version of the swimming trick, where timeOffset (can be positive or negative) is added to the Time input of “Animate Vector” to move the kidney from A to B.

Sinewaves – is there anything they can’t do?

Finally a word about materials! I have been using randomised colours a lot in RYG-O and that means using the Object Info node’s Random output a lot. The problem is that Random only outputs a single random number and I need three (hue, saturation and value) to make an entire colour.

To turn a random number into an entire random vector, I follow the Random output with multiply, modulo and add nodes before they hit Combine HSV. Multiply stretches the incoming range by an arbitrary amount to introduce a little bit more randomness. Modulo clamps the output of multiply to a particular upper limit, effectively setting a range from 0 to the modulo amount. Add offsets that output upward and sets a minimum.

For instance, in the following node setup, my random colours will have saturation between 0.6 (add 0.6) and 0.8 (modulo 0.2 + add 0.6), and values between 0.5 (add 0.5) and 0.8 (modulo 0.3 + add 0.5).

Three random numbers from one – bargain!

The quantiseHue group does a modulo, multiply, round and divide operation to quantise any random number input to 0.0 (red), 0.166 (yellow), 0.333 (green), 0.5 (cyan), 0.667 (blue), 0.833 (magenta) or 1 (red again). That’s how I’m sticking to my assigned colours. 🙂

That’s all for this week. See you at Easter!

Circles circles everywhere (and lines and boxes too)

26 March to 1 April 2017 has been RYGBMCKO’s most productive week yet. In a couple of weeks when this goes up onto YouTube, you will be able to identify this week’s little segments by things getting very circle-based.

And this week I actually have a minute to talk shop and post some node setups and related screenies. Amazing!

Here is one of the variations of node setup which I use for plotting a circle. For input it takes a range of integers (the values don’t matter, just the size of the range), and it can create a set of points with different radiuses at different offsets around the circle and follow different objects. (obSize, hide and elementAngle are all left over from old versions of the group.)

let r = radius, for z = 0 to 2*pi: x = sin(z*r), y = cos(z*r) — and so much more!

I started using Animation Nodes for procedural geometry as well as animation this week. Up until now I’d been duplicating objects but not actually making them. The geometry workflow isn’t super obvious but the AN documentation is pretty good. Here’s a loop that draws lines (including a random factor) and its output points to a generated object.

Float goes in, geometry comes out..

Take the circle values and run them through the line drawing loop, add a colourful material, and get colourful space tinsel!

Hm… does this need a glow effect perhaps?

Or how about a little heartrate monitor?

This could probably use a glow effect too..

For this I created a sawtooth wave that synchronises to the 12 frame beat.

A synchronised sawtooth node chain with bonus Animate Float node

I fed this into an Animation Nodes group to get a vertical offset value. Here’s how Inigo Quilez’s impulse function looks as an AN node group:

function(k,x) { return k*x*pow(Math.E, 1.0 – (k*x)); } but with boxes and lines

I duplicated the blobs with slightly lagged inputs to form a trail, put some glow on it and there we go.

See? Totally looks better with glow.. hey.. wait a minute, that’s just gaussian blur in Add mode!

Finally, one of four mandala thingies I made on Sunday alone. Here’s the node setup. It looks complicated but it is super repetitious.

From this zoom level, it’s just lines and coloured boxes.

There’s three or four objects being fed into the ringmaker loop. The ringmaker arranges stuff in circles around a reference object with a particular radius, making the objects a particular size, etc. The differences and variations come in the size of the circles, how fast they’re moving around the circle and in what direction, and whether either of those things are changing over the course of the shot.

And this is the output.

Inspired by stuff I saw one evening on the backs of my eyelids…

Today was the original release day, but after the week I had and with the reel as it currently stands I’m glad I gave myself an extra couple of weeks to learn even more.

Speaking of releases, I’m still on track for showing off the all-singing-all-dancing RYGCBMKO-1 reel on Easter Monday. Even though it’s a progress reel, it’s still good fun to watch. 🙂

RYG-◯ turns a corner!

Greetings from 19 to 25 March 2017.

So many bubbles…

Things are very different this week for RYGCBMK◯. Ironically it’s going so well that I don’t have much time to write about it.

So many colourful round things…

Between having a much-needed breakthrough with the soundtrack and playing with Animation Nodes for two days straight last weekend, I went from not having much of a clue what I’m doing to kind of knowing what I’m doing. My confidence is way up and the project has gone from being mildly disappointing and grindy to actually kind of fun. Hurray! 🙂

Frickin lasers!

Something else I’m noticing this week – I’m getting so much more bang for buck out of my loops by allowing things like scale, location and other stuff as input parameters. It’s the difference between a time-saving setup and a truly powerful setup that lets me experiment quickly.

Meet Bubble Snake, whose segments are based on the sine function of their world x position.

The final product feels less like a movie and more like a progress reel – a little underwhelming at first while I’m figuring things out, but then the fun kicks in once I get my bearings.

Now, I wonder if anyone would be interested in getting their hands on the .blend files after this is all done…

A great many distractions

It’s been 12 to 18 March 2017.

RYGCBMKO is pottering along despite low motivation, lack of time/energy and some big distractions. In addition to the stresses of the day job, I’ve come down with a hopefully minor case of Eurorack to go with my broader case of voltage-controlled music making and electronics.

A circular gradient was quantised and fed into the hue component of a Combine HSV node.

Ironically, researching Eurorack for hours a day has taken up much of the time I’d otherwise be using to make music or video. This probably an excellent sign that I should put it to one side until my housing and power supply arrive, instead of spending hours on Modulargrid designing a rack for someone with about ten times as much disposable income as I have.

Metaballs with some normal distortion applied to a quantised dot product sent to hue, joined by many NURBS toruses.

So. When it’s finally time to sit down and work on a little shot every day, it’s something I never seem to have much time to plan or iterate or polish before it’s time to switch off the machines and get to sleep. Nothing’s really amazing. To add to the pain points, Blender’s usual rock solid stability is gone. I’m not sure whether it’s Animation Nodes or v2.78b or a combination. Autosaves have made the crashes a bit more bearable.

A stream of pulsating metaballs. I used the “quantised dot product to hue” thing a lot this week.

Still, there’s positives coming out of this. The shots I like the most feature structures that read like little single-celled organisms going about their day, so I could probably play some more on that. I feel like I’m getting a sense for what works and what doesn’t, and playing with techniques like visual echo and delay at edit time are proving quite interesting.

More next week!

The rundown on RYGCBMK◯

Hello and welcome to 5 to 11 March 2017. What’s this weirdly named new project all about, then?

Circles, mainly… ?

The provisional title for this project is RYGCBMKO. The first seven letters stand for the primary and secondary hues red, yellow, green, cyan, blue, magenta and black (key). The O represents a circle.

The genre of this project is non-figurative abstract animation. The theme of the project is synchronised sound and motion, rhythm both seen and heard.

So every day since the start of the month, I’ve been creating at least one shot of abstract animation, forty-eight frames long. I’ve been working in both Blender (with Animation Nodes) and Krita (hand-drawn).

Some evenings are less impressive than others.

Here’s the guidance I’ve given myself for the visuals:

  • For every day of the project, the artist will bank at least one piece of footage lasting two seconds (48 frames). If any day is skipped, Sunday will be used to catch up.
  • Permitted hues are primaries and secondaries – red, yellow, green, cyan, blue, magenta, black and a minimal use of white for accents only. Grey is not permitted. Colour saturation should be strong but does not need to be all the way. The colour space shall be display-referred sRGB. (Sorry, Troy.)
  • Permitted shapes are cylindrical forms with rounded ends (capsules), toruses, spheres, and anything of the sort. Non-circular ellipses are not permitted. Arcs are not permitted except where they conform to the arc of a circle. Right angles or sharp angles of any sort are not permitted except when one element passes in front of another. Flat two dimensional planes are not permitted.
  • Surfaces may be flat/smooth or make use of the shapes discussed above. Random or “violent” surface textures are not permitted. The surfaces of obviously three-dimensional forms should not behave to real life expectations. Normal-based shading effects are encouraged. Forms should not intersect.
  • OpenGL and Blender Internal are permitted, but path-tracing (Cycles) is discouraged. If Cycles must be used (e.g for motion blur, microdisplacement, etc), the following nodes are permitted for shading purposes: Emission, Transparent, Mix, Add and Holdout.

I ignored my own rules and used a Translucent shader for this shot. There were grainy consequences…

  • Any given element on screen must be translating, scaling and/or rotating. Nothing may remain still on screen with the exception of any flat background colour. Black will be the preferred background colour. Aligned elements must move in concert, not chaotically. Colours should not strobe violently.
  • The elements on screen should strongly reference a 12 frame rhythm. Musically speaking, each piece of footage (aside from the titles) lasts for exactly four beats, with each beat lasting twelve frames and each sixteenth note lasting three frames.
  • At no time may the video be directly produced by automatically interpreting (visualising) any audio. Oscilloscopes, visualisers and other direct algorithmic visual interpretations of the music are forbidden. The audio may be interpreted automatically as an aid.
  • Post-processing should be limited to editing, adding glow, sandwiching different elements to one another, etc. Motion blur is permitted to prevent frame strobing effects.
  • It is permitted and encouraged for blocks of individual footage to be edited and cut up to better synchronise to the music.

So far my favourite pieces of footage are a little cometty thing skipping across what appears to be a dark liquid surface and a flashy metaball amoeba that escaped from the hypercolour 1990s.

It looks cuter in motion. 🙂

Forty-eight frames works out at four beats for a piece of music ticking along at 120 beats per minute, or “twelve-frame time” in animation-speak. Here’s the stipulations for the soundtrack:

  • The genre of the accompanying music will be electronic, likely house music. The music will be 120 beats per minute to make it easier to synchronise the video. Each piece of footage will last for exactly four beats, with each beat lasting twelve frames and each sixteenth note lasting three frames.
  • The sound sources will be analogue – the ARP Odyssey with the Volca Beats and the Monotron Delay for backup. The sound may be processed using stomp boxes and digital effects, but anything other than mastering effects in the digital audio workstation must be in place and set before the sound is recorded. The creative emphasis is being inspired through discovery and performance, not polishing turds.

This is what we thought cyberspace would look like in 1992.

  • Sound will be recorded track-by-track in mono into a digital audio workstation for mixing and compiling.
  • MIDI may not be used except for the purpose of synchronisation. MIDI note information is forbidden, but MIDI gate is OK. Sequenced pitch and gate information should be fed to the ARP Odyssey by the SQ-1 via patch cables. The artist is reminded that the SQ-1 can be clock-divided to sixteenth, eighth and quarter notes even when synched to the Volca Beats by holding down Play/Stop while turning the SQ-1 on and turning the mode knob to different settings.
  • The sonic elements should also strongly reference a 12 frame beat. Audio may be produced by automatically interpreting (visualising) video through the ARP Odyssey if the means are available. Recorded audio may be slowed down or sped up in factors of two for rhythm, and slowed down or sped up as necessary for tuning. Timestretching is forbidden because it sounds naff.
  • It is at the artist’s discretion as to when the soundtrack shall be created. Soundtrack work shall not be considered a substitute for animation work.

The original delivery date was 1 April, but I’m keeping this going until Easter, which is when I wind up the secondment at the day job. The intent is to cut the footage and audio together over the Easter long weekend and have something ready to show off on Easter Monday.

Balls? Sine waves? This is suspiciously demosceney…

In terms of quality, I have no expectations. This is a holding pattern project to try some new things, build new skills and establish a daily creative habit within a timeboxed project. Showing up and doing the work is more important than the watchability of the finished piece. This will probably not be portfolio material.

And once it’s finished, I take a breath, put it to one side and move on, very probably back to Pointy and Gronky. 🙂

Beat as in “tired”… or as in “rhythm”?

That’s been 26 February to 4 March 2017. And it is both tired and rhythm. One because the other.

On Wednesday, I made the decision to step away from “A moment in the sun” until I finish this heinously draining temporary internal transfer at Easter (mid-April). A narrative animated short film is the wrong project for me until the work stress eases off. Something little and time-boxed would be much better.

So it’s time again for a brief change of creative direction.

I took a couple of months at the beginning of last year to sculpt and do character animation and that refreshed me nicely. This time I’m going to learn Animation Nodes with the intent of making some groovy procedural animation.

The working title is RYGCBMK◯, though RYGCBMKO is fine too. You can probably guess what the letters R G B and C M Y K stand for. The circle is just a circle. The finished piece will be pleasing rhythms for the eyes and ears.

I’ll be working on it until Easter and I’m targeting an Easter Monday release. I’ve written a project brief and set particular limitations around creative methodology, but I’ll talk a bit more about those next week. 🙂

 

Two little things

That was 19 to 25 February 2017. This week I devised a couple of character and plot notes for the introduction.

With Gronky, I want to emphasise a giddy enthusiasm and affinity for technology. He also has a giddy enthusiasm for burying things, which is his “job” in the desert.

For Pointy, I came up with a backstory which shows his anti-technology character trait and explains what he’s doing in the desert. After a big night out, he catches a self-driving taxi but impatiently gives his home address as “Western Australia” before blacking out having a nice sleep. The taxi dutifully drops him off roughly where the words “Western Australia” appear on a world map.

Somewhere, a chief ops officer is seeking emergency legal advice…

These two things give the characters a sharp point of difference that plays out in the story. I’ve been down the “recounted backstory” path before though and I’ve found it tricky to do well, plotwise. And so it goes into the ideas bank, along with my other ideas. If I still like it next week, I’ll take that as a good sign. 🙂

That’s about all I got done, movie-wise. I’ve just been too busy this week enduring high stress and late finishes at the day job, swotting up on cognitive behavioural therapy and sensory processing sensitivity, cutting my caffeine intake in half and getting withdrawal symptoms, tapering off diazepam, and training myself to follow a screen-free pre-sleep routine.

Somehow with all this going on I still have some weird primal need for creative expression. So instead of animation, I’ve started making music again, improvising jams with old-school electronic instruments and dreaming up some new sonic toys to play with. The workflow is pretty loose and unstructured and fun, and I managed to make at least one piece I really like. But that’s a whole different blog post. 🙂

A light in the ongoing rough patch

Time to recap 12 to 18 February 2017. This week I’ve focussed more on getting well than making stuff.

I got the pitchamatic for the second and third part of the movie cut together and put it in front of a couple of reviewers. The feedback I’ve got is that things are weirder than before but still funny. Funny-weird is fine by me. 🙂

After months of not having the story in video form, it’s great to see the characters up and moving again. Even from that I’m getting new insights into where the characters come from, and the kind of story I’m telling is much clearer. Hopefully that clarity will assist with the tricky task of writing the introduction.

Alas. Job stress, anxiety, lack of restful sleep and other stuff have made it hard to maintain a clear creative vision of what I want. My brain is just too unsettled and preoccupied to really focus. It’s far from ideal.

Figure 1. What it’s been like on the inside of my head lately.

Without a good sense of what I’m aiming for, I’m liable to get stuck in endless tweaking and trying other things. (“Do I like this? How about this? Do I like anything?)” Even with that vision, I could be super attached to a particular idea one day, then dump it for a new idea which makes the story more concise and interesting but gives me more work to do. (“Did it really need to be changed?”)

Anyway. Instead of floundering and tweaking and getting nowhere in a cloud of self-doubt, I’m writing down prospective in unstructured point form as an idea bank. I know I have particular plot points to hit – points like “Gronky meets Pointy”, “Pointy is lost”, etc – but it’s more pragmatic to bank interesting little ideas that I don’t have to commit to rather than trying to piece together something bigger (or tweak something that already exists), especially without a strong notion of what I’m aiming for.

Little things I can do. Big things will just have to wait until I’m feeling up to it.