Touch Designer

How to Start

Am besten man startet mit den Videotutorials von Elektronaut Youtube. Website Elektronaut

Hilfe Touch Designer

COMP Annotate ermöglicht Kommentare in den Projekten, alternativ OP "Text DAT"

Help -> Op Snippets Beispiele für alle OPs, Kopieren möglich

Operator Parameterfenster ? Symbol

Generelle Tools für Code Snippets: Obsidian, Logseq, Notation

Basics

TouchDesigner: Parameter, Werte & Operatoren übertragen

Es gibt verschiedene Möglichkeiten wie man Parameterwerte kopiert, einfügt und referenzieren. Ob per Drag & Drop oder Kontextmenü dabei ist folgendes zu beachten.

1. Operator auf Parameter-Feld ziehen (Viewer Active: An vs. Aus)

Ob der Viewer Active-Modus des Operators aktiviert ist (das kleine Plus-Symbol unten rechts am Operator oder Taste A), entscheidet darüber, was du genau ziehst:

Zustand Aktion Ergebnis & Verwendung
Viewer Active: AUS
(Normaler Operator-Knoten)
Klicke auf den Operator selbst und ziehe ihn in ein Parameter-Feld. Fügt den Operator-Namen / Pfad ein (z. B. null1 oder /project1/geo1).
Ideal für Parameter, die einen Operator-Pfad erwarten (z. B. "TOP", "CHOP" oder "SOP" Parameter).
Viewer Active: AN
(Aktivierte Interaktion im Knoten)
Ziehe einen spezifischen Kanal (CHOP) oder Zell-Inhalt (DAT) aus dem Inhalt der Anzeige. Es öffnet sich das Zuweisungs-Menü:
  • Export CHOP: Direct Export (Grün). Ideal für Live-Signale.
  • CHOP Reference: Python-Referenz op('null1')['chan1'] (Blau).

2. Parameter-zu-Parameter Drag & Drop

Ziehe den Namen/Beschriftung eines Parameters direkt auf einen anderen Parameter in einem (anderen) Parameter-Fenster:

Option im Popup-Menü Ergebnis Anwendungsfall
Export CHOP Direkter CHOP-Export (Grün). High-Performance Animationen / Signale.
Python Reference Python-Referenz z. B. op('geo1').par.tx (Blau). Standard-Weg für dynamische Verknüpfungen.
Bind Zweiseitige Synchronisation (Violett). A ändert B und B ändert A. Custom UI Controls, Schieberegler-Sync.
Constant Kopiert nur den statischen Wert als Zahl/Text (Grau). Einmaliges Duplizieren ohne Verknüpfung.

3. Kontextmenü (Rechtsklick auf Parameter)

Menü-Funktion Ablauf / Funktion
Copy Parameter Kopiert den Parameter und seinen Pfad in die Zwischenablage.
Paste Value Fügt nur den statischen Wert ein (Constant Mode).
Paste Expression / Reference Fügt den kopierten Parameter als Python-Referenz ein (Blau).
Paste Bind Erstellt eine zweiseitige Bindung (Violett).

4. Channel als Ausgang anlegen

Verbinde einen Operator, der mehrere Channels hat mit mehreren Select Operatoren. Wähle in jedem Select Operator unter Channel Names nur einen Channel aus DropDown Liste (Down Arrow) aus. Nun kannst du jeden Channel mit einem Operator verbinden.

Will man mehrere Channels irgendwo in einem Eingabe/Auswahlfeld haben, gibt man die Namen mit Leerzeichen getrennt ein.

Snippets tox & Komponenten

Tox, Snippets

Um einzelne Operatoren mit bestimmten eingestellten Parametern, oder ein kleines Netzwerk aus Operatoren zu speichern, erzeuge ein Base Comp, füge dort das Netzwerk ein und wähle aus dem Kontextmenü des Base Save Komponent tox

Du kannst es per drag&drop aus dem Explorer in Touch Designer auf die Bühne ziehen.

Komponenten

Hast du fertige Komponenten / Bausteine erstellt, die du immer wieder verwenden willst, erzeuge ein Base am Besten mit einem in und einem out und füge es in die Paletten ein.

Publish for Player

Über die COMP Fenster wird eine Hierachie aufgebaut, man kann man mit mittlerem Mausrad in der Hierachie rein und rausscrollen. Siehe auch die Pfadleiste oben. Auf der root Ebene befindet sich das Projekt Fenster. Dort gibt man unter Parameter: Look an, welches Fenster angzeigt werden soll, wenn man F1 klickt oder wenn man den Touch Designer Player aufruft. (mit Esc geht es zurück)


Wenn im Player sofort etwas angezeigt werden soll, gehe folgendermaßen vor:

  1. Automation beim Programmstart aktivieren:
    • Hauptmenü: DialogsWindow Placement öffnen (oder Tastenkombination Alt + W drücken).
    • Option ganz oben Start in Perform Mode aktivieren.
  2. Im TouchPlayer ausführen:
    • TouchDesigner Player starten.
    • Die gespeicherte .toe-Datei auswählen oder per Drag-and-Drop auf das Player-Icon ziehen.

Film exportieren

Wenn man einen Film exportieren möchte, deaktiviere oben in der Mitte die Option "Realtime".

  1. Gebe in der Zeitleiste die Anzahl der Frames an, die der Film dauern soll, einmal bei "End" und bei "REnd". Stelle die Zeitleiste zurück auf Frame1.
  2. Wähle Datei / Film exportieren.
  3. Gebe unter "Top" das Fenster/ Operator an, welches veröffentlicht werden soll. Am besten man zieht es darauf. Dann steht da beispielsweise /Project1/out1/
  4. Wähle bei Format Animation. (Der Film soll erst unkomprimiert veröffentlicht werden)
  5. Gebe Start und End Frame ein
  6. Output Filename, wähle den Ordner aus und trage einen Namen ein mit Endung .mov
  7. Render Movie: Start
  8. Dieser Mov Film kann mit Adobe Media Encoder komprimiert werden. Ziehe ihn in die Warteschlange und wähle H264 (mit Quelle abgleichen hohe Bitrate)
  9. Abspielknopf oben rechts drücken

TOP

TOP Texture Operator
Alles was mit Pixeln und Bildverarbeitung zu tun hat. Bilder, Videos, Vektor, Text einfügen, erstellen, ändern und exportieren. 3D Geometrie rendern oder zweidimensional darstellen. All das läuft auf der GPU Grafikkarte.
youtube Video

Man hat ja eine Ausgabegröße und dann die Größen von Tops, das können Bilder, Movieclips oder auch generierte Grafiken sein. Importierte Bilder können andere Seitenverhältnisse haben und auch andere Auflösungen.

Hinzu kommt in der Testversion gibt es eine Beschränkung von 1280 x 720 Pixel. Wenn man nun Projekte in der Testversion macht, die man später in der Vollversion mit einer höheren Auflösung versehen will, gibt es folgenden Trick. Gehe auf das Projektfenster rechte Maustaste Customize Component. Erzeuge dort eine neue Page mit Namen Setup oder Auflösung. Erzeuge 2 neue Parameter von Typ Int, Vergebe die Namen Resw mit Wert 1280 und Resh mit Wert 720. Es erscheint ein neuer Karteireiter im Projektfenster, mit dem vergebenen Namen der Page. Dort sieht man die beiden Werte. In den einzlnen Tops unter Karteireiter Common wählt man Output Resolution: Custom Resolution und fügt bei Resolution die Breite und Höhe per Script ein.

parent().par.Resw
parent().par.Resh
Gebe im Projectfenster Common: Parent Shortcut den namen Project ein und nutze folgendes Script:
parent.Project.par.Resw
parent.Project.par.Resh

Wenn man die Vollversion hat, ändert man einfach die Einstellungen der Projektfensters.

Fit

Hat man unterschiedliche Seitenverhältnisse von Bildern oder Movieclips. Hat man Bilder in unterschiedlichen Ausmaßen in dem Sinne, dass ein zweites Bild einen kleineren Ausschnitt des anderen Bildes darstellt und diese sollen mit einem Composite zusammengelegt werden. Dann ist die beste Lösung ein Fit

CHOP

CHOP Channel Operators
Channel-Operators , sind eine leistungsstarke Technologie, die die Verarbeitung von Bewegung, Audio, Mathematik, Logik, MIDI-Daten, numerischen Informationen und Daten ermöglicht, die von/zu Geräten und Protokollen gestreamt werden.

Mit CHOPs können Kreative Bewegungen auf einer kreativeren Ebene betrachten und mehr mit ihnen experimentieren als mit jeder anderen Animationstechnologie.

Ein CHOP enthält einen oder mehrere benannte Kanäle . Die Kanäle eines CHOP bestehen aus einer Sequenz von einem oder mehreren „ Samples “. Ein Sample ist eine Gleitkommazahl pro Kanal.

Ein CHOP hat eine Abtastrate , d. h. die Anzahl der Abtastungen pro Sekunde, die nur dann relevant ist, wenn ein CHOP Animationen oder Audio über die Zeit darstellt.

Die Länge eines CHOPs wird in Samples angegeben. Wenn der CHOP eine Animation oder Audio darstellt, kann die Länge auch in Sekunden oder Frames angegeben werden. Ein Frame ist eine Zeiteinheit der Timeline, typischerweise 1/60 Sekunde.


Constant hat einen oder mehrere Channels mit jeweils einem statischen Wert


Timer CHOP

Siehe Video
Schließe an den Timer einen Trail an.
Wähle im Karteireiter Output, welche Kanäle angezeigt werden sollen.
Karteireiter Timer:
Length: Wie lange der Timer läuft, wähle die Einheit S für Seconds
Cycle:On Timer läuft in Schleife. Output: Cycle:On dann hat man einen Kanal, der nach jedem Durchlauf hochzählt
Verbinde den Timer mit einem Lag, dann bekommt man nach jedem Cycle einen zeitlichen Übergang mittels einer Fließkommzahl, die man für Transition Effekte nutzen kann. Im Lag gebe die Zahl zwei mal ein.

Die Channel Ready und Running, schalten von 0 auf 1, je nachdem ob der Timer läuft oder nicht.
Delay ist ein Verzögerungswert beim Start des Timers nicht beim Cycle.

Done wechselt von 0 auf 1, wenn der Timer abgelaufen ist (nicht beim Cycle)
Done Pulse zeigt einen kurzen Ausschlag nach Ablauf des Timers (nicht beim Cycle)

Timer Schleife

Es gibt mindestens 2 Möglichkeiten eine Zeitschleife zu erzeugen.

Cycle: On
Aktiviere Output: Cycle: on um nach jedem Durchlauf einen Counter der hochzählt zu bekommen
On Done: Re-Start
Output: Done Pluse: on
Timer: Cycle: off
ein kurzer Auschlag nach jedem Durchlauf im Done Pulse zu bekommen.

LFO Sinuskurve, Sägezahn (Ramp), Pulse, etc.
Setze mehrere Channels im Eingabefenster mit Leerzeichen getrennt

Trail zeigt die Samples in der Zeit als Kurve, setzte es hinter ein LFO und stelle die Length auf 2 Sekunden, dann siehst man die Wert von 2 Sekunden. siehe Derivate Video

Ein Container, den man auf einen Panel Chop zieht, zeigt im Panel unter anderem die Mausposition an, wenn man sie im über den Container (Viewer Active) zieht. Die X-Y Positionen Channel sind rollu und rollv. Erzeugt man einen limit Sop und zieht einen trail, der am Panel hängt und fügt dieses trail unter Parameter CHOP zu und gibt die Kanäle rollu und rollv für die X und y channel ein sieht man eine gezeichnete Mauslinie.

Noise erzeugt zufällige Werte, die je nach Algotyhtmus nicht komplett wirr sind, sondern sich auf die vorigen Werte beziehen und somit eine geschwungene Kurve bilden. Auf der horizontalen Achse sieht man die Anzahl der Samples und auf der vertikalen die Werte der Punkte. Die Punkte werden mit einer AbtastrateChannel -> SampleRate nacheinander abgespielt. Unter Channel kann man die Anzahl (Samples) mittels Start und End einstellen. Die Channel->Sample Rate ist standardmäßig 60 pro Sekunde. Bei 600 Samples sind das 10 Sekunden lang unterschiedliche Werte, dann wiederholen sich die Werte.

Common->Timeslice on verändert die Ansicht. Man sieht nur den aktuellen Punkt der gerade abgespielt wird. Im Graphmode sieht man die komplette Kurve
Es sind auch mehrere Channels möglich, sie liefern verschiedene Werte, gemäß den Einstellungen.600. Das bedeutet es sind 600 Werte
Fenster Kontext Dots per Sample, zeigt die Punkte an.

Im Viewer Active kann man die Ansicht der Kurve hin und her schieben, mittlere Maustaste kleiner größer, H Taste zentriert die Ansicht. Stattdessen kann man auch Parameter: Transform nutzen

Möchte man ständig neue Werte, die die sich nicht nach der Gesamtanzahl der Samples wiederholen, kann man unter Transform für Rx folgendes Script einfügen

absTime.frame * .5

Wenn man ein noise TOP einfügt und diesem eine Common->Resolution -> Höhe von 1 zuweist, und dann ein Top to (CHOP) hinten anfügt verhält es sich wie noise CHOP


Wave kann man nicht in Common->TimeSlice Mode umschalten

Keyboard Parameter: Keys->Keys kannst du Tasten aussuchen, die du abfragen willst. Dort kann man auch mit Leerzeichen getrennt mehrere Tasten eintragen z.B. 1 2 3 a d.
Man kann den Wert einer gedrückten Taste beispielsweise für den Alpha Wert eines Kreises nutzen. Das bewirkt dass der Kreis nur zu sehen ist, wenn die Taste gedrückt ist.

Filter CHOP ermöglicht einen weichen Übergang eines Signals (z.B.:Keyboard)
Filter Width definiert die Übergangsgeschwindigkeit. Hänge einen Trail an den Filter, um zu sehen, wie die On-Off-Kurve abgerundet wird

MouseIn liefert die Mauswerte X- und Y-Position

Midi in Gehe vorher im Menü oben auf Dialog - Midi Device- Mapper Wähle Create New Mapping und wähle dann aus der Liste 1 das Midi Gerät aus, z.B.: ModX1
Nachdem du das Midi In erstellt hast, sollten dort 3 Channels erscheinen, Sense, Clock, BMP Klicke nur eine Taste und es erscheinen 2 neue Kanäle, eine für Anschlag eine für Losgelassen. Drehe am Rad, in neuer Kanal erscheint.
Verdbinde Midi in mit mehreren Select unter Channel Names kannst du den gewünschten Channel eintragen oder über den Pfeil ein Dropdown Menü aufrufen und dann auswählen. siehe auch Channel als Output


Pattern CHOP – Die wichtigsten Parameter

Der Pattern CHOP erzeugt ein statisches, array-basiertes Signal über eine feste Sample-Anzahl (ohne eigene Zeitachse).

Type (wavetype)
Bestimmt die mathematische Grundform des Signals (z. B. Sine, Cosine, Ramp, Constant oder Random).
Length (length)
Legt die exakte Anzahl der Samples (Datenpunkte/Array-Größe) für den CHOP fest – ideal zur Steuerung von Instanz-Anzahlen.
Number of Cycles (numcycles)
Gibt an, wie oft die gewählte Wellenform über die gesamte Length hinweg wiederholt wird (z. B. 0.5 für nur eine halbe Welle).
Phase (phase)
Verschiebt den Startpunkt der Welle horizontal. Kann mit Time-Expressions wie absTime.seconds animiert werden.
Phase Step (phasestep)
Versetzt die Phase schrittweise von Kanal zu Kanal. Ein Versatz von 0.25 bei zwei Kanälen ergibt z. B. eine Kreisbahn.
From Range (fromrange)
Der zu erwartende Eingangswertebereich der Welle (z. B. -1 bis 1 beim Sinus) für die mathematische Umrechnung.
To Range (torange)
Der gewünschte Zielwertebereich, auf den die Werte skaliert werden sollen (entspricht der map()-Funktion aus Arduino/Processing).
Amplitude / Offset (amp / offset)
Manuelle Skalierung der Signalhöhe (Amplitude) und vertikale Verschiebung der Grundlinie (Offset) nach oben/unten.

 

Limit CHOP

Mit Limit kann man Werte klammern. Nehmen wir eine Sinus-Welle von -1 zu 1. Mit Limit Type: Clamp, Minimum 0, würden man nur den Anstieg über 0 sehen, der zweite Teil der Sinuskurve, das Tal unter 0, würde zu einer geraden Linie auf der 0 ergeben.

Ziel Richtige Einstellung im Limit CHOP
Negative Werte ins Positive spiegeln ($-x \to +x$) Positive Only = On
Alles unter 0 knallhart bei 0 abschneiden (flach deckeln) Limit Type = Clamp mit Minimum = 0
Signal automatisch auf z. B. 0 bis 1 strecken Normalize = On mit Normalize Range = 0 1

Der Unterschied zu einer normalen From Range / To Range (wie im Math oder Pattern CHOP) ist: