Wenn man einen Wert haben möchte der sehr langsam reagiert und die Lautstärke des gesamten Stückes anzeigt. Bild folgende Kette.
Die 3 entscheidenden Stellschrauben dafür:
1. Signal auf Gesamtlautstärke umstellen
-
Wenn du vorher einen Audio Filter TOP/CHOP hattest, um nur die Bässe herauszufiltern: Nimm diesen Filter heraus oder stelle ihn aus.
-
Nutze das volle Audiosignal und stelle beim Analyze CHOP die Function auf RMS Power. RMS misst die effektive Gesamtenergie des Signals über die Zeit.
2. Lag CHOP extrem träge einstellen
Der eigentliche Trick für die natürliche Reaktion liegt im Lag CHOP:
-
Stelle Lag 1 (Aufweiten) auf 1.5 bis 2.5 (Sekunden).
-
Stelle Lag 2 (Verengen) auf 2.0 bis 4.0 (Sekunden).
-
Effekt: Kurze Peaks, Drums oder Bässe werden komplett ignoriert. Das Signal fängt erst langsam an aufzugehen, wenn der Song für längere Zeit spürbar lauter/intensiver wird. Wenn eine leise Strophe kommt, zieht sie sich ganz sanft über mehrere Sekunden wieder zusammen.
3. Schwellenwert & Nicht-Linearität einbauen (Math CHOP)
Damit das Signal bei leisen Stellen völlig ruhig bleibt und erst bei echten Steigerungen reagiert:
-
Gehe in Math CHOP 2 auf den Reiter Mult/Add.
-
Experimentiere mit dem Parameter Exponent: Setze ihn auf 2 oder 3.
-
Effekt: Durch eine quadratische oder kubische Kurve bleiben kleine Eingangswerte nah an 0 (Signal bewegt sich bei leisen Intros gar nicht). Erst wenn das Signal im Drop/Refrain die oberen 50% erreicht, steigt die Kurve steil an und steigert das Signal sichtbar.
Das gibt der Animation genau diese ruhige, "lebendige" Dynamik, wobei sich die Größe(Signal) an die Stimmung der Musik anpasst!
Audio Visual für Drums
Beispiel 1
Download Tox AudioVisual Snare Drum
Ein Kreis der ab einer bestimmten Laustärke einer Frequenz / Snare Drum kurz groß wird. Ein sehr einfacher Weg:
AudioFileIn- AudioFilter - Audiospectrum- Analyze - Logic - Lag -> Größe eines Circle
Audio Filter
Man kann mit den Reglern ein einziges Schlaginstrument, wie ein Hiat oder Snaredrum ziemlich genau erfassen, indem man mit Band Pass und Filter Cutoff die entsprechende Frequenz sucht/ erhör6. Dann die filter resonance hoch drehen, damit genau der definierte Bereich verstärkt wird. Mittels hohen Roll off Wert alles andere unterdrücken. Auch der Dry Wet wird auf den hohen Wert 1 gestellt, damit alle anderen Frequenzen unten bleiben.
Analyze
1.Lautstärke in einen Amplituden-Wert umwandeln (Analyze CHOP):Ein Audiosignal schwingt permanent zwischen positiven und negativen Werten. Verbinde den Ausgang deines Audio Filter CHOPs mit einem Analyze CHOP.Stelle im Analyze CHOP die Funktion auf RMS Power (oder Maximum).Dadurch erhältst du einen durchgehenden, positiven Zahlenwert, der die aktuelle Lautstärke deiner Snare wiedergibt.
Logic Chop
Convert Input auf Off When Outside Bounds
Schaue mit dem Trail, ab welchem Schwellenwert das Signal erfasst werden soll , 0.1 bis 1,
Lag Chop
macht aus diesem logischen On/Off Wert wieder einen dynamischen Wert mit schnellem Anstieg und etwas langsamern Abfall
Beispiel 2
Ein Audiovisual, welches die Positon eines Kreises anhand eines Kurzen Ausschlag im Audiosignal ändert. Siehe hierzu die Erklärung.
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
Außerdem ein PointSprite MAT mit einem Ramp TOP, welches das Aussehen der Particles bestimmt
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.
Die Particles fliegen normalerweise in Richtung der Normalen der Punkte des 3D Objekts.
Die Geschwindigkeit entlang der Normalen wird reduziert, indem man Mass on und 0.2 einen niedirgen Wert angibt. Dann reagieren Partikel auch intensiver auf Forces.
Im particle eine hohe Turbulence und ein niedriger Turb Period 0.02 lässt sie hin und her fliegen.
Das Sort mit Random vor dem Particle sorgt für eine unregelmäßigen Verteilung im Grid / 3D Objekt
Auf Karteikarte Particle setze Drag auf on und Drag auf 0.2. Der Effekt: Ohne Drag schießen die Partikel mit hoher Wucht starr durch das Turbulenzfeld hindurch. Der Luftwiderstand bremst sie leicht ab, sodass die Turbulenzkräfte mehr Zeit haben, den Funken auf seiner Flugbahn hin und her zu reißen. Die Geschwindigkeit der Particles kann auch von der Größe des 3D Objekts und der Kamera abhängen. Ein kleines 3D Objekt mit einer Kamera, direkt daneben wirkt als hätten die Particles eine höhere Geschwindigkeit.
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
-
Textur erstellen (z. B. weicher Licht-Punkt):
-
Im Material zuweisen:
- Wähle dein Point Sprite MAT aus.
- Parameter Reiter Point Sprite.
- Ziehe das Ramp TOP per Drag & Drop in das Feld Color Map (oder tippe den Namen des Ramp-Chops ein).
- Common:
Blending Transparency: On,
Write Depth Values: Off
Depth Test: On
Discard Pixels based on Alpha : Off
- 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.
- 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
-
life[0] = Das normalisierte Alter des Partikels.
Das ist ein prozentualer Wert zwischen 0.0 (gerade geboren) und 1.0 (kurz vor dem Sterben). Deshalb lässt er sich so genial für Farbübergänge, Transparenzen oder Größenänderungen nutzen.
-
life[1] = Die gesamte Lebensdauer (Variance / Life Expectancy) des Partikels in Sekunden (z. B. 3.5 für 3,5 Sekunden).
Sop 3D Elemente entlang einer Pipeline
Erzeuge ein Rectangle oder Circle SOP.
Circle SOP auf Open Arc, Arc Angel auf 180 Grad
Mit einem Sweep SOP auf den das Rectangle und der Circle eingefügt werden, bekommt man lauter Rechtecke auf jedem Punkt des Circle. Sweep Karteireiter Output, Skin Output: on
Der Circle könnte auch eine Line sein, entlang derer die Rechtecke aufgefreiht sind. Das Sweep-Operator zieht dein Profil (das Rechteck) an dem Pfad (der Line oder dem Circle) entlang. Das Ergebnis ist eine prozedurale Fläche, die intern oft noch als NURBS-Fläche oder Primitive Mesh repräsentiert wird.
Füge hinter das Sweep ein Convert und dann ein Facet ein um daraus eine durchgehende Pipeline zu machen.
Sweep (erzeugt Mesh Convert (macht daraus Polygone) Facet (spaltet Normalen via Cusp
Die wichtigsten Parameter im Convert SOP
Wenn du das Convert SOP auf Convert To: Polygons gestellt hast, sind vor allem die Einstellungen unter dem Reiter Convert entscheidend:
-
U Subdivide / V Subdivide (oder U/V Divs)
-
Was es tut: Bestimmt, wie viele Unterteilungen entlang der Länge des Pfades (U) und entlang des Profils (V) erzeugt werden.
-
Performance-Tipp: Standardmäßig steht das oft höher als nötig. Wenn deine Linie/Circle nur sanft geschwungen ist, reicht oft eine Halbierung der U-Divisions. Wenn dein Sweeping-Profil ein simples Rechteck ist, reichen für V wenige Segmente aus (beim Rechteck brauchst du z.B. nur die 4 Ecken plus Vertices für harte Kanten).
-
Interpolation Method (Spline vs. Linear)
-
Convert Type / Adaptive Tesselation
-
Statt fester Rasterabstände (Uniform) kannst du bei komplexeren Formen prüfen, ob eine adaptive Unterteilung sinnvoll ist. Dadurch werden nur an stark gekrümmten Stellen viele Polygone erzeugt, auf geraden Strecken dagegen sehr wenige.
Typischer Ablauf in deiner Pipe
-
Sweep: Erzeugt die Röhren-/Profil-Form entlang des Pfades. Karteireiter Output, Skin Output: on
-
Convert: Wandelt das mathematische Sweep-Ergebnis /NURBS-Oberfläche in ein verarbeitbares Polygongitter um (Convert To: Polygon).
-
Facet: Verschmilzt doppelte Punkte und berechnet die Licht-Normalen, damit das Objekt im Rendering korrekt schattiert wird und keine Darstellungsfehler (z. B. schwarze Flecken oder falsche Lichtreflexe) entstehen.
A. Geometrie verschmelzen (Consolidate Points)
Durch das Sweopen und Konvertieren entstehen oft doppelte Punkte an denselben Koordinaten (z. B. am Anfang und Ende eines geschlossenen Circles oder zwischen Segmenten).
B. Schattierung & Kanten steuern (Compute Normals / Orient Normals)
Damit TouchDesigner weiß, wie Licht auf deine Sweep-Form fällt, braucht jedes Polygon eine Raumrichtung – eine sogenannte Normale (Normal).
-
Kanten abrunden vs. scharfkantig machen: Über den Parameter Compute Normals erzeugt das Facet-SOP diese Richtungsvektoren.
-
Cusp Polygon: Wenn du eine Schachtel oder eine Röhre sweepst, möchtest du vielleicht, dass die Längskanten scharf bleiben, aber die Kurve entlang des Kreises glatt schattiert wird. Über den Cusp Angle entscheidet das Facet SOP automatisch anhand des Winkels zwischen zwei Flächen, ob die Kante hart oder weich gerendert werden soll.
Wenn du den Sweep entlang des Halbkreises geschmeidig haben willst, aber die Rechteck-Kanten knackig scharf bleiben sollen:
-
Consolidate: Consolidate Fast (bereinigt doppelte Vertices)
-
Compute Normals: On (aktiviert die Lichtberechnung)
-
Cusp Polygon: On
-
Cusp Angle: 30 bis 45 (trennt die 90°-Rechteckkanten scharf ab, lässt die Halbkreis-Kurve glatt)
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:
-
Kapseln von komplexen Logiken (z. B. ein eigenes Partikelsystem oder ein Audio-Analyse-Modul).
-
Erstellen eigener wiederverwendbarer Operatoren (Tox-Dateien / Components). Kontextmenü: Save component as tox. Oder man zieht es in den eigenen Component Ordner
-
Customize Component (Kontexmenü) bietet weitere Möglichkeiten
-
Aufräumen des Hauptnetzwerks ("Clean Code").
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).
-
Funktion: Dient als visuelles Layout-Element für Benutzeroberflächen oder Bildschirm-Ausgaben.
-
Visuelles Verhalten: Besitzt feste Parameter für Breite/Höhe (Widt
h/Height), Farben, Rahmen, Ausrichtung (Align/Layout) und kann Interaktionen wie Mausklicks, Drag & Drop und Hover-Events verarbeiten.
-
Typischer Einsatzzweck:
-
Bauen von Steuerungspanels / Control Dashboards (Buttons, Regler und Anzeigen gruppieren).
-
Zusammenstellen von Multi-Window-Layouts oder UI-Overlays.
-
Anordnen von mehreren Video-Feeds/TOPs nebeneinander für eine Ausgabefläche.
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.
Camera Comp
Ein Camera Comp an einem Pfad entlang laufen lassen.
Erstelle einen Circle SOP > Transform SOP > Null SOP
Circle SOP Orientation = XY Plane, dann liegt der Kreis. Transform vergrößert den Circle, Null wird unten rechts auf Template gestellt. Ziehe den Null auf Camera / Path SOP. Nun kann man die Camera mittels Position im Kreis laufen lassen.
Erstelle ein Null COMP und ziehe es auf Camera Look at . Die Camera richtet sich nun Richtung Zentrum.
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
Impressum / Datenschutz
test