Dancing Cubes: Growing Chaos
Produced by: Max Jala
'Dancing Cubes: Growing Chaos' looks to give life to inanimate objects (cubes) through projection and animation. The visuals were designed to accentuate the form of the three cubes and thus the design elements used are all squared in shape. The piece looks to grow incrementally in life and chaos, reaching a climax of random moving video cutouts.
The main concept behind the piece was to create animations and visuals that complemented the geometric form of the cubes. This informed the minimalistic design style which dominates the piece. Also, with the restrictions placed on the assignment in terms of the exclusion of sound I wanted to use transitions to portray a sense of tempo and the illusion of mental projection of sound. I wanted to create a sense of growing chaos as well, with the first half of the scene choreography being very minimal and the second half being more chaotic and busy.
The main inspiration of the piece was the form of the cubes used. I wanted to create animations that were generally minimalist and complemented the form of the cubes. One stylistic inspiration was Ryoji Ikeda's work which tends to be black and white and simple in geometric form.
One specifc inspiration for the chaotic video collage scene was Ezra Miller. I wanted to take the idea of using video/images almost as a paintbrush - leaving trails as they move that form the visual as much as the video content itself.
Many of the visuals centred around geometric transformations and movements so it was important to pay close attention to position and size of the animations. Global variables of type (glm::vec3) were used to keep track of positions and size.
One useful function of piMapper was the scene duration variable of the scene manager which allowed me to keep track of timings. This allowed to time animations to 'complete' itself at the specific end of the scene duration. In order to gain access to this variable across different classes I made a global variable of the sceneManager declaring it as 'extern'. Initially I tried to access the sceneManager instance in the ofApp class using pointers, but what I learnt after some research is that classes cannot include each other as it creates a recursive loop of calling each other. Thus the global instance using 'extern' seemed like the best solution.
The 'climax' scene of moving video subsections was based on the slitscan assignments where subsections were used. One challenge of this scene was loading multiple video content in a fast and efficient way. The solution I ended up using was an array of video players that individually load specific videos at setup so when a new scene needs to be triggered the video simply has to play rather than be loaded before.
In the future I hope to develop more scene to give the piece more variety. Also it could be worth utilising sound to give scene transitions more power and effect. Lastly, the piece would be greatly improved if it were actually projected, so naturally this is something I want to explore in the future.
In general, I am quite pleased with the visual effect of the piece and the individual animations. However, I could have developed more scenes to allow for more snappy transitions and variety within a 3 minute period. One particular scene I am happy with is the video collage scene and is an idea I want to develop further. Code-wise, I believe I could've implemented classes for some of the coordinate tracking to streamline my code further.
Ryoji Ikeda 2017, test pattern [N°12] at Store Studios
Ezra Miller 2020, Audiovisual Mix for Fact Magazine