More selected projects

Projection Mapping: Unload

Unload is a projection mapping installation that explores recursive trees, diffusion-limited aggregation, and other generative art techniques. These ideas are interleaved through the usage of an elaborately composed score to arrange ideas in time. Contains flashing images.

produced by: Armando González Sosto


Unload is a piece of generative art built out of the orchestration of a collection of separate generative ideas, interleaved and arranged through the usage of a score. As a musician, arrangement of ideas across time is something that comes naturally to mind. In this piece, I decided to have a very granular control of the temporal development of ideas, allowing the combination of different yet related generative pieces. 

Time is an important consideration in this piece, and it is interesting to observe the different time-scales explored. Every panel contains a different, ocassionally independent sketch. These sketches have their own time-scale that is pertinent to itself, but the time-scales of all sketches are constrained by a score. I liken this to the usage of samples in styles of music such as hip hop, where ideas that initially might seem unrelated are put into context by an overarching structure that contains and contextualizes them. 

The sketches themselves are built on traditional computational arts ideas. Patterns found in nature are alluded through the usage of recursive trees and their variations, as well as through the creation of diffusion-limited aggregation (DLA) patterns. Other sketches draw from the work of artists like John Whitney and Zach Lieberman.

Concept and background research

An important part of the gestation of this work included looking at the work of other artists, namely John Whitney. His generative pieces, shown in the "Matrix" series and "Permutation", contain illustrations that are heavily derived from the usage of trigonometric equations to plot the coordinates of points on a two-dimensional cartesian plane, utilizing those points in a variety of ways. Two sketches central to this piece were developed using these ideas. These processes are quite similar to those found in modular synthesis, where complex signals are used to control parameters of larger structures.

Another important reference in this piece was the work of openFrameworks co-creator Zach Lieberman. In his talk Poetic Computation at AIGADesign, he demonstrates his programming process by creating and modulating a line built out of hundreds of circles. I found it inspiring, especially since it created a smooth and gradual shape that contrasted with what I was doing with my other ideas. I decided to use this as a point of departure and explore using more complex trigonometric equations to modulate the size, color, and position of shapes. This yielded a flowing shape that rescembles a lava lamp. I kept exploring this idea and implemented it with squares as well, which resulted in a circularly flowing pattern of arrows. 

Another important reference in my research was Jason Webb, whose open-source compendium on Digital Morphogenesis provided inspiration and contextualization for many ideas. By interacting with his DLA examples online, I was able to analyze and understand the processes involved, which led me to develop my own approach to it from scratch, using Daniel Shiffman's reference material on vector mathematics from The Nature of Code as a handy guide.



This project was developed in C++ using openFrameworks and the ofxPiMapper addon. The ofxPiMapper addon takes FBO objects and renders them onto panels that can be placed over different parts of a screen in order to create a projection map. Every sketch is in essence an FBO object which is created by extending the FboSource class from the ofxPiMapper library.

Due to the currently-ongoing Covid-19 situation, the project could not be projected on physical objects, as mixing with people in spaces and travelling is not currently possible. A 2D render was captured instead. Despite the obvious limitations, a benefit of this setup is that the perspective of the objects is still mantained, so a clear idea of what's going on is mantained despite not being projected on top of objects.

The score consists of a JSON file that contains an array of objects with two values: a "preset" and a "duration". A "preset" is a saved arrangement of panels with assigned FBO sources/sketches, stored in an XML file. The process of developing this piece consisted of creating about 87 different presets (in other words, 87 different arrangements of FBO sources ), which were then sequenced in a JSON file with the duration as the only parameter. 

The lack of control of parameters afforded by the JSON file meant that something else had to be done if independent instances of a specific sketch were to be created. Artistically, having independent instances of a sketch would mean that the same sketch would unfold differently due to their generative processes running independently from other instances.

Simply creating multiple instances of the same class did not work, as the ofxPiMapper addon looks at the "name" variable of each class in order to access it, and not to the specific instance of the class that was made in code. This means that multiple instances of a class could be made and added to the ofxPiMapper, but due to having the same static name, two of these instances would be overwritten. 

To navigate around this limitation, I decided to utilize a class constructor function that would take a string parameter that would then be used to set a unique name for each instance of the class. This name could not be replaced later on the development of the piece though, as these names were automatically set in the XML file that contained preset information, and changing the names in code would mean that all the references to that name would have to be manually updated in the XML file. This, however, presented me with the capability of having multiple instances of a class which would run independently of each other.

Future development

I feel satisfied with the stage at which this piece arrived. However, I would like to keep exploring how different panels can interact with each other. I feel that this could be conceptually very interesting, as it would break the "frame" that currently holds my piece. I would also like to work with different structures, and work with space and the ways in which the projections interact with space.

Self evaluation

I feel quite satisfied with the end result of this piece. I feel I was able to form a coherent artistic statement that feels consistent with my artistic personality, which is something I set out to do. However, I feel like this is just the beginning of an artistic vocabulary I'm beggining to develop. This means that while content with my work, I feel like I have to work more on related