A generative projection mapping, based on a stochastic engine, resulting in no two performances being the same, yet following a common structure. Inspired by the album Damogen Furies by Squarepusher, and intended as a silent response to it.
produced by: with.lasers / nathan.adams
A projection mapping designed for use with Olga Kit (https://heavym.net/en/olgakit/presentation). It focusses on the use of stochiamteic process for trigging the content presented, and on which surfaces it occurs. By having mapped the geometry of the shape, the stochiometric engine in conjuction with a script determines the probabilities of an event occuring, and tests to see if it should happen and on which surface. These events can then trigger further events in other surfaces.
Concept and background research
Having picked the square shape (https://heavym.net/blog/en/tutorials/create-your-structure-with-olga-tutorials/shape-1-square/) to construct with Olga Kit, I was inspired to think about two factors;
- How realtionships between each surface could be constructed and managed
- Ways in which a three minute performance could be controlled generatively
My initial inspiration for triggering events on each surface, was directly influenced by the shape itself - primaily four pentagon based pyramids, and one square based pyramids - these reminded me of the Tombola sequencer created by Teenage Engineering for their OP-1 synthesizer (https://teenage.engineering/products/op-1) in which particles which trigger notes are introduced into a rotating shape - and where collision with the sides of this shape triggers an associated event (and the particle is bounced back into the centre).
In conjuction with this, a mapping of the surface was devised in which each surface could be related to it's neightbours, and the orientation of the triangle identified. This when used with a messaging system between individual FBO sources allowed both the sequencer, and individual FBO's to trigger events in one another
The project was created using OpenFrameworks, and the projection mapping using the ofxPiMapper add on.
The key development for project initially was the Tombola Sequencers - these were developed as a set of classes in OpenFrameworks, representing each sequencer, the emitter of droplets, and the droplet system. Although there is a processing example of such a sequencer https://github.com/teesloane/laundromat - I decided not to look at the code for this, but treat it as a backup in case I ran into issues.
The particle system was based primarly on Daniel Shiffmans Nature of Code, especially the use of the formula for Air Resistance, collision detection and how to implement bouncing was done by myself (with help from sources like http://paulbourke.net/geometry/pointlineplane/ for identfying if a particle had intersected with the edge of the shape). Bouncing in particular was a challenge, and required reflecting the current velocity along a plane perpendicular to the collision plane - and adding an approximation of the rotational velocity of thre shape that was imparted to the particle. Ultimately, in terms of the effect I was looking for, I was satisifed with the result.
https://vimeo.com/388943594 - Test video of working sequencers in various configurations.
Alongside this I developed a structure class which defined the geometry of the surface I was projecting onto. The information (and therefore the methods available) in this class allowed for the determination of a number of things
- Identification of one or more surfaces at random - including options for selecting the 24 slopes (surfaces which prjected from the base), and 4 base surfaces which remained flat to the projection surface
- Identification of one or more surfaces which are neighbours of a specific surface. This allowed specifcation by defined edge(s) or all edges.
The last key technical development was a messaging class, which was shared by all FBO instances (one for each surface), and the sequencers. This allowed both sequncer and surfaces to issue messages to one another.
For example the sequencer could trigger a defined effect in a random surface - some of these effects, when complete would be able to then trigger an effect in a random neighbour - creating a random walk effect across the surface.
When hoewver these were all put together, the effect was not that which was invisioned - the Tombola sequncers proved too chaotic, and triggered too many events to create a pleasing visual effect. This I believe is solvable with some tuning, and slight changes to approach as well as some bug fixes for particle life times (these were too long / aprticles were not destroyed, which resulted in the overall noise effect). In order to have something working for the show, I reverted to a simpler approach.
The StochasticEngine I created, took a basing scripting approach, where for a period of time, events could be triggered based on a probabality of occurance. This was checked every `tick` (ultimately determined to be 100ms) and a random number between 0.0 and 1.0 was generated, and if the result was less than the indicated probaility e.g. 0.02 (1 in 50), then event was triggered in the required surface.
This created a much more usable effect - but sadly at the cost of developing some of the visual effects I wanted to create.
Two last smaller technical challenges, were creating an effcient noise solution for the opening and closing scenes, as pixel by pixel rendering using the CPU in OpenFrameworks was extremely costly - I therefore implmented a GLSL solution based on based on the 2D Random section from https://thebookofshaders.com/10/
In order to create a more satisfying lighting effect - I created an ADSR enevelope to map opacity of the fill colour, allowing me to define levels and times for the transition.
At present, this project exists at the level of an MVP (Minimum Viable Product), as I was not able to achieve all the things I wanted to - further development would look at
- Tuning and reintegrating the Tombola Sequeners - and looking at how to combine them with the stochastic engine
- Development of the missing visual effects
- Better ways of implmenting the Structure class - possibly using an extension of ofMesh
- Using multiple Olga Kits in the same configuration - one reason for the ineffectjvness of the Tombola sequencers, is I believe the realtively small number of surfaces avaibale - if this was increased by around 4 times (28 to 116) then the events triggered may seem more cohesive and less noisy
As discussed, the Tombola sequencers did not work as expected, and resulted in them being replaced by a different sequecing engine. This was obcviosuly disappointing, and a lot of time had gone into the development of the Tombola sequncer. I still believe this is an interesting and effective solution - but it was the right decision to replace it with the Stochastic Engine.
Technically the underlying code for sequencers, messaging and structure definition did exactly what I needed - and early tests showed this to be very effective - especially the random walk effect. This possibly could have been achieved in an easier way - though I believe it would have introduced other complexities and probabaly been a zero sum in effect. Where this piece currently falls down, is that there were
- Not enough visual effects to work with for the surfaces
- A limited number of visual effects which had good interactions with surrounding surfaces
- This created challenges in programming an interesting and captivating display that lasted three minutes
I believe that the potential of this work is very strong, and that it requires addressing the points I have raised to create a much more compelling and interesting performance. Despite that I am prooud of being able to have created a scripted performance which follows a defined shape and pattern, but is different on every viewing, and that it provides a sound platform for creating a very strong piece in the future
Particle Systems / Physics - Daniel Shiffman - Nature of Code (particulalry air Resistance pp83/84) https://natureofcode.com
2D / 3D Geometry and solutions - Paul Bourke - http://paulbourke.net/geometry/pointlineplane/
GLSL Noise - https://thebookofshaders.com/10/
Not used, but was aware of
Tyler (teesolane), Laundromat Srequncer based on the OP-1 Tombola sequencer - https://github.com/teesloane/laundromat