Depending on the animation environment, every “frame” is drawn by replacing the entirety of a frame with new pixels. In other words, there is typically no reference within the animation environment to any pixel information from the previous frame/s. Instead, if any data from a previous frame needs to referenced again, the animator/developer needs to create a specific reference to include that previous data in future frames.
Depending on the environment, this can be accomplished in various ways. As an example in P5.js and Processing these programs build visuals by creating a canvas where everything is composited together, UNLESS the developer adds a background()
function, which then overlays the background with a color or image of the developers choosing.
If instead the animator/developer wants to create a fading effect, where the previous frame/s are present, but fade over time. They can include an alpha value in the background function (background( red, green, blue, alpha)
), which will cause the previous frames to “fade out” over time (dependent on the alpha value).
This approach by P5 and Processing create an easy way for animators/developers to create an animation reference to previous frames. The problem with this approach is that you cannot choose which elements or individual objects include a reference to previous frames, and which do not. Instead, it is a take it all or nothing approach.
In TouchDesigner, each frame is always drawn “freshly”. Unlike P5 or Processing, developers/animators need to specifically create a reference to previous frames or objects if they want to generate animations with “history” or reference to these previous frames/objects.
In TouchDesigner, this is accomplished through the Feedback
TOP.
The following video does a really nice job of introducing this relationship between feedback and animation within TouchDesigner.
The video admittedly moves quite quick for a beginner tutorial. So the following breaks down these steps a bit further.
0.01
for both dimensions.On
.
noise1
CHOP.Period
parameter to 3
and the Amplitude
parameter to 0.5
.noise1
CHOP and alter the valuesnoise1
CHOP by copying and pasting.Seed
parameter value so they are “out of phase” with each other.op('noise2')[chan1]
noise2
operator, and from its channel array, select chan1
.circle1
TOP.null1
TOP.comp1
TOP to “Over”null1
null1
feedback1
also to comp1
comp1
in the feedback1
TOPcomp1
TOP onto the feedback1
TOPfeedback1
parameter window to comp1
comp1
TOP.ON
alpha
channel parameter for the background color to 1
null2
TOP.feedback1
TOP, click the “Pulse” button in the parameter window.feedback1
and comp1
TOPs.Opacity
parameter value. (notice how different values effect the emergent work)Now that you have the basic network setup, please try and play with some of the other examples demo’d in the video above.