The workshop was held in Montreal during MUTEK at SAT Transform and was designed for people who want to make TouchDesigner their professional production tool. It was led by Steve Mason of Obscura Digital along with Barry Threw - also from Obscura - and Greg Hermanovic and Markus Heckmann of Derivative. Needless to say there was a gargantuan wealth of knowledge, insight and practised experience shared over the course of the workshop that is now available to everyone.
The workshop's focus was on practicalities of production and participants worked along with the instructor replicating whatever was being demonstrated and produced. We have taken the content of these 2 days and edited 18 chronological videos to be watched and replicated in the same way.
In producing the final videos of the live sessions we've tried as much as possible to keep the content intact while 'tidying' up only the bits that seemed to really need editing. In a few cases (and never for too long) the audio volume may be a bit low with the presenter turning away from the recording source, or one of the other people in the room speaking far from the mic. Generally speaking, it's very clear.
For those of you about to tackle the videos there should be ample time to work along with them. Watch the videos with HD on, if possible. Make sure you get to watch Steve Mason's "Demo of CineChamber Perspective Pre-viz" perspective techniques.
Date: Thursday May 31 & Friday June 1, 2012
Location: SAT Transform
Time: 10:30 am - 4:30 pm
Title: Learning Derivative's TouchDesigner with Steve Mason (Obscura Digital)
Instructors: Led by Steve Mason (Obscura Digital) with Barry Threw (Obscura Digital), Greg Hermanovic and Markus Heckmann (Derivative)
Organizer: Isabelle Rousset (Derivative)
Learn from some of its most accomplished and daring users how TouchDesigner, the real-time visual development platform driving Amon Tobin's ISAM, Plastikman Live and Cinechamber, can be used for creating interactive media systems, immersive/projection mapping environments, music visuals, and rapid-prototyping creative impulses. Master the TouchDesigner fundamentals with Steve Mason and Barry Threw of Obscura Digital and Greg Hermanovic and Markus Heckmann of Derivative.
The workshop consisted of the following segments which are reflected in the videos below:
Day 1 Morning
- Steve Mason | Introduction Operator Families and TOPs
- Greg Hermanovic | Introduction to CHOPs
- Steve Mason | Introduction to SOPs, inter-OPs, Components, Rendering and DATs
Day 1 Afternoon
- Steve Mason | Demo of CineChamber Perspective Pre-viz
Day 2 Morning
- Barry Threw | Movie Playback Examples
- Greg Hermanovic | Constructing a Control Panel. Clones & Windows
Day 2 Afternoon
- Steve Mason | Working with Audio
- Markus Heckmann | Audio Visualizer Structures
- Markus Heckmann | KanTan Mapper
- Steve Mason | Instancing, Optimizing, Inter-Process and Q & A
TouchDesigner MUTEK Workshop Videos
Introduction to TOPs | Day 1 Part 1 with Steve Mason
General approach toward TouchDesigner at Obscura Digital. families of operators, first the TOP (texture (image)) family. TOPs on the GPU. Movie In TOP for stills and movies. the parameter dialog, image resolution, pixel formats, image playback controls. some sweet 16 TOPs - the composite operator to combine images. blur, edge detect. the Info popup to examine image properties. more operators: transform, over, text. displaying TOPs in the background of your network, use of Null TOP. Level and HSV adjust.
Introduction to CHOPs | Day 1 Part 2 with Greg Hermanovic
Create new project, forms of file paths, LFO CHOP, the parameter ladder, triggering the LFO to reset, using Trail to analyze time-history, length of CHOPs. sample rate of CHOPs, CHOP viewer. "time-sliced" CHOPs. separate graph per channel. some sweet 16 CHOPs: Select, Math CHOP ranges (Math CHOP video), Noise, channel-generation patterns. Filter, Merge. comparing channels, Math combining. CHOP internal variables. channel Scope parameter.
Intro to SOPs, inter-OPs, Components, Rendering and DATs | Day 1 Part 3 | Video 1 of 2 with Steve Mason
Torus, noise. info popup on each SOP. surface normals and faceting. cook time for each SOP, cooking once vs cooking every frame. some sweet 16 SOPs: grid, box, transform, merge, twist. Inter-operation: TOP to CHOP, mixing CHOPs with differnt # of samples. CHOP to TOP. images that are 1 pixel high. matching channels to SOP points. Limit SOP creating 3D shapes from CHOPs. time-slicing the Noise CHOP. expressions in parameters. online doc for each OP and parameter.
Intro to SOPs, inter-OPs, Components, Rendering and DATs | Day 1 Part 3 | Video 2 of 2 with Steve Mason
Encapsulation of networks through components. / is root. rollerwheel to navigate components. Geometry components are for SOPs so they can be rendered. SOP render and display flags. Render TOP setup with Light and Camera. anti-aliasing. avoiding using too much GPU memory. Phong material and texturing. materials are GLSL shaders you can output in DATs and edit. "expert" operators. DATs (data operators) as tables - SOP to DAT converts points to ASCII-readable tables. SOP points, vertices, primitives. converting DATs back to SOPs. Trace image to polygons.
Steve Mason's CineChamber Perspective Pre-viz | Day 1 Part 4 | Video 1 of 3
Approach to production at Obscura Digital. trompe de l'oeil illusion. a room as a modded box. split network pane and add a geometry viewer pane. put rectangle "plane" on wall to represent a window to world "outside". add "eye" camera and make it lookat plane. create 3d model ("scene") as subject outside "window". in scene build spike ball as subject. mesh vs polygon sphere.
Steve Mason's CineChamber Perspective Pre-viz | Day 1 Part 4 | Video 2 of 3
Set up render from "eye" camera. where to attach lights that illuminate scene. material for window, using texture from "eye" render. changing the texture coordinates of "plane" to make view from "eye" appear with correct perspective: "plane" Texture SOP set to Perspective from Camera "eye". correcting for aspect ratio. moving eye to check accuracy. add preview camera and another render for another observer. opaque backgrounds to render. hook Mouse CHOP to preview camera by re-ranging and exporting. field-of-view.
Steve Mason's CineChamber Perspective Pre-viz | Day 1 Part 4 | Video 3 of 3
Putting project in Perform Mode. with /perform. idea of tracking of person walking in the room and using their position for position of "eye" object. how to get traking positions in: OSC input, etc. actual previs for CineChamber and final rendered results. 10 "eye" cameras at one point in room (center of room here) looking in different directions. how to make the 10 renders record .mp4 movies using 10 Movie Out TOPs. the generation of Steve's mountain landscape geometry and post-effects. 32-bit displacement (noise) image. Q&A: 1 master computer and many slave computers rendering 1 or 2 outputs for projectors. simple audio processing. SOP scale driven by audio. groups within SOPs.
Movie Playback Techniques | Day 2 Part 1 | Video 1 of 4 with Barry Threw
Planning your TouchDesigner tasks. name project. TouchDesigner internals in /sys are procedural networks. Jesus saves. creating project file folder. to crossfade between 2 movies and texture torus. structure videoplayer component and and render component. Select TOP and paths to other nodes. Selects vs in/out wires. relative vs absolute paths, using variables in paths.
Movie Playback Techniques | Day 2 Part 1 | Video 2 of 4 with Barry Threw
Setup crossfade with export (internals of export). alternately using expressions to fetch channels to parameters. commands vs expressions. sweet 16 commands and expressions. built-in variables, component variables. node errors. Info CHOP gets internal state of any node, especially Movie In. cook times, extracting current movie frame.
Movie Playback Techniques | Day 2 Part 1 | Video 3 of 4 with Barry Threw
(this video is shot with hand-held camera) first is a bit of eradication by barry. (advanced: where/how Variables kept, idea of splicing in procedurally-created variables.) creating a 3-row 1-column table for file names. creating component variable “mediaPath” by putting a 1-line command in a Text DAT and running that script by hand. (advanced: "system" command). making one parameter refer to another parameter. changing File parameter of Movie In TOP to grab string in table cell with tab() expression. “exhelp” command. spaces in the correct places. nodes/paths are case-sensitive. alternate ways to get table cells.
Movie Playback Techniques | Day 2 Part 1 | Video 4 of 4 with Barry Threw
Task is to switch to next movie when current movie ends. Info CHOP on the Movie In TOP. (not in video: in 088 it is a lot easier using the loop_frame or last_frame channel of the Info CHOP pointing to Movie In). Info DAT. Select CHOP with reference (dashed) lets you fetch from any network. Channel names in popup menu. alternate to catch event: put Slope CHOP before Expression and make expression $V<0. CHOP Execute DAT runs one command when CHOP Expression CHOP goes off-to-on. “opparm” script command to set the row number parameter in Select DAT. counting in a 0 1 2 cycle. movies cycle. using "ex" command to print commands as they are run. changing an operator from one type to another. using CHOPs to trigger events to run scripts.
Constructing a Control Panel. Clones & Windows | Day 2 Part 2 | Video 1 of 2 with Greg Hermanovic
Components with output OPs. focus on "Panel"-type components. Container components hold user interfaces. use of ./ to get a node inside a component. components with inputs. adding a slider. adding blur and hooking slider to blur amount. isolating one channel from 2D slider. bringing panel gadgets into floating user interface windows. slider in panel with blur effect in background. putting TOPs in network background. gadget postioning and occlusion. preserving aspect ratio. inside a slider. transparent gadgets. Panel CHOP useful to get panel states. types of gadgets.
Constructing a Control Panel. Clones & Windows | Day 2 Part 2 | Video 2 of 2 with Greg Hermanovic
Panel values like rollover, select, u, v, click. pattern expansion. giving the slider a TOP input and a TOP output. moving blur effect so it is inside slider, and slider background is the blurred image. multi-outs on blur slider panel. clean up your networks. panel opacity. changing slider handle from dot to vertical bar. expressions that control where knob is placed in slider. finding parameter names for use in expressions. making panel resizing automatically procedural. panel display flag. out-of-range in sliders and clamping. slider dead zone. laying out panels in container procedurally using $OD. Cloning a component. editing clones. saving components as .tox files. loading .tox files manually or automatically. using the Blend component from the palette. inside design of the Blend component and its GLSL shaders for blending. laying out gadgets and set up container for Perform mode. video out going to second monitor. putting all UIs and monitor outs into one wide container.
Working with Audio | Day 2 Part 3 with Steve Mason
Reading audio from different sources, analyzing the signal, coaxing the Spectrum CHOP into giving useful data, working in frequency domain, smoothing signals and using the results to drive 3D geometry.
Audio Visualizer Structures | Day 2 Part 4 | Video 1 of 2 with Markus Heckman & Steve Mason
Equalizer from palette to get envelopes. go to wuestenarchitekten.com. start with Sound Viz 01. Starting from .tox. creating particle system from points of sphere. birthing and life expectancy. randomizing birth locations. Sort SOP to control/randomize point ordering. point normals used as the starting velocity of particles. creating Geometry component from SOP so it can be rendered. animating forces of particles using audio. RMS power. exporting by dragging over parameter tabs.
Audio Visualizer Structures | Day 2 Part 4 | Video 2 of 2 with Markus Heckman & Steve Mason
Generating polygon geometry from particles. CHOPs containing audio have 735 samples per frame if 44.1KHz. transferring CHOP samples to SOP lines using CHOP to SOP. Creating an XY scope. audio samples driving normal instead of position. joining points, thinning out points. rendering and applying feedback and falling into the lovely feedback black hole. Cache TOP to delay video. blur/displace combination. words of wisdom – you can’t lose. write and read .geo geometry file. try Audio Viz 02 now. CHOP to TOP this time. 1 pixel is one sample. convert to circular, displace, then additive feedback with green edge. more wisdom – you may be happier if you get lost.
Kantan Mapper | Day 2 Part 5 with Markus Heckmann
Setting up Kantan (it’s on the forum), drawing a rectangle or freeform polygon shape, then dragging a texture (TOP) onto it, adjusting how the texture fits within the shape. using Bezier shapes. outputs of Kantan. discussion on different methods of projection mapping. edge blending tool for a projector-pair. TouchDesigner as a tool for prototyping projection mapping techniques using its ramp, level, crop, blend operators. routing the output of Kantan to a projector. accessing the parts inside Kantan to customize it.
Instancing, Optimizing, Inter-Process and Q&A | Day 2 Part 6 with Steve Mason
One 3D geometry instanced at many locations, with variations. preparing the CHOP to provide positions and rotations. discovering limits of the CPU/GPU, watching performance monitor to see bottlenecks, and optimizing. Render Pass TOP, render overdraw analyzer. shared memory interface to other processes. programming C++ custom nodes. UDT protocol and various ways of sending data between computers.
We would like to thank Steve Mason and Barry Threw for their generosity and enthusiasm in volunteering to share their knowledge and experience at the workshop. We would also like to thank SAT and MUTEK for this remarkable opportunity and for working with us to ensure the workshop's success. We'd especially like to thank Francis Pineau at SAT Transform for his very gracious assistance. And last but not least, to our amazing and diligent students - we could not have imagined a better experience or group of people to have shared it with- thank-you for your participation and we look forward to the next!