Category Archives: CHOPs

Nov 13 2014

Filter CHOP tutorial.

The filter CHOP. TouchDesigner 088. 2014.
The Filter CHOP can help you smooth, affect, or otherwise adjust incoming channel data.

1
00:00:00,567 –> 00:00:03,900
Let’s take a look at the filter
CHOP.

2
00:00:03,900 –> 00:00:10,000
The filter CHOP can smooth, or
sharpen, the incoming chop data.

3
00:00:10,000 –> 00:00:22,533
This sample network merges
unfiltered and filtered CHOP
data, so you can easily
visualize a side-by-side
comparison.

4
00:00:22,533 –> 00:00:33,533
The filter CHOP has 2 very
important parameters, the
“Effect” and “Filter Width”
parameters.

5
00:00:33,533 –> 00:00:36,567
We start with a noise CHOP.

6
00:00:36,567 –> 00:00:44,533
We can create different types of
animating noise, and see the
effects of filtering.

7
00:00:44,533 –> 00:00:50,133
The merge CHOP combines the
filtered and unfiltered data.

8
00:00:50,133 –> 00:00:54,467
The yellow line is the raw data.

9
00:00:54,467 –> 00:01:03,500
I’ll right click on the merge
CHOP, and choose “View” from the
pop-up menu.

10
00:01:03,500 –> 00:01:14,533
This is one of several methods
you can use to simultaneously
monitor different regions of the
Touch Designer workspace.

11
00:01:14,533 –> 00:01:19,767
I’ll adjust some of the noise
CHOP’s parameters.

12
00:01:19,767 –> 00:01:29,533
There are 7 types of filters,
and it is worth investigating
the effects each has on incoming
data.

13
00:01:29,533 –> 00:01:36,967
Some filter and width
combinations introduce more
delay than others.

14
00:01:36,967 –> 00:01:43,967
An “Effect” setting of zero
eliminates filter processing
altogether.

15
00:01:43,967 –> 00:01:55,433
Increasing the “Filter Width”
parameter causes more of the
surrounding sample range to be
included in the filter
calculation.

16
00:01:55,433 –> 00:02:05,133
Each application of the filter
chop may require a different
fine tuning of filter types and
parameters.

17
00:02:05,133 –> 00:02:15,900
Some applications may be
extremely accuracy or time
sensitive, while others may not.

18
00:02:15,900 –> 00:02:23,767
You can sharpen incoming data
that may be too smooth, to
create a greater value range.

19
00:02:23,767 –> 00:02:30,467
You can also de-spike incoming
data such as harsh audio spikes.

20
00:02:30,467 –> 00:02:32,467
The filter CHOP is very
powerful, and almost always
requires fine tuning based on
the specific application.

Nov 12 2014

Cross CHOP tutorial.

The Cross CHOP. TouchDesigner 088. 2014.
The Cross CHOP is a multi-input Channel Operator that allows you to interpolate between input values.

1
00:00:00,200 –> 00:00:03,067
Let’s examine the cross CHOP.

2
00:00:03,067 –> 00:00:12,900
The cross CHOP allows you to
switch between multiple inputs,
but interpolate between the
incoming values.

3
00:00:12,900 –> 00:00:20,167
You can use integers as cross
values to simply switch between
inputs.

4
00:00:20,167 –> 00:00:31,133
I’ve created a box SOP with its
“sizex” parameter referencing
the cross CHOP channel named
“chan1”.

5
00:00:31,133 –> 00:00:35,733
This will help you visualize the
cross CHOPs’ effect.

6
00:00:35,733 –> 00:00:49,367
The interpolation is straight,
or linear, so a cross value of
.5 will blend the first 2 inputs
at 50% each.

7
00:00:49,367 –> 00:00:51,367
The cross CHOP is a commonly
used operator that can
compliment or replace standard
switching.

Nov 12 2014

Sequencer CHOP tutorial.

The Sequencer CHOP. TouchDesigner 088. 2014.
The Sequencer CHOP allows you to create complex animation sequences. This is a specialized Channel Operator, and it can be difficult to master.

1
00:00:00,833 –> 00:00:05,133
Let’s examine the sequencer
CHOP.

2
00:00:05,133 –> 00:00:16,067
The sequencer CHOP is an
operator that allows you to
create and control complex
animation sequences.

3
00:00:16,067 –> 00:00:24,400
The sequences are held in CHOPs,
and referenced by a table DAT.

4
00:00:24,400 –> 00:00:33,633
Each CHOP can represent a simple
animation state, or a complex
animation.

5
00:00:33,633 –> 00:00:43,467
In this network I’ve built a
series of 5 animations that
control a character.

6
00:00:43,467 –> 00:00:51,433
The character is a simple face
with 5 possible animatable
features.

7
00:00:51,433 –> 00:01:02,733
We can animate the eyes and the
mouth, with simple values for
rotation, position, and scale.

8
00:01:02,733 –> 00:01:12,567
Each of the 5 constant CHOPs
holds 5 animation states for
each facial feature.

9
00:01:12,567 –> 00:01:24,333
The sequencer CHOP gives us the
ability to dynamically choose
any state we want, and blend
them together over time.

10
00:01:24,333 –> 00:01:31,367
We can combine static, or still
states, with complex animations.

11
00:01:31,367 –> 00:01:41,033
The face character is a network
of TOPs and SOPs that lives
inside a container component.

12
00:01:41,033 –> 00:01:45,400
I’ve built a mouth from a line
SOP.

13
00:01:45,400 –> 00:01:55,967
We can animate the 3 points on
the line: 2 for the left and
right side, and 1 for the
middle.

14
00:01:55,967 –> 00:02:01,000
The eyes are constructed from a
rectangle TOP.

15
00:02:01,000 –> 00:02:11,067
We vary the rotation and scale
of the rectangle to create
expressive animations.

16
00:02:11,067 –> 00:02:18,633
I won’t go into detailed
explanation of this network, you
can explore it on your own.

17
00:02:18,633 –> 00:02:33,200
The most important note is that
I use Python expressions to
reference the values stored in
the constant CHOPs above this
container.

18
00:02:33,200 –> 00:02:46,100
These values are the rotation,
position, and scale values that
drive the facial animation.

19
00:02:46,100 –> 00:02:56,000
Now that we’ve seen how the face
is constructed, let’s look again
at the complete network.

20
00:02:56,000 –> 00:03:03,967
The sequencer CHOP is now
referencing the constant CHOP
named “BASE”.

21
00:03:03,967 –> 00:03:14,000
I can adjust the values of the
base animation state, and see
the results applied to the face
character.

22
00:03:14,000 –> 00:03:22,500
By doing this, you will realize
that to create a new animation
state is a simple matter.

23
00:03:22,500 –> 00:03:35,167
You can copy the “BASE”
operator, add it to the
sequence, and adjust the
parameters to create a new
facial expression.

24
00:03:35,167 –> 00:03:42,100
This is the method I used to
create the following 4 animation
states.

25
00:03:42,100 –> 00:03:54,067
The last animation is here to
showcase the ability of the
sequencer CHOP to combine static
states with complex animations.

26
00:03:54,067 –> 00:03:58,933
I created this animation from 5
noise CHOPs.

27
00:03:58,933 –> 00:04:07,167
Each will generate random
states, over time, for each of
the 5 facial features.

28
00:04:07,167 –> 00:04:19,233
For this, or any animation, to
work properly with the sequencer
CHOP, you need to pay close
attention to how your channels
are named.

29
00:04:19,233 –> 00:04:26,367
I’m using 2 Python scripts to
control the sequencer CHOP.

30
00:04:26,367 –> 00:04:40,767
The logic is simple: 1st, copy
the contents of the table DAT
named “felipeSequence” to the
DAT named “sequencer1_sequence”.

31
00:04:40,767 –> 00:04:51,333
The reason we use a custom table
to create our sequence will
become apparent in a moment.

32
00:04:51,333 –> 00:04:54,800
Next, we reset the sequencer
CHOP.

33
00:04:54,800 –> 00:05:06,800
This forces the sequencer to
load the 1st entry in the table
DAT, which in turn, points to
the 1st animation CHOP.

34
00:05:06,800 –> 00:05:10,833
Now, our sequence is loaded and
ready.

35
00:05:10,833 –> 00:05:17,567
This script simply tells the
sequencer CHOP to step to the
next sequence.

36
00:05:17,567 –> 00:05:20,533
Now let’s step through some
animations.

37
00:05:20,533 –> 00:05:24,167
Pay attention to the sequencer’s
table DAT.

38
00:05:24,167 –> 00:05:32,200
You’ll see that at the end of
each sequence, the row
containing that sequence is
deleted.

39
00:05:32,200 –> 00:05:36,533
The second row of the table DAT
is never deleted.

40
00:05:36,533 –> 00:05:41,833
That’s why I use it to store a
base animation state.

41
00:05:41,833 –> 00:05:46,267
Let’s step through the entire
process again.

42
00:05:46,267 –> 00:05:50,000
I run the “LOAD_SEQUENCE”
script.

43
00:05:50,000 –> 00:05:59,833
This fills the sequence table
with our custom contents, and
resets the sequencer so it’s
ready to play the next
animation.

44
00:05:59,833 –> 00:06:07,800
I’ll make an adjustment here:
the “blendtime” parameter
between the first and second
animations.

45
00:06:07,800 –> 00:06:17,633
I must reset the sequencer, and
you’ll see the change in blend
time when I step to the next
animation.

46
00:06:17,633 –> 00:06:25,100
The sequencer CHOP can play
animations independently of
Touch Designer’s master
timeline.

47
00:06:25,100 –> 00:06:35,133
Therefore, you can use it to
create animations that react to
user input or any other realtime
events.

48
00:06:35,133 –> 00:06:45,400
The sequencer CHOP is a very
powerful tool that requires a
very specific network design to
work properly.

49
00:06:45,400 –> 00:06:47,400
When you master the process of
building these networks, you can
begin to create very amazing
animation effects.

Nov 12 2014

Switch CHOP tutorial.

The Switch CHOP. TouchDesigner 088. 2014.
The Switch CHOP is a fundamental multi-input Channel Operator.

1
00:00:00,267 –> 00:00:03,533
Let’s take a look at the switch
CHOP.

2
00:00:03,533 –> 00:00:07,400
The switch CHOP is a commonly
used operator.

3
00:00:07,400 –> 00:00:11,767
It allows for the switching of
any different type of CHOP.

4
00:00:11,767 –> 00:00:15,567
It has a minimal set of
parameters.

5
00:00:15,567 –> 00:00:20,633
Its inputs are indexed starting
with 0.

6
00:00:20,633 –> 00:00:27,133
Index entries that are higher
than the number of inputs are
ignored.

7
00:00:27,133 –> 00:00:33,667
Fractional entries are rounded
down to the closest integer.

8
00:00:33,667 –> 00:00:39,000
Here I use the index .5, which
rounds down to 0.

9
00:00:39,000 –> 00:00:45,967
I’ve built this network to
further illustrate the concept
of channels and samples.

10
00:00:45,967 –> 00:00:57,767
We have a circle TOP whose R, G,
and B parameters are set to
evaluate the 20th sample of the
switch CHOP.

11
00:00:57,767 –> 00:01:07,767
CHOPs can hold any arbitrary
number of channels, and each
channel can hold any arbitrary
number of samples.

12
00:01:07,767 –> 00:01:15,267
Therefore, the switch CHOP will
hold the exact number of
incoming channels and samples.

13
00:01:15,267 –> 00:01:22,800
I’ll change the Python
expression to evaluate only the
1st sample of the switch CHOP.

14
00:01:22,800 –> 00:01:27,700
When the index set to 0, we
select the 1st input.

15
00:01:27,700 –> 00:01:30,533
It only has 1 sample.

16
00:01:30,533 –> 00:01:35,200
Index 1 will select the 2nd
input.

17
00:01:35,200 –> 00:01:42,533
We can middle mouse click on the
CHOP to determine how many
samples it holds.

18
00:01:42,533 –> 00:01:51,900
It has 600 samples, and we are
evaluating only the 1st, in this
case a value of 0.

19
00:01:51,900 –> 00:01:58,500
The 3rd CHOP has sixty samples,
also starting with a value of 0.

20
00:01:58,500 –> 00:02:05,233
I’ll set the Python expression
to evaluate the 500th sample.

21
00:02:05,233 –> 00:02:12,733
Since only the 2nd input to the
switch CHOP has at least 500
samples,

22
00:02:12,733 –> 00:02:20,667
the Python expression will give
us the last available sample
from the other inputs.

23
00:02:20,667 –> 00:02:29,767
Input 1 has only 1 sample,
therefore the Python expression
evaluates to the value .5.

24
00:02:29,767 –> 00:02:34,567
But what about the 3rd input,
index 2?

25
00:02:34,567 –> 00:02:41,600
Shouldn’t it evaluate to a value
of 0, which is the value of the
last sample?

26
00:02:41,600 –> 00:02:45,567
We should have a black circle,
but it’s grey.

27
00:02:45,567 –> 00:02:54,200
Touch Designer gives us the
ability to change the way
out-of-range samples are
evaluated.

28
00:02:54,200 –> 00:03:01,067
I’ll change the “Extend Left”
and “Extend Right” parameters to
“Hold”.

29
00:03:01,067 –> 00:03:08,400
Imagine now a straight line
instead of a repeating cycle of
sample values.

30
00:03:08,400 –> 00:03:10,400
Now the 500th sample evaluates
to 0, which is the last actual
sample value in the 3rd input.

Nov 12 2014

Join CHOP tutorial.

The Join CHOP. TouchDesigner 088. 2014.
The Join CHOP can append multiple types of incoming channel datatypes. This allows you to sculpt or craft specialty waveforms.

1
00:00:00,800 –> 00:00:04,367
Let’s examine the join CHOP.

2
00:00:04,367 –> 00:00:12,533
I’ve set up 3 example networks
here, each network illustrates
different approaches to using
the join CHOP.

3
00:00:12,533 –> 00:00:17,500
In this network we will append 3
CHOPs together.

4
00:00:17,500 –> 00:00:24,367
We start with the ramp from 0 to
1, and end with a ramp from 1 to
0.

5
00:00:24,367 –> 00:00:27,667
In the middle we have a noise
CHOP.

6
00:00:27,667 –> 00:00:33,900
As you can see, the join CHOP
will stack one CHOP after the
next.

7
00:00:33,900 –> 00:00:44,800
Using the “Preserve Length”
method, with no blending or
overlap interpolation, the CHOPs
are simply appended together.

8
00:00:44,800 –> 00:00:51,767
We can better visualize the join
by changing the seed parameter
of the noise CHOP.

9
00:00:51,767 –> 00:01:00,767
By maintaining an overlap region
of 0, any overlap shape
parameter I choose has no
effect.

10
00:01:00,767 –> 00:01:02,967

11
00:01:02,967 –> 00:01:12,700
In the second example network,
we’ll look at the “Insert Blend
Region” option of the method
parameter.

12
00:01:12,700 –> 00:01:21,400
We join 3 chops with single
sample values of 0, 1, and .5.

13
00:01:21,400 –> 00:01:31,033
We can see that the join CHOP
has interpolated a simple ramp
between the incoming values.

14
00:01:31,033 –> 00:01:40,967
By using the “Insert Blend
Region” method, we can define an
overlap region between each
incoming value.

15
00:01:40,967 –> 00:01:47,567
We can also control the shape of
the overlap blend.

16
00:01:47,567 –> 00:01:59,767
As I increase the overlap
region, you’ll see that the join
CHOP creates a smoother and
smoother interpolation between
the incoming values.

17
00:01:59,767 –> 00:02:06,600
It does this by creating more
samples than the total of the
original inputs.

18
00:02:06,600 –> 00:02:16,533
It uses the extra samples to
create more fine tuned steps
between the original inputs.

19
00:02:16,533 –> 00:02:26,533
In this example we’ll use the
“Overlap Sequences” method to
join the to incoming waveforms.

20
00:02:26,533 –> 00:02:41,500
We’ll join a triangle and a sine
wave, and you’ll notice that
there is a disparity in the end
value of input 1, and the start
value of input 2.

21
00:02:41,500 –> 00:02:49,033
We want to interpolate between
these 2 values, to create a
smooth join.

22
00:02:49,033 –> 00:02:57,067
This is similar to adjusting
Bezier handles on keyframes, or
points on a spline.

23
00:02:57,067 –> 00:03:05,367
As I increase the overlap
region, you’ll see the join
become smoother and smoother.

24
00:03:05,367 –> 00:03:11,733
If I use the “Cubic”
interpolation method, I can
shift the bias.

25
00:03:11,733 –> 00:03:20,133
This will determine the
influence that either the first
or second input will have on the
overlap.

26
00:03:20,133 –> 00:03:30,233
The join CHOP parameters are
very powerful, and will allow
you to fine tune your blends to
an exact specification.

27
00:03:30,233 –> 00:03:32,233