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.

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

MoviefileIn ist für Bild und Filmdateien gedacht. Im Parameterfenster kann man den Pfad zur Datei ändern. Drag & Drop geht auch.

Größe ändern
Parameter: Common-> Output Resolution

Will man die Größe aus dem Projectfenster einsetzen, Scrolle mit mittlerem Mauswheel zurück auf root. Im Projektfenster Parameter: Layout sieht man die Größe. Um darauf zu referenzieren, folgendes Python Script:

me.parent().width
me.parent().height

Circle Kreis mit vielen Einsellungen

Rectangle mit vielen Einstellungen

Ramp Farbverlauf

Displace Photoshop Filter Displacement Map. 2 Bilder werden übereinander gelegt die Tiefenwerte des einen Bildes werden verwendet, um die Pixel des anderen Bildes zu verschieben (siehe Doku) Beispiel 02-feedback

Transform Drehen, Größe ändern
Tile -> Repeat dann Transform -> Scale verkleinern für Kachelung
Hintergrundfarbe anstatt Transparenz Transform->Background Color 0,0,0,1 dann Comp Over Background Color : On

Text Hier kann man Text darstellen mit den üblichen Schrifformatierungen

Noise erzeugt ein Bild in dem jeder Pixel mit einem Algorythmus erzeugt wird. Die Methoden: Perlin Noise 3D, etc. Bei Random bekommt jeder Pixel eine Zufallsfarbe, bei den anderen Methoden, beziehen sich die Werte der benachbarten Pixel aufeinander. Siehe dazu auch den Noise CHOP und ändere die Methode auf Random um zu sehen, dass dort bei jedem Sample die Pixel ganz unterschiedlich sind, während bei Sparse, die nächsten Werte nicht sehr weit vom vorigen entfernt sind.
Ein bewegliches Noise entsteht wenn man einen oder mehrere der Werte Parameter transform-> translate-> tx ty tz mittels Python Script verändert absTime.seconds * 0.1
Am besten man nimmt Perlin3D und verändert tz.

Ebenen / Mischen / Layermethoden

Ähnlich wie man in Photoshop oder anderen Programmen mehrere Bilder in Ebenen anlegt und Pixelverrechnungen wie add, multiply, difference anwendet, kann man in Touch Designer dazu mehrere Operatoren verwenden oder gleich den Composite wählen, der all die Methoden vereint.

Add ziehe 2 Moviefilein oder andere Pixeldaten auf das Add. Die Pixel werden mit der Methode add gemischt, Es gibt auch den Mulitply, Subtract, Differnce, Over, Inside, Outside etc, besser ist
Composite, hier kann man die Methoden auswählen, die es auch als einzelne TOPs gibt, wie in der Ebenenpalette in Photoshop und auch mehr als 2 Eingänge nutzen
Die einzelnen Eingänge im Composite erscheinen im Parameter. Dort kann man deren Reihenfolge ändern und sie dekativieren. Will man ein Element mit Transparenz mit Farbe/Verlauf füllen wählt man inside oder umgekehrt outside, dann wird die Transparenz mit der Farbe gefüllt. Es funktioniert wie Masken.
Over berücksichtigt nur die Alphawerte. Die Bilder liegen wie bei einer Collage übereinander

Verlaufsumsetzung

Ramp & LookUp TOP

Graustufenwerte eines Bildes z.B: Noise (TOP) mit Farben versehen.
Verbinde ein Noise und ein Ramp mit einem Lookup
Ramp Interpolation Linear

Feedback

siehe Feedback, siehe Level

Das Prinzip einer Feedback-Schleife mit einem Noise TOP funktioniert so: Ein initiales Bild (Noise) wird kontinuierlich über ein Frame leicht transformiert (z. B. verschoben, skaliert oder verzerrt), mit dem ursprünglichen Bild verrechnet und wieder an den Anfang zurückgespeist. Dadurch entstehen organische, flüssige Muster, die wie Wolken, Rauch oder flüssige Kristalle wirken.

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

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

Trail zeigt die Samples als Kurve, setzte es hinter ein LFO

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:

1. Kette für AudioDeviceIn optimieren

Wenn du von einer Datei (AudioFileIn) auf ein Live-Signal (AudioDeviceIn) wechselst, möchtest du meistens zwei Dinge erreichen: Latenz minimieren und das unberechenbare Live-Signal zähmen (damit der Kreis nicht dauerhaft flackert oder bei Nebengeräuschen voll ausschlägt).

Optimaler Signalfluss

AudioDeviceIn -> AudioFilter -> Analyze -> Lag -> Math -> Limit -> Null

Die Operatoren und ihre Aufgaben

1. AudioDeviceIn CHOP

2. AudioFilter CHOP (optional, aber bei Live-Mikros ratsam)

3. Analyze CHOP

4. Lag CHOP (ersetzt die Trägheit des Spectrums)

5. Math CHOP

6. Limit CHOP

Audio Visual für Drums

Ein Audiovisual, welches die Positon eines Kreises anhand eines Kurzen Ausschlag im Audiosignal ändert. Siehe hierzu die Erklärung.

AudioMovie
Ein MovieFileIn TOP zeigt nur den Film an, aber gibt keinen Sound aus. Schiebe den MovieFileIn auf den AudioMovie, um den Sound zu bekommen

SOP

SOP Surface Operators

SOP sind 3D Objekte, Particlesysteme, Rendering. Diese Sachen werden auf der GPU berechnet.

3D

Basic Shapes/ Primitives: Circle, Rectangle, Grid, Sphere, Box, Cube, Torus
Mit Viewer Active kann man mit allen 3 Maustasten die Ansicht verändern.
H-Taste zentriert die Ansicht. W-Taste Wireframe Ansicht
Rechte-Maustaste Display Options zeigt (Punkte, Achsen etc.)

Mit dem Merge Operator werden 3D Objekte verbunden

Rendering Network

Zum Rendern werden benötigt: Geometry, Camera, Light (COMP) und ein Render (TOP).
Das Verbinden von 3D Operator und Geometry ist etwas tricky, denn nicht alles wird verbunden. Aus dem Out des 3D Opertors oder Merge ziehe eine Verbindung auf die Bühne und wähle dann das Geometry COMP. Dadurch bekommt es ein in und ein Out. Allerdings bleibt das Out leer. Man zieht das Render TOP auf die Bühne und verbindet es mit Null TOP

Die Camera und Light werden nicht verbunden. Man kann mehrere Lights verwenden.

Camera ausrichten mit 2 Fenstern

Generell wird nur die Ansicht in der Camera (Active View) mit den Maustasten verändert. Camera Parameter: Xform->Translate etc. bietet weitere Einstellmöglichkeiten

Teile die Ansicht auf 2 Fenster und wähle im zweiten Fenster mit dem Pfeil oben links Geometry. (Das übliche Fenster ist Network Viewer)

Hier sieht man nun die Objekte, Kamera, Licht und das ausgewählte ist hervorgehoben.
Man kann die Ansicht mit dem Maustasten ändern. Ändere im Network Viewer die Positionen von Kamera Licht etc. und überprüfe in der Geometrie Ansicht.
Die aktuelle Ansicht als Kameransicht macht man mit: Save View to cam1.

Camera

Kamera auf eine Position fixieren.
Erstelle ein COMP Null Operator. Es ist ein Nullpunkt im Raum. Wähle die Camera aus. Ziehe Null auf den Parameter "Look at". Wenn man nun unter Camera, Transform die Werte ändert, sieht man, dass die Kamera sich immer in Richtung Nullpunkt dreht. Selbstverständlich kann man im Null Operator die Werte ändern.

Zoom
Camera Parameter: View / FOV Angle

Geometry

Im Geometry Opertor lässt sich die Ansicht drehen und animieren absTime.seconds * 20

Performance

Bei komplexen 3D Projekten sollten aus Performance-Gründen die Viewer der SOP Operatoren deaktiviert werden. Alle SOP auswählen und den oberen, linken Viewer Button anklicken. Umschalten auf Viewer Active (unten rechts) funktioniert dennoch.

Noise

Grid SOP -> Noise ->Attribute Create -> Geo -> Null
Attirbute Create Compute Normals - On

Particle

Sphere SOP -> Particle SOP -> Geo COMP
Außerdem Render TOP-> null TOP
Außerdem Camera COMP, evt. Light COMP

Es werden nicht lauter Spheres als Particleelemente erzeugt, sondern die 3D-Punkte des Sphere bilden die Positionen an denen Particles positioniert werden, wenn sie entstehen. Diese Positionen lassen sich mit Particle- Forces- Turbulence verwackeln. Außerdem kann man die Reihenfolge der einzelnen Particlegeburten von gleichmäßig auf zufällig umschalten, indem man zwischen Sphere und Particles ein Sort dazwischenschaltet und auf Point- random stellt.

Particle -> Sort ermöglicht die Veränderung der Reihenfolge der Geburt von Particles

Pointsprite MAT
Erstelle ein Pointsprite MAT, gehe auf Geo- Render- Material gebe dort den Namen des Pointsprite ein oder ziehe das Pointsprite auf das Eingabefeld. Es enstehen lauter Rechtecke, die zur Kamera ausgerichtet sind.
Größe Pointsprite Constant Pointsize: Wert einstellen
Diese Elemente lassen sich einstellen und mit Material versehen, aber dann reagieren sie nicht auf eine externe Lichtquelle. Ohne Pointsprite kann man mit einem Licht die Particles als Ganzes anstrahlen.

So weist du Particle eine Color Map und Farbeffekte zu

  1. Textur erstellen (z. B. weicher Licht-Punkt):

    • Erstelle ein Ramp TOP

    • Parameter Type - Circular und Extend Left - Hold , Extend Right - Hold
    • Richte die Farb-Stopps so ein, dass die Mitte weiß und der äußere Rand transparent/schwarz ist (weicher Verlauf).

  2. Im Material zuweisen:

    • Wähle dein Point Sprite MAT aus.
    • Parameter Reiter Color .
    • Ziehe das Ramp TOP per Drag & Drop in das Feld Color Map (oder tippe z. B. ramp1 ein).

    • Common:
      Blending Transparency: On,
      Write Depth Values: Off
      Depth Test: On
      Discard Pixels based on Alpha : Off
  3. Additives Blending erzeugt Lichteffekte, da die Farben addiert werden
    • PointSprite Common: wie unter Punkt 2
      Destination Color: On (das ist der Schlüssel)
    Hierbei ist keine Transparenz im Ramp nötig, schwarz wäre auch okay, da die Farben ja additiv dargestellt werden, da sieht man kein schwarz.
  4. Farbe nach Alter
    Füge nach dem Particle -> Point
    Klappe Color auf und ersetze das Script me.inputColor[1] für eine der Farben:
    me.inputPoint.life[0] * 0.5

 

MAT

MAT Materials
MATs oder Materialien sind eine Operatorfamilie , die einen Shader auf ein SOP oder 3D-Geometrieobjekt anwendet , um texturierte Oberflächen mit Beleuchtung zu rendern.

Erzeuge ein Rendering Network
Sphere SOP -> Geometry COMP
Außerdem Render TOP -> Null TOP
Außerdem Camera COMP, evt. Light COMP


Constant MAT -> Null MAT
Verknüpfe Null mit Geometry per Fenster drag&Drop Parm: Material oder
wähle Geometrie / Render / Material (Eingabefenster)

Durch Constant bekommen alle Objekte die gleiche Farbe ohne Lichtreflexion und Schatten. Transparenz Constant / Constant / Alpha: <1 funktioniert nur, wenn man Constant / Common / Blending (Transparency): auf ON stellt. Das gilt auch für die anderen Materials.


Wireframe MAT
Wie die Ansicht in Viewer Active W-Taste. Die Linienstärke, Farbe, Alpha einstellbar. Man kann aber auch bei anderen Materialien unter Common Wireframe aktivieren.
Besser ist das nächste Material:

Line MAT
Diese Wireframe-Ansicht bietet viele Darstellungsmöglichkeiten:
Die Linienstärke anhand der Entfernung zu definieren, zB: Je weiter desto dünner. Alpha einstellen: ACHTUNG auch hier wähle Common / Blending (Transparency).
Points: die Darstellung in Punkten
Vectors: Vectorrichtung wie Strahlen


Phong MAT
Farbe der Oberfläche, Reflexionslichtfarbe,

Alpha -> Alpha Front und Common -> Blending Transparency : On

Rim-light ist ein oder mehrereLichter von hinten

Maps im Phong
Parameter: RGB-> Color Map oder Normal Map, Diffuse Map, Specular Map
Erstelle noise Top -> null und ziehe es beispielsweise auf RGB-Color Map

noise -> normal -> null und ziehe es auf RGB-Normal Map (Bum Map) Es erscheint eine Warnmeldung. Füge zwischen Sphere und Geometry ein Attribute Create SOP und aktiviere Compute Tangents

Phong RGB: Enable Height Map es wird ein schwarz-weiß Bild erwartet beispielsweise Noise

Phong RGB: Displays Vertices ermöglicht eine extreme Höhe wie Spitzen, Stalganiten. Die Anzahl der Reihen und Spalten der Sphere ist für den Details verantwortlich.


PBR MAT
Substance Painter Materialien lassen sich hier zuweisen. Es muss ein Enviroment Light COMP eingefügt sein. Dieses erwartet ein Enviroment Map. Das wird erzeugt durch ein MovieFileIn TOP -> null eingefügt sein. Füge im MovieFileIn ein Bild (Landschaft) ein und verbinde die MovieFileIn->null mit Enviroment Light Light-> Enviroment Map
Gehe auf PBR RGB->Metallic und RGB->Roughness um die Spiegelung der Envirment Map zu sehen

Alternativ kann man einem PBR ein Substance TOP Material zuweisen Download
Substance TOP Graph->Concrete und Common -> Resolution erhöhen
Substance auf PBR ziehen Instance Substance TOP
oder im PBR Maps->Substance Top zuweisen

Um auf die einzelnen Eigenschaften des Substance Material zuzugreifen, verbinde Substance mit Substance Select und wähle beispielsweise im Substance Select Output Channel -> Height
Im PBR Maps-> Enable Height Map dann Maps -> Display Vertices - on dann Maps-> Height Map, das Substance Select zuweisen, dann Maps->Display Scale

DAT

DAT Data
Datenoperatoren (oder DATs ) dienen der Speicherung von Textdaten wie Zeichenketten, Skripten und XML-Dateien. DATs enthalten entweder mehrere Textzeilen wie in einem Skript oder eine Tabelle mit Zeilen und Spalten, wobei jede Zelle eine Zeichenkette enthält. Sie können den Inhalt des DATs direkt im DAT-Viewer bearbeiten .

Greife auf eine DAT-Datei mit normalem Text über die entsprechende Methode zu op('text1').text. Greife auf eine Zelle in einer DAT-Datei mit einer Tabelle über die entsprechende Methode op('table1')[1,2] oder über Zeilen-/Spaltennamen zu op('table1')['rowname', 'colname'].

Text Hier kann man Kommentare einfügen oder auch Scripte. Kontextmenü Script ausführen.
Kontextmenü save Content Texte als .txt speichern und auch laden über Parameterfenster, Load. Nach dem Laden "Pulse" im Parameterfenster klicken.

Edit Content in Textport über Kontextmenü ist ein interner, komfortabler Editor

Edit Contents VSC oder anderer zugewiesener Editor öffnet sich, oder
Edit (Parameter) zugewiesener Editor
Zuweisung durch Edit / Preferences / DATs / Texteditor

Script im Text DAT

Schreibe Python-Script im Text DAT, (Viewer Active) Kontextmenü Run Script

Hat man Fehler im Script sieht man diese wie immer mit mittlerer Maustaste im Fenster. Fehler im Script kann man aber auch über das Error DAT erfassen, oder man erstellt sich ein 2 geteiltes Fenster und wählt im zweiten Fenster Textport und Dats

Ausführung stoppen bei Fehlern im Script. Strg C eventuell mehrmals klicken oder Strg Shift Esc
oder in der Timeline Pausensymbol. Außerdem gibt es im Parameterfenster noch den Active Schalter

 

Execute DAT bringt fertige Funktionen und Events mit, die man mit Script füllen kann. Im Parameterfenster klicke auf start, create, exit...etc., um die Anweisung auszuführen.

Chop Execute DAT bezieht sich auf einen COP beispielsweise ein Slider->null oder button->null, Man verweist im Parameterfenster CHOP Execute, Chops, auf das null (oder zieht es darauf)
Im Chop Execute erscheinen Funktionen und Events für das verbundene Element mit nützlichen Kommentaren und man kann dort direkt Anweisungen einfügen. ACHTUNG Chop Execute, Active On

Table liefert eine Tabelle mit Reihen und Spalten,
Anzahl definieren über Karteireiter Fill / Fill Type: Set Size. Anzahl von rows und cols zuweisen. Dann kann man mit Viewer Active die Werte in die Reihen und Spalten eintragen.
Abfrage des Wertes aus erster Reihe, zweite Spalte mit folgendem Script.

op('table1')[0,1]

Folder ist eine Table, welche Dateipfade anzeigt. Zugriff siehe vorige Zeile. Man gibt einen root-folder an.

convert verbunden nach einem Textfeld ist auch eine Tabelle. Es erzeugt eine Tabelle aus Text. Unter Parameter / split Cells definiere ein Dollarzeichen gefolgt vom Trennzeichen: $, um nach jedem Komma im Text eine Spalte in der Tabelle erzeugen. Reihen werden durch neue Zeilen im Text erzeugt.

keyboard in zeigt jede gedrückte und losgelassene Taste in einer Tabelle an, mit weiteren Infos wie: Alt, Strg Shift, time

midi in zeigt Midi Daten eines verbundenen Midi Gerätes an. Schließe ein Midi-Gerät (zb. Synthesizer) per USB an. Gehe in Dialogs / Midi Device Mapper / Create new Mapping, Wähle oben unter Device das Gerät aus. Dann kann man unter midi in DAT jeden Tastenanschlag jeden Reglerwert sehen. Das funktioniert aber nicht zusammen mit keyboard in. Alternativ gehe auf midi in CHOP

GLSL findet man unter TOP. Es werden automatisch 2 DAT Fenster hinzugefügt. Hierbei geht es um Shader Programmierung Ein Fenster dient zum Schreiben des Codes das andere ist eine Art Konsole für Erromeldungen etc.

Noise CHOP und Chop to Dat DAT verbinden oder Noise auf Chop to Dat ziehen. Es werden alle Samples in einer Tabelle angezeigt.

COMP

COMP Komponenten

COMPs enhalten eigene Netzwerke. Komponentennetzwerke können Operatoren und/oder zusätzliche Subnetzwerke (zusätzliche Komponenten) enthalten. Subnetzwerke bilden eine Netzwerkhierarchie, die über den Netzwerkpfad navigiert werden kann und die Gesamtstruktur der .toe/ .tox-Dateien bestimmt.

Ein Base COMP ist im Grunde eine visuelle Klasse, die Daten empfängt, verarbeitet und über definierte Schnittstellen wieder ausgibt.

Typischer Einsatzzweck:

Siehe Video erstellen eines Base mit Input und Output ähnlich einer Klasse mit Default Werten.

Erstelle ein null zwischen noise und null und aktiviere es. Klicke irgendwo rechts wähle Collapse selected. Es entsteht ein base mit Ein- und Ausgang

Eine andere Möglichkeit etwas in einem Base einzufügen ist. Wähle alle Operatoren deines Netzwerks durch Umrahmen mit linker Maustaste aus, Kopiere oder Ausschneide. Erstelle ein Base, Scrolle in das Base und füge das zuvor kopierte Netzwerk ein. Möchtest du in dem Base Ein und Ausgänge haben, füge innerhalb des Base ein oder mehrere In (SOP, TOP, CHOP, DAT) und ein Out ein, Diese sind dann die Ein- und Ausgänge des Base. Gehr folgendermaßem vor: Wenn du beispielsweise ein MovieFileIn TOP hast, welches später mittels In Eingang im Base ausgetauscht werden soll. Füge hinter das MovieFileIn innerhalb des Base ein In ein. Die Base bekommt dann einen Eingang, welcher das MovieFileIn ersetzt, wenn man dem Base Eingang etwas zuweist. Es ist wie eine Prototype-Eigenschaft einer Klasse mit Standartwert. Man kann auch mehrere Eingänge auf die Art definieren. Die Reihenfolge richtet sich nach den Namen der In-Operatoren (in1, in2, oder Bild_in, Verlauf_in)


Ein Container COMP gehört zur Familie der Panel COMPs (wie z. B. Button, Slider, Field).

Replicator COMP vervielfältigt eine Komponente siehe Video (11-repeat)
Nehmen wir ein MovieFileIn TOP und möchten, es vervielfältigen, aber der Pfad zum Bild sollte in jeder Instanz auf ein anderes Bild verweisen. Dazu verwenden wir ein Folder DAT. Ein Folder verweist auf einen Ordner, in dem sich Dateien befinden. In diesem Fall die Bilder, die in den Duplikate angezeigt werden soll.

Das MovieFileIn bekommt den Namen item1 Ganz wichtig ist die Zahl am Ende.

Das moviefilein hat den Paramter file
Dort gibt man eigentlich den Pfad zum Bild ein. Hier wird stattdessen ein Pythonscript eingefügt, welches sich auf einen Folder bezieht.
wenn der Folder sich im gleichen Ordner wie das movieFileIn befindet op('folder1')[me.digits, 'path')
path ist einfach die Spalte in der Foldertabelle, welche den Pfad des Bildes anzeigt.
digits ist eine eingebaute Python Eigenschaft von Knoten. Sie schaut sich den Namen des Operators an, filtert alle Zahlen am Ende des Namens heraus und gibt sie dir als reine Zahl (Integer) zurück. Gibt es keine Zahl im Namen wäre der Wert none
Nun erzeugt man einen Replicator DAT
Der Replicator repliziert den Container item1, dann repliziert er das replizierte Element etc. Im Replicator gibt man als Master item1 an, was repliziert wird, und den Prefix für die Namen der Elemente die erzeugt werden item. Es ist wichtig, dass das moviefilein die Zahl am Ende des Namen hat, sonst gäbe es probleme, dann würde das erste Bild doppelt angezeigt.
das ist schon irgendwie kompliziert. Der Pfad zum Bild kommt aus dem Folder, spalte "path". Welche Reihe genommen wird, wird aus dem Namen des Elterncontainers entnommen, indem man die Zahl mit digits generiert. Wenn der Elterncontainer in dem das Bild liegt, repliziert wird und die zahl im Namen sich ändert, ändert sich somit auch der Pfad zum Bild, weil eine andere Reihe des folder Tabelle genommen wird.

Nehmen wir an das moviefileIn liegt in einem Container und der Folder und Replicator auf gleicher Ebene wie der Container, dann sollte der Pfad im movieFileIn lauten:
op('../folder1')[me.parent().digits or 1, 'path'
das or 1 kann man einsetzen wenn der Container keine Zahl am Ende des Namens hat. Das ist jedoch trotzdem nicht zu empfehlen.


Element im Visual Active umbenennen z.B.: item1.
Replicator Replication Method: By Number
Operator Prefix: item
Master Operator: item1
Number of Replicants


Animation Comp
Parameter Einstellungen Parameter Edit es öffnet sich das Animation Fenster.
Alternative: Teile die Ansicht in 2 horizontale Bereiche, wähle im unteren Fenster, über den kleinen Pfeil oben, Animation Editor. Hier lassen sich ähnlich wie Flash für alle möglichen Eigenschaften Kurven definieren. Man erzeugt eine neue Eigenschaft erzeugt die Kurve und zieht die Eigenschaft auf die Eigenschaft im Parameterfenster des Operators.

Man kann unter Names die Namen der Channels eintragen, die später irgendwelche Parameter Eigenschaften von irgendwas definieren. Durch Add Channel werden sie dann der Timeline hinzugefügt. Dort kann man Kurven erzeugen, verändern, bearbeiten, welche die Werte definieren. Wählt man einen Punkt aus, sieht man oben F, ist der Frame, V ist Value. Die Vektoranfasser kann man nur drehen nicht vergrößern.
Mittlere Maustaste skaliert die Ansicht H-Taste zentriert die Ansicht Alt Taste erzeugt einen KeyframePunkt

Ganz unten Time Fenster End und REnd FFPs Tempo einstellen

Animation Parameter PlayMode: locked to keyframes,
sequential, ermöglicht eine Speed Eingabe unabhängig von Framerate und Länge
use input index verbinde ein lfo beispielsweise mit dem animation input
Der eingebene Wert definiert den Abshnitt in der Timline von frame bis frame oder besser gesagt definiert die Frames die angezeigt werden.
ACHTUNG lass dich nicht von der Abspiel-Linie irritieren, der zeigt nicht immer die richtige Animation an, orientiere dich an der Anzeige der Eigenschaft die du animierst.

Animation / Timeline

Unten ist die Timline, das Fenster lässt sich nicht vergrößern. Dort kann man die Werte direkt eingeben. ACHTUNG ein REnd (Range End) kann nicht größer sein als End. Die Range stellt man beim Entwickeln ein, um einen Teilbereich der Animation zu sehen.


Button, Select, Slider, Widget COMP

Instancing

Es geht darum viele Elemente von einem Operator zu erzeugen. Das kann man mit copy SOP machen, doch sobald man Insanzen nicht nur in einer Reihe sondern in Reihen und Spalten oder auf den Positionen der Punkte eines 3D Objekts positionieren will, ist instance SOP der bessere Weg. Außerdem ist es performanter GPU.

Erstelle ein Rendering Network mit einer Box am Anfang.

Wollte man mit Copy arbeiten würde man ein Copy zwischen Box und Geometry ziehen number of copies: 20, translate : 2 etc. Ein weiteres Copy könnte das kopierte nochmal kopieren, aber beide arbeiten auf der CPU. Blöd!

3D Objekte definieren die Instanzen

Auch der Geometry gibt es Karteireiter Instance aktiviere Inctancing: On Die Parameter Translate, Rotate etc. können mit verschiedenen Operatoren versehen werden mit SOP, TOP, CHOP, DAT.

Wir wollen mehrere Instancen von Box erzeugen. Die Positionen der einzelnen Instanzen sollen auf den Punkten eines 3D Objekts liegen, beispielsweise eines Grid, oder Sphere.
Erstelle ein Grid hänge ein null an, nenne es InstancesSop und ziehe es auf Geometry Karteireiter Instance: Default Instance OP. Dort steht dann InstancesSop. Nun könnten wir in Geometry Karteireiter Instance in den Feldern Positionen und Normals auswählen. Da wir nur das zweidimensionale Grid als Positons-Bestimmer haben, verwenden wir Translate x: P(0) und Translate y : P(1)

Erstelle zwischen Box und Geometry ein Transform um die Größe zu verkleinern. Uniform Scale: 0.02

Wenn man eine andere Anzahl von Instanzen braucht, ändert man einfach die Rows und Columns des Grid.

Ein Noise zwischen grid und null erzeugt eine Animation, sofern man im Geo auch Translate Z: P(2) einträgt

Pattern definieren die Instanzen

Anstatt ein SOP 3D Objekt zu nutzen, welches die Positionen bestimmt, könne auch andere Operatoren eingesetzt werden, beispielsweise ein CHOP pattern oder anderes CHOP.

pattern CHOP, Type: Ramp (Grade Linie) Length Anzahl der Samples, Karteireiter Channel: Channel = tx
Kopiere pattern Kopiere Parameter Length aus dem vorigen und füge eine Referenz in diese length ein, Channel: Channel = ty Auf die Art haben wir die Werte für tx ty selber erzeugt, stattdessen könnten ein oder beide Channel Werte aus einem anderen Operator stammen beispielsweise einem AudioIn CHOP.

Erzeuge in Merge und füge beide pattern ein und hänge ein null an, nenne es instanceChop und füge es im Geo Karteireiter Instance: Default Instance OP ein (instanceChop) ändere im Geo Instance: translate x = tx und translate Y = ty, translate Z löschen
Ändere im zweiten Pattern Type = Sine Man sieht eine Sinuskurve und kommt sofort auf die Idee irgend ein Audiosignal hier zu verwenden.


Hänge ein Math hinter das erste Pattern und stelle die Range: toRange auf -1 1 um es zu zentrieren. Andere die im ersten pattern die Length

Im zweiten pattern Amplitude = 0.5 ändert man die Höhe der Sinuskurve. phase = absTime.seconds animiert die Sinuskurve. Man kann im Geo die Sinuskurve ty für Scale einsetzen. Scale OP könnte mit einem ganz anderen Operator belegt werden

Audiosamples definieren die Instanzen

Nun soll die zuvor erstellte Sinuskurve aus Pattern mit einem Audio - Signal versehen werden.

AudioFileIn - Math - AudioSpect
Es gibt 2 Möglichkeiten kein Stereo sondern nur einen Kanal zu bekommen. AudioFileIn Mono = On oder Math Combine Channels = Average

AudioSpect

Das erste Pattern bestimmt die Anzahl der Kugeln/Objekt. Wir brauchen im AudioSpect die gleiche Anzahl an Samples. Wir brauchen ja die gleiche Anzahl an tx und ty Werten für die Instanzen.

AudioSpect - Rename rename to = ty

AudioSpect - Rename - Resample Common: Timeslice = Off, Resample: Method = New Rate new Interval
Nun kann man vom ersten Pattern den Ausgang mit dem Eingang von Resample verbinden.

Um die Höhe, der Boxen zu ändern aber mit einem anderen umgerechneten Wert, mache folgendes

von ... Resample - Rename - Math - Null

Rename sizeY

Math to Range = 0.2 50
Verbinde null mit Geo Scale OP und lösche Translate Y
Gebe in der Box beim Center ty eine 0 ein, dann schlagt es nach beiden Seiten aus.

Pixel definieren die Instanzen

Ein Ramp TOP Common: Resolution 50 50, Common: Pixel Format = 32 Bit float (RGBA) (minus Werte möglich)
Ramp copy paste, Type: vertical (verticaler Verlauf)
ramp1 und ramp2 mit add verbinden
ramp1 schwarz nach rot, ramp2 schwarz nach grün
ramp(1 und2) -> add -> null benenne es in instancesTop
Ziehe in Geo Instance, Default Instance OP = instancesTop
Nun kann man RGBA Werte auswählen und zuweisen.
Geometry Instance: Translate X = R und Translate = Y
Erzeugt ein Raster, weil die Werte von schwarz nach Rot horizontal verlaufen und die Grünwerte vertikal.
Stattdessen kann man jedes andere Bild nehmen oder ein Noise
Noise TOP Common: Resolution = 50 50, Pixel Format 32 Bit float (RGBA), Noise: Monochrome = Off
Ziehe diese Noise oder das angehängte null in Geo Instance, Default Instance OP und weise die RGB Werte bei Translate zu

Animiere Noise

Noise Noise: Period = 10
Transform: Translate - tz = absTime.secondes * 0.02
Noise Common: Resolution = 200 erhöht die Anzahl der Kugeln
Ändere im Noise Harmonics und Harmonic Spread benutze 2 Lights und vielleicht noch einige Noise Werte für Geometrie Instance2: Color OP Diese wehende Kugelmatte sieht einfach toll aus.

Vektorgrafiken definieren die Instanzen

Erstelle einen circle SOP,
Radius =b10
Divisions = 5 Anzahl der Insanzen
Arc Type = Open Arc

Instanzen einzeln ansprechen und Paramter zuweisen

In diesem Beispiel werden Instanzen eines Circles (Polygon) erzeugt, die werden auf einem weiteren Circle (Polygon) angeordnet.

Da alle Instanzen einen anderen Drehwinkel haben sollen, muss man genausoviele Variablen wie Instanzen erstellen und denen jeweils einen Wert zuweisen. Das geschieht hier über ein Pattern CHOP.

weitere Infos hier
Download instance_20.tox

Palette

(Pfeil oben links öffnet die Palette mit Ordnern und Komponenten
Will man etwas in die eigene Palette einfügen erstellt man ein Base mit eine Netzwerk wie oben beschrieben. Mit rechter Maustaste kann man in der Palette im Ordner MyPalette Unterordner einfügen. Schiebe ein Base mit sinnvollem Namen auf den gewünschten Ordner oder in das Fenster unten rechts. Sie werden unter: C:\Users\<DeinName>\Documents\Derivative\Palette standardmäßig gespeichert. Beim Neustart von Touch Designer sollten die neuen Paletten erscheinen.

Man kann ein Base auch mit rechter Maustaste speichern Save as

UI, Basic Widgets Buttons, Slider etc.

Tools, Probe zeigt für jedes Element die Prozessorleistung an

Tools, Chroma Key Greenscreen Effekt

Image Filters, Twirl Strudel

 

Python Snippets

siehe Python Javascript im Vergleich

Python- TouchDesigner Spickzettel, die wichtigsten Einzeiler

Schnellübersicht, Text DAT oder Dialogs Textport

# Schnell-Inspektion im Textport:
dir(op('moviefilein1')) # Zeigt alle verfügbaren Parameter/Attribute
help(op('moviefilein1')) # Zeigt die integrierte Python-Dokumentation

Konsole Dialogs / Konsole

Einzeilige Kommentare #
Mehrzeilige Kommentare werden in jeweils 3 Anführungszeichen (doppelt oder einfach) eingeschlossen

'''
Kommentare mehrzeilig
'''

"""
Kommentare mehrzeilig
"""
      

Die Breite des Elternelements

me.parent().width

Ein Wert der mittels sinus schwingt

(math.sin(absTime.seconds * 0.01) + 1) * 5
    

ansteigender Wert

absTime.seconds * 2 

Ein null Operator namens "null4", der einen Wert liefert in einem Eingabefeld zuweisen. Alternative Viewer Active dann Drag and Drop

op('null4')[0]
    

oder wenn man den Kanal kennt

op('null4')['chan1']
    

Zuweisen eines Wertes Operator "noise1" Parameter "period"

op('noise1').par.period = 1
    

circle Kreisbewegung / Ellipse von Rand zu Rand mittels Center->centerx und centery

math.sin(absTime.seconds * 1.5) * .5
math.cos(absTime.seconds * 1.5) * .5

zum Pixel Pastor

Impressum / Datenschutz

test