More selected projects

Waking & Thinking

This piece was inspired by walks taken in the woodland near my hometown of Cwmbran in South East Wales during the Christmas perious of 2017.  It was a period of reflection, about the year gone by as well my time so far on this course; hence the name for this piece. I wanted to make a piece that displayed organic as well as geometric properties, symbolising different yet often often complimentery states of mind; such as logical vs emotional states, or rational vs irrational. The shapes emerge, or wake, from the darkness that surround them and with time, their form and colour relationship changes as the logic of the program is executed.

produced by: David Williams


Given the above inspiration, a particularly striking aspect of being outdoors in winter is the early sunset and the resultant colours in the sky. As such, I knew that in the animation I would like to explore colour and transparency in some way. With this in mind, I took some time experimenting with the colour pallette I would use in the animation. Initially displayed on a white background, I changed this in the end to black, so that there would be a greater sense of 'emerging', or simply 'waking up'.

Concept and background research

This process of 'waking up' is largely what dictated the sequential logic of the piece. In the same way that we may wake and start following one thought process,  then quite quickly other thoughts enter in; so to with the animation, with each of the four planes of the piece symbolising four seperate thought processes, which pulsate, move and change over time. 

There are two main scenes. In the first, we see each plane waking sequentially, it's shape pulsating back and forth with strong saturated colour.  This then fades slowly away and gives way to a group of spinning geometric shapes, whose structure is also shifting and whose colour slowly rises to dominance over the simple pulsating shape which began the sequence.

The second scence attempts to delve deeper into the geometric logic of the first - zooming in and tracing the path of each linear connection. The structure of each can be examined from different points of view as they spin around the center,  X or Y axis and slowly each one will form its own fully formed structure, thus solidifying the thought process.


Conceptually I had an idea of what I wanted to produce, but the actual structure took some time to figure out. I've always enjoyed the early work of the Italian Futurist painters such as Umberto Boccioni , as well as other early abstract painters such as Kasimir Melevich and Graham Sutherland to name but a few. For me, the work produced by these artists bridges the conceptual gap between analogue and digital artwork (e.g. alrorithmic design) in the way that each in their own way embraced geometry and movement, albeit through a static medium. 

Then, while working through some examples in Denis Perevalov's 'Mastering Open Frameworks',  I happened across a sketch which brought all of this together. Chapter seven contains an example called 'The triangles cloud', it was on this sketch that the bulk of my animation was based - It fit the bill for the kind of animation I wanted to create using basic 2D shapes. I modified it in several different ways in order the produce shapes other than triangles and have them change over time and through the interrogation of the code I was able to get a grasp of its underlying structure and try to make it my own.


The sketch was built solely in OpenFrameworks with no additional add-ons. To set up vertices for a number of shapes, the easiest way to acheive this is through a vector array. I noticed that in the code for the aforementioned 'triangles cloud', a clever way to do this and to have the correct size array i.e. to have enough values to correspond to a shapes vertices, was to multiply the number of shapes by the number of spatial arguments for a given shape. So in the 'traingles cloud' example, you have ((number of shapes) * 3), with three being the points of the triangle , and as the vector has already been told to receive vertices in the form of ofPoint, it already has the additional (x,y) co-ordinates for each point 'built in', as it where. Therefore, in order to modify the code to create custom shapes, I simply increased the number from three to four (for a quad shape), or to two, for lines.

A 'for' loop in the setup would fill the vector array with values which used random numbers between a given maximum and minumum value and this would determine the resulting size of each shape. Another loop was used in the function to loop through the vector array and draw the shapes.

To create the pulating colours, (which go from colour to black), I built a simple counter based on the sin function, which flowed in that distinct sin-wave pattern between -1 to 1 as floating point values. I was able to map this to create linear interpolation (ofGetLerped) between the colours.

I used 'if' statements for a counter which allowed the initial shapes to shrink and grow relative to the dimesions of the window, or 'plane' as per the projection map.

I also used the same sin counter to modify the shapes over time, adding one or subtracting one to the last vertices point within the drawing 'for' loop.

The first scene utilised 'whole' shapes on a refreshing background, whereas the second scene did not refresh the background in order to reveal a 'drawing' created by the path of the moving lines. I liked how this created a noticeable effet between these two main scenes and it fit the conceptual logic of my animation well. 

Future development

I would like to refine the process of creating classes in C++, which allow me to make the small modifications needed for this particular kind of animation without having to create a large number of very similar classes, as I did in this case. I would also like to further explore vector arrays and also add further complexity using, for example, the noise function in combination with poly-lines. This wold also allow me to explore the creation of more organic structures as well as strictly geometric ones, as was my goal for this animation. I would also like to expand into creating natural effects such as wind and gravity - as utilised in Daniel Shiffman's 'The Nature of Code', which I also informed some of my research and conceptual development.

Self evaluation

I liked the way each of my main two scenes worked, but in the final animation the transition between them could have been less abrupt.  I found myself fixating on trivial details when I could have been working on creating perhaps an intermediary scene which may have created a greater sense of narrative. The way in which the shapes moved  I thought worked well in the second scene but in the first it is not that exciting - in future I would like to have the shapes moving more independently from eachother. I found the process of creating an engaging animation challenging but overall quite fun, and I really enjoyed working with colours and transparency for greater emotive effect, it was good to feel a sense of ownership over this creative decision. I feel that I have a greater understanding of the technical aspects which were explored in the sketch, but I feel that I have some way before I can freely creatively express myself with code. That being said, I find I am able to visualise the logic (of coding creatively) slightly clearer as a result of working on this assignment.


Mastering openFrameworks: Creative Coding Demystified; Denis Perevalov 2013

The Nature of Code; Danial Shiffman 2012

Walking and Mapping: Artists as Cartographers; Karen O'Rourke 2013