Example TouchDesigner Exercises
On this page you’ll find some example exercises that you could use for your course or workshop. These have been used in previous courses and workshops, so you may need to adjust them based on the needs and educational targets for your learners.
Operator Family Exercises
Operator family exercises are short prompts that encourage users to focus on a single family of operators for responding to a prompt. These exercises were not focused on learner assessment, but instead were open ended explorations for students to encourage the creative use of TouchDesigner.
You may find that these same ideas can be used with different prompts, or with different collections of TouchDesigner operators. You may also consider using the same style of exercise where you require learners to find creative uses for operators that are connected to the topic in your course or workshop.
TOP Prompt
Using what you’ve learned about TOPs, create an image that responds to the prompt:
A dark and stormy night filled with the unexpected
Include at least two of the following operators:
- Level TOP
- Tile TOP
- Composite TOP
- HSV Adjust TOP
- Ramp TOP
CHOP Prompt
Using what you’ve learned about CHOPs, animate a TOP that responds to the prompt:
The northern lights danced in the sky
Include at least two of the following operators:
- LFO CHOP
- Math CHOP
- Timer CHOP
- Pattern CHOP
DAT Prompt
Using what you’ve learned about DATs, create a Text TOP message or poem about:
Celebrations
Include at least one of the following operators:
- Text DAT
- Convert DAT
- Table DAT
- Substitute DAT
SOP Prompt
Using what you’ve learned about SOPs, create a piece of geometry that responds to the prompt:
A bamboo forest
Include at least two of the following operators:
- Box SOP
- Line SOP
- Sphere SOP
- Rectangle SOP
- Copy SOP
- Facet SOP
- Transform SOP
COMP Prompt
Using what you’ve learned about COMPs, make an interface that changes the parameters of something you made from the previous challenges.
Include at least one of the following operators:
- Slide COMP
- Button COMP
- Container COMP
Experimental Prompt
Using what you’ve learned so far, create an animation that evokes the feeling of:
Water
This could be in the form of rain, waves, ripples, etc. — your choice!
OP Snippets Exercises
OP Snippets Exercises were designed for an introductory course to TouchDesigner, and encouraged students to explore the examples in Operator Snippets. This set of exercises are based on the idea that finding working examples, and learning how to build on top of them is a critical skill for self learning. When using these exercises it is important to introduce Operator Snippets and where to find them.
Exploring and Getting your Feet Wet
Operator Snippets are one of the most useful help features in TouchDesigner. For this assignment, you’ll spend some time exploring the TOP Operator Snippets. You’ll identify three operators that you find interesting, and then create some simple examples that demonstrate what those operators do. Start by looking through all of the TOP examples and find three TOP Operator Snippets that you like / find useful / find interesting.
- Create three Containers, each focused on a different operator.
- Inside of each container create a network that demonstrates what a given operator is used for. Each container should contain:
- At least 3 operators
- No more than 10 operators
- Containers should have the same dimensions as the final TOP in your network.
- Make sure to leave comments or annotations about what your code is doing.
- Every example should be animated in some way – using expressions (me.time.seconds / me.time.absSeconds or me.time.frame / me.time.absFrame)
Building a Nervous System
We’ve spent some time already talking about the importance of modular design when it comes to programming, and this assignment is an opportunity to try your hand at building a modular CHOP control network.
For this assignment, you’ll spend some time exploring the CHOP Operator Snippets. Build a CHOP network based on what you learn in Op Snippets that controls a component with ten different custom parameters.
- Your snippet should use a Base to encapsulate your CHOP network.
- All 10 channels should be animated in some fashion – in other words, there should be some change (no matter how small) in the channels that drive your custom parameters.
- Your network should be well commented – more than 1 comment or annotation. Your comments don’t need to be especially long but should help me understand what you were thinking / working towards.
- Your network must contain each of the following CHOPS: Merge, Rename, Speed, and Math. As a note, you can use more than one of these, but I want to see at least one of each of these in your network.
Building an Interface
An interface is the intersection between your code and the end-user. Users rarely touch the code itself in an installation or performance. In fact, programmers hardly touch the code themselves once a tool has been built. Instead programmers and users alike pass through an intermediary, the Interface. Interfaces are so common to us, that we often forget they exist. We forget that they impose invisible limitations on how we can manipulate the digital world. We forget that they are the part of a program that we interact with most often, and have the deepest relationships with.
For this assignment, you’ll be practicing interface building. You should build a Button with a name (or colors) that change according to its activation state, a Horizontal Slider, a Vertical Slider, a 2D Slider, and a Float-Feedback Slider.
- A Button that:
- has at least two different text values whose display varies depending on the state of the button.
- A Horizontal Slider that:
- has a label (DAT to Text TOP Method) for the background (sized to match the dimensions of the parent)
- is correctly scaled so as not to fall off the outside bounds of the container.
- A Vertical Slider that:
- has a label (DAT to Text TOP Method) for the background (sized to match the dimensions of the parent)
- be correctly scaled so as not to fall off the outside bounds of the container.
- A 2D Slider that:
- has a label (DAT to Text TOP Method) for the background (sized to match the dimensions of the parent)
- contains a square knob and cross hairs.
- contains an Out CHOP with two channels labeled: x and y
- A Float Feedback Slider that:
- has a horizontal slider with a label, and is scaled so as not to fall outside of the bounds of the container.
- the slider should contain an In DAT, a DAT to CHOP, an Override CHOP, and a CHOP Execute DAT.
- has a field COMP
Project-Based Exercises
These project based exercises come from beginner and intermediate courses on using code as an expressive medium. These courses had additional material presented in lecture that covered concepts of design and composition. When adapting these projects you may wish to consider what additional materials are presented as reference and context for your learners. You may also choose to adapt these exercises with material that is more appropriate for the course you are teaching.
Composition (Beginner)
Beyond just the mechanics of programming, we also need to consider the weight and heft of ideas when we are composing images with code. When considering the composition of an image, where different elements live in the raster, using the principles of design can both give us a language for expression and a source of inspiration.
Select one of the following principles of design, and include a comment in your network about what principle you’ve selected:
- balance
- emphasis
- movement
- pattern
- repetition
- proportion
- rhythm
- variety
- unity
Project Requirements
- Your project should then be an exploration of the selected principle, and an expression of the ideas embedded in it – this should be communicated visually in your final composition.
- Your Network must include an image that you used as a part of your research for this project.
- Your project should be encapsulated inside of a container Component that has a resolution of 1024 x 768.
- The resolution of your Container should be set with an expression – you can drive your resolution from the contents of a table, or the resolution of another operator – for example
op(‘filePathToAnotherOperator’).width
- Your network must be well commented. Include your name and the date in any of your comments.
- Your network must include at least 10 operators.
- Your final composition should be animated.
- Your network should include a button to toggle between your inspiration / reference image and your final composition
- Your final network should run at at least 40 frames per second.
Visuals with Control (Beginner)
For this project you’ll start to combine the ideas of building interfaces along with controlling networks. This project is composed of two parts – an interface which is separate from a responsive visual network. You will build both of these elements for this project:
- Your own visual component (Container) that has 15 control elements.
- A component (Container) that holds a CHOP network which animates your visual component. This CHOP network should output 15 control elements.
Project Requirements
- Your network should contain a Visuals COMP (Container) – make sure this is labeled with your initials and “vis”. For example, mine would be labeled, “mrVis”.
- Your network should contain a Control COMP (Container) – make sure this is labeled with your initials and “CTRL”. For example, mine would be labeled, “mrCTRL”.
- Your Control COMP should contain 15 animated channels.
- Your Visuals COMP should contain a constant with 15 corresponding “default” channels that match the names in your Control COMP.
- The Visuals container should use expressions or CHOP exports to connect the 15 control elements in the network from a single Null CHOP. All 15 channels should make a recognizable change in your final image.
- Your Visuals COMP should contain a text DAT with a script for setting the resolution of the artwork in your network using storage.
- Your Visuals network should contain a real-time rendered piece of geometry – this requires a render set up with a Camera, Light, and Geometry COMP, as well as a render TOP with a resolution of 1280 x 720.
- The resolution of your Visual COMP should be 1280 x 720 – using storage as a method for recalling those values.
- Both your Control Container COMP and your Visuals Container COMP should be well commented.
- Your final visuals COMP should perform at least 40 fps.
Control Panel Interface (Beginner)
We need to think about how we build an interface to control and operate our visuals without needing to be in the programming environment. What does a user / operator get to drive? In what range? What are the limits that we impose on the user / operator? What message does this communicate to your operator / user?
Project Requirements
- A well composed and organized control panel.
- consistent spacing
- use of
me.digits
for layout organization - easy to read / understand labels
- A total of 15 control elements:
- You must use at least one of each of the following:
- button
- horizontal slider
- vertical slider
- 2D slider
- float feedback slider
- You must use at least one of each of the following:
- At least one radio button group.
- At least one use of hierarchy as an organization method.
- Buttons and sliders that have descriptive labels.
- Your visuals COMP must contain a single button that opens your control panel as a floating window using a script. This button should only be visible when moused over. Example code:
ctrl = op(‘../../ctrl’)
ctrl.openViewer()
- The size of your control panel should be 1024 x 768. Use storage to set and retrieve these values for your Control COMP. Hints:
- Store values with the script –
me.parent().store(‘key’,value)
- Fetch values from storage with the expression –
me.fetch(‘key’)
- Store values with the script –
- Both your Control Container COMP and your Visuals Container COMP should be well commented.
- Your final toe file should be set to open in perform mode.
- Your final visuals COMP should perform at least 40 fps.
Copy Art Part 1 (Intermediate)
For this first project you’re going to do what we always tell artists not to do – copy something. For this assignment we’re going to surrender any ideas that we need to have original ideas, or deeply felt earnest musings about the meaning of art. Instead, find something you think is eye-catching / interesting / funky / fun / ugly / weird / strange that you want to copy. You will: identify a video effect used or pioneered during the 60s-90s, replicate that effect as closely as possible in software, and finally create three variations on that effect.
To get started, identify a video effect (preferably analogue) from the time period of 1960 – 2000 that was pioneered or exploited in film or television – this should be an effect that you can find a specific example of on the web either as an image or as video. Here are some examples of the kind of effects that I’m looking for you to mimic:
Examples:
- Posterization
- Chromatic Aberration
- Displacement
- Analog Video Art Workshop Examples
- Chromascope
- Kaleidoscope
You will then re-create this effect in software as closely to the original artifact as possible. Once you’ve made something as true to the original artifact as possible, you will then create three variations using your original network as a starting point.
Project Requirements
- A button that opens up the link to your source material. Your button should use a Panel Execute DAT to accomplish this. Remember that you’ll need to
import webbrowser
before you can write a script in python to use that function. - A container that mimics (as closely as possible) the effect demonstrated in your research image / video.
- Three additional containers that expand on and explore the structure of your initial network.
- The resolution of your Containers should use storage.
- set storage values with –
me.parent().store(‘key’,value)
- retrieve storage values with –
me.fetch(‘key’)
- set storage values with –
- Your artwork should use a fit TOP to switch between two display options – a 16:9 aspect ratio and a 4:3 aspect ratio.
- Your expressions should be written as relative references.
- Your network should be well organized, and take advantage of encapsulation in Base or Container components when appropriate.
- Your compositions should be animated – you may use sliders or buttons to accomplish this animation.
- Your network must be well commented. Include your name and the date in any of your comments.
- Your final network should perform at 40 FPS or higher.
Copy Art Part 2
The first version of any component is always the hardest. Taking what you learned in your initial build of your copy-art project, revisit your initial work. Based on your three variations, build a finished effect that is a synthesis of your ideas and explorations – what was worth keeping, what should you throw away? In version 2, identify ten different parameters that you’d like to control in this effect. Build a system that uses sliders (with labels) to control these parameters, and finish your component so it stands alone as a tox file.
Project Requirements
- Have a control comp that’s composed of ten sliders with labels. Join all of your control sliders with a single merge CHOP to allow for uniform referencing.
- Have 10 parameters in your network associated with the sliders from your control element.
- Should be a finished exploration of your original idea.
- Should include a button to toggle between the following resolutions:
- 800 x 600
- 1024 x 768
- 1280 x 720
- Saved as a working tox file – please ensure that your tox file has a video inlet if appropriate, and uses relative references.
It’s All in the Data (Intermediate)
For this project you’re going to dig into some data, and create a system to visually represent what might otherwise be invisible. We’re surrounded by examples of this kind of work – infographics, data visualization, interface design, smart-apps, you name it – the world is awash in data, and we confront it every day. The challenge for this project is to push this boundary. Rather than worrying about how your data is going to be easy to read, or translate to viewers instinctually and immediately (something we might focus on in terms of infographics) – instead I want you to consider how you want to abstractly represent your data-set.
Put plainly, your challenge is to build an abstract visual representation of a data set.
Start by identifying a data set that you’d like to explore. This data set should be tabular in nature – that is to say that it should be able to live in a table. Sound and video are other kinds of data sets, but for this assignment, focus on an array of values that lives in a table. Consider how many parameters you want to control with your data – do you need normalized values, do you have a particular interest in terms of form or color that you want to explore. Look at other people’s work – do some exploring on the internet, do some visual research. Play. Don’t forget that a large part of this work is being willing to play with ideas. Don’t be afraid to get lost down a rabbit hole for a bit, just remember to resurface.
Project Requirements
- Is a resolution of 1280 x 720, and set to open in perform mode.
- Contains a Table DAT with your data. This should be encapsulated in a base in the root of your network in a Base COMP called “data.”
- Uses replicators or instancing – here I want to see that you understand how to use abstract constructions to drive larger systems (no hard-coding please)
- Uses Modules, Local Variables, or Storage.
- Is well organized.
- Is well commented. Comments are the messages you leave for your future self – just ask xkcd
- Performs at 40 FPS or higher.
- A ReadMe DAT that describes how / why you made the choices you did in visualizing your data set.