More recently, the Kinetic Wall of Light described by Pixelux' Xavier Gruchet as a "visual experiment in optical illusion and light distortion", directed a LOT of lumens - 2,800,000 of them - on a prominent Paris couture house Défilé Men Summer 2015. The KWL is a grid of 20 x 10 moving light panels operating as a kinetic system that displays graphics generated in realtime with the motion of the fixtures.
The entire system is handled within the TouchDesigner environment running on a single workstation. Generative algorithms drive movement and control the LEDs to create complex patterns of motion: organic ripples of light energy model the shape of the wall.
Xavier provides us below with a detailed breakdown of how his team designed a system to manage, in real time, the grid of fixtures (the motion and the LED's matrix), with an integrated visualization to help during the creative process.
The lighting fixtures are Magic Panel from Ayrton. Each fixture is a light panel on a yoke that rotates on 2 axes (pan and tilt). Each panel is a matrix of 6 x 6 independent pixels (a 15w RGBW LED) and the whole panel is piloted with DMX.
A total number of 68 DMX universes were generated to control the motion and the LED array. The tricky part was the mapping of the position and motion with generative algorithms and the translation in 2 axes rotation (16 bits resolution on 540°).
The whole calculation and control is in real-time and the system is built with different modules:
- A graphic module (visual, graphic generation, algorithm).
- Visualization module (real-time 3D rendering).
- Data engine (translation between the graphic module and the protocol used to broadcast DMX over ethernet (Art-Net) and the generation of the 32,000 channels of data (8 bit)
Xavier Gruchet: The real-time pre-visualization was mandatory to collaborate with the Nous Productions team during the entire development and creative process, especially since the system would be operational only 2 days before the show.
The entire system is handled within the TouchDesigner environment running on a single workstation. For this particular project, most of the processing (the data engine) was performed on the CPU so we ran on a bi-Xeon machine (E5-2630v2) for a total number of 12 cores. It was a huge deal to keep a decent frame rate with heavy processing on the 32,000 channels.
We designed the application around those specifications and it was part of our creative process during the R&D and programming stage.
Hyper-threading was disabled and we spread the load into 12 processes, each running on its own core. Everything ran smoothly, with an average frame rate of 35fps (or refresh rate 35Hz) and an optimum load of 98% on the CPU equally distributed on the 12 cores.
For live control, our system was linked (via DMX) to a lighting desk (GrandMa 2) with full control over the features of the graphic module.
I would sincerely emphasize the robustness and versatility of TouchDesigner which made it very fast to develop the backbone of the system. My concern had always been about the generation of the 68 universes in real-time with a decent refresh rate - we normally mostly work on the GPU and this was our first very CPU-intensive project.
After the initial research, the tricky part was the processing of a very large set of data: it is more effective to process large data sets in small chunks and collect them afterwards in the correct order. With TouchDesigner's ability to communicate between processes, we decided to split the load with different modules (and specific purposes) into different processes - each on its own core.
We ran some tests to determine the processing module with the best overall performance. As itemized below there was a total of 13 modules with only 12 running live (we didn't need the previz).
1 x Graphic Engine - Where all graphics and the design are produced. Everything is generative (generated with TouchDesigner) with the option to be hooked up to the lighting desk for real-time control.
4 different processing streams (Touch Out TOPs): RGB LED matrix, White LED Matrix, Pan and Tilt (in 16 bit float to match the movement resolution)
Output: 4 x Touch Out TOPs
1 x Previz - 3D simulation in real-time
Input: 4 x Touch In TOPs (from graphic engine)
1 x XY (Pan/Tilt) Generation
Processing and formatting of the data in 8bit data channel for the pan and tilt
Input: 2 x Touch In TOPs (from graphic engine)
Output: 1 x Touch Out CHOP
6 x Color (RGBW)
Processing and formatting of the data in 8bit data channel for the RGBW in 6 modules.
Input: 2 x TouchIn TOPs (from graphic engine)
Output: 1 x TouchOut CHOP (per module)
4 x Art-Net Generation
Collecting the data and formmating/ordering the data in 8bit data to fit the DMX patch. The load was split on 4 modules.
Input: 7 x TouchIn CHOPs (XY and RGBW)
Output: 68 DMX universes (with Art-Net)
I used Replicator extensively to automatically populate the processing grid of the different modules with scripting in the channel numbering and naming to facilitate the ordering process at the end.
The real testament here is that I'm more of a graphic artist than a programmer but I feel while developing in TouchDesigner that you never lose sight of the creative process. TouchDesigner's versatility allows for working with graphics, data streams, 3D, tables…you can do any kind of processing, translate and pass data between processes.
I believe TouchDesigner is the only solution able to handle, such complex tasks without the need to be a professional programmer!