Animation-Tags und XPresso: Die Cinema 4D-Tags – XPresso – Teil 04 – Die XPresso-Nodes > Allgemein

Tutorials 21. Dezember 2015 – 0 Kommentare

Wir haben nun bereits zwei Möglichkeiten besprochen, neue Nodes zu einer Schaltung hinzuzufügen. Entweder Sie ziehen diese aus dem seitlich am XPresso-Editor gelegenen X-Pool oder Sie führen einen Rechtsklick in das Raster des XPresso-Editors aus und wählen dort Neuer Node > XPresso, um die Untergruppen der zur Verfügung stehenden Nodes einsehen zu können. Ich möchte nachfolgend diese Nodes der Reihe nach besprechen, werde dabei jedoch den Ergebnis-Nodes aus der Gruppe XPresso > Allgemein vorziehen. Dies macht einfach Sinn, weil wir so von Anfang an ein Instrument haben, mit dem Ports und deren Werte ausgelesen und angezeigt werden können.

Beginnen Sie also damit ein beliebiges Objekt zu erstellen und fügen Sie diesem durch einen Rechtsklick auf dessen Namen im Objekt-Manager ein XPresso-Tag hinzu. Sie finden dies unter den CINEMA 4D Tags. Alternativ hierzu können Sie auch das Tags-Menü oben im Objekt-Manager zur Wahl des gewünschten Tags nutzen.

Animation in Cinema 4D - Die Einstellungen eines Ergebnis-Nodes

Abbildung 2.38: Die Einstellungen eines Ergebnis-Nodes

Ergebnis-Node und die Datentypen

Dieser Node verfügt über keine frei konfigurierbaren Ein- oder Ausgänge und ist nur zur Darstellung eines Datentyps gedacht. Dieser Datentyp muss bei selektiertem Node über den Attribute-Manager eingestellt werden. Dabei werden teilweise auch Werte umgerechnet. Wenn Sie z. B. einen Vektor am Eingang anschließen, den Datentyp jedoch auf Real stehen haben, also die Darstellung einer Fließkommazahl gewählt wurde, wird der Vektor schlicht umgerechnet. Das Ergebnis entspricht dabei der Länge des Vektors, was dann und wann ja auch eine interessante Information sein kann.

Lassen Sie uns in diesem Zusammenhang kurz über die verfügbaren Datentypen sprechen, denn diese begleiten uns bei allen Aufgaben, die mit Skripten, Schaltungen oder der Programmierung zu tun haben. Real wurde im Prinzip bereits als Fließkommazahl identifiziert. Dies sind also Zahlenwerte, die einen Nachkommaanteil haben, wie z. B. 3,1415. Dabei werden in Programmzeilen die Kommata jedoch generell als Punkte gesetzt, also müsste es in diesem Fall richtig heißen 3.1415.

XPresso selbst ist dabei jedoch nicht so streng und korrigiert Eingaben mit Komma automatisch. Der Datentyp Farbe ist mit dem Datentyp Vektor identisch, denn Farben bestehen ja ebenfalls aus drei einzelnen Zahlenwerten, nämlich für den Rot-, den Grün- und den Blauanteil. Beachten Sie beim Umgang mit Farben, dass deren Werte auf den Bereich zwischen 0 und 1 umgerechnet werden. Ein reines Rot hat also den Vektor 1.0, 0.0, 0.0. Ausnahmen gibt es nur bei HDR-Informationen, wo die Gesamthelligkeit eines Bildpunkts auch regelmäßig das normale Maximum von 1.0 überschreiten kann, wenn z. B. die Sonne in einem Bild zu sehen ist. Wird der Ergebnis-Node über den Datentyp Farbe konfiguriert, wird also einfach nur ein Vektor mit den drei Farbanteilen innerhalb des Nodes angezeigt und nicht wirklich ein Farbfeld.

Ähnlich funktioniert der Datentyp Textur, denn dieser zeigt nicht das eingeleitete Bild sondern nur die Pfadangabe im Node an. Beim Boole Datentyp gibt es generell nur zwei definierte Zustände, nämlich TRUE und FALSE, also Richtig und Falsch. Das Boole-Format, in Skripten und Programmen oft Bool genannt, erkennt aber auch die Zahlenwerte 0 als FALSE und 1 als TRUE an. Diese können also ebenfalls an den Node verschaltet werden und liefern ebenso brauchbare Ergebnisse.

Integer ist der kleine Bruder von Real und versteht sich nur auf ganzzahlige Werte, wie z. B. 15 oder 296751. Auch hier findet eine Umrechnung von Werten statt, wenn z. B. eine Real-Zahl in eine Integer-Zahl umgewandelt wird. Der Nachkommaanteil wird einfach weggelassen. Aus 15,99 wird also schlicht die Integerzahl 15. Dies kann natürlich das Ergebnis einer Berechnung stark beeinflussen. Dies ist einer der Gründe weshalb Sie über die Eigenschaften der Datentypen bescheid wissen müssen, besonders wenn Sie in einer Schaltung gemischt vorkommen.
Die Normale entspricht erneut dem Datentyp Vektor, nur dass eine Normale automatisch auf die Gesamtlänge 1 gekürzt wird. Rein rechnerisch ergibt sich die Gesamtlänge eines Vektors aus der Summe seiner Komponentenquadrate, aus denen dann schließlich die Wurzel gezogen wird. Als Formel sieht das also so aus: Länge eines Vektors=, wobei x, y, und z für die entsprechenden Zahlenanteile

des Vektors stehen. Um nun aus einem Vektor eine Normale zu machen, muss jede Komponente durch die Länge des Vektors geteilt werden. Dies alles müssen wir aber nicht selbst erledigen, sondern derartige Umrechnungen laufen an den Nodes selbständig ab. Ein beliebig langer Vektor wird also automatisch zu einer Normalen umgerechnet, wenn der Datentyp Normale verwendet wird. Voraussetzung dafür ist nur, dass zumindest eine Komponente des Vektors ungleich Null ist.

Der Datentyp Matrix vereint gleich vier Vektoren in sich, die oft über bestimmte Kürzel angegeben werden. Der Off-Vektor steht für den Offset, also die Position einer Matrix. Es handelt sich dabei als um einen Positionsvektor, der entweder vom Weltsystem oder einem übergeordneten Objekt aus berechnet wird. Wir hatten bereits über die Unterschiede zwischen einer lokalen und einer globalen Matrix gesprochen. Wenn Sie eine Matrix mit eigenen Vektoren füllen, haben Sie es natürlich selbst in der Hand, welches Bezugssystem Sie nutzen möchten. Die Struktur einer Matrix ist in beiden Fällen identisch. Die drei übrigen Vektoren einer Matrix werden mit den Kürzeln V1, V2 und V3 bedacht. V1 steht dabei für die Richtung der X-Achse, V2 für die Y- und V3 folglich für die Z-Achse. Damit die Matrix und das eventuell damit verbundene Objekt nicht verzerrt werden, müssen alle Achsen senkrecht aufeinander stehen. Diese Richtungen können also in der Regel nicht beliebig und unabhängig voneinander gewählt werden.

Animation in Cinema 4D - Der Bitmap-Node

Abbildung 2.39: Der Bitmap-Node

Zudem sind diese Achsen in der Regel normiert, also nur eine Einheit lang. Dies kann aber auch individuell gehandhabt werden, wenn z. B. ein Objekt über XPresso skaliert werden soll. Sie erinnern sich sicher an die 1, 1, 1 Größen in den Koordinaten eines Objekts. Andere Werte führen zu einer Stauchung oder Streckung des Objekts entlang der jeweiligen Achse.

Der Zeit-Datentyp gibt die in den Programm-Voreinstellungen unter Einheiten > Animationseinheiten gewählte Einheit wieder. Im Normalfall sind dies also Bilder oder Sekunden. Schließlich haben wir auch noch den Datentyp String zur Auswahl. Dabei handelt es sich um Buchstaben, Ziffern, Sonderzeichen oder generell um Texte. Praktisch gesehen könnte man die Datentyp Textur also auch als String ansehen, denn wir bekommen ja nur eine Zeichenabfolge angezeigt. Intern werden Dateipfade jedoch noch einmal unterschiedlich zu Strings betrachtet, daher diese Trennung.
Die übrigen Datentypen, die das Kürzel TP im Namen tragen, sind ausschließlich für den Umgang mit Thinking Particles gedacht. Wir kommen darauf also später noch zurück.

Bitmap-Node

Nach diesen eher theoretischen Abhandlungen der Datentypen eines Ergebnis-Nodes schauen wir uns den Bitmap-Node an. Dieser ist der erste Eintrag in der Liste der allgemeinen XPresso-Nodes und kann zum Auslesen von Farbwerten aus einer geladenen Bitmap genutzt werden. Über die blaue Schaltfläche am Node müssen Sie dafür die drei Eingänge für den Dateinamen, sowie für die gewünschte X- und Y-Position des auszulesenden Bildpixel anlegen. Auf der roten Seite des Nodes lassen sich für die Ausgabe Ports für die Breite und Höhe des geladenen Bilds, sowie natürlich für die an der angegebenen Position gemessene Farbe anlegen. Wie in Abbildung 2.39 zu erkennen, lassen sich die Werte für X und Y, sowie für den Dateinamen auch direkt im Attribute-Manager bedienen. Eine Verschaltung mit anderen Nodes ist daher auf der Eingangsseite nicht unbedingt notwendig. An den Ausgang-Ports habe ich drei Ergebnis-Nodes angeschlossen, die wir ja bereits besprochen haben. Die Datentypen an den Breite und Höhe-Ports können Sie mit Real oder Integer angeben. Bitmap-Auflösungen sind ja immer ganzzahlig. Der Farbe-Port liefert das passende Resultat, wenn Sie den Ergebnis-Node dort ebenfalls auf Farbe oder auf Vektor einstellen. Sie müssen nun nur selbst darauf achten, dass der über die X- und Y-Werte ausgewählte Pixel überhaupt vorhanden ist. Ansonsten liefert der Bitmap-Node nur den Farbe-Wert 0, 0, 0, also schwarz. Das Bezugssystem für die X- und Y-Werte liegt übrigens in der linken oberen Ecke der Bitmap. Es kommen daher auch nur positive Werte für X und Y infrage, die zwischen 0 und der jeweiligen maximalen Breite bzw. Höhe der Bitmap abzüglich 1 liegen.

Bounding Box-Node

Unter einer Bounding Box versteht man einen Quader, der die maximalen Abmessungen eines Objekts wiedergibt. Sofern Sie in Cinema 4D die Darstellung eines Selektionsumriss deaktiviert haben (über die Anzeige-Rubrik der Ansichts-Voreinstellungen der Editoransichten) können Sie die ungefähre Größe dieses Quaders bereits durch orangefarbene Ecke an selektierten Objekten angedeutet sehen (siehe Abbildung 2.40). Bei einem Quader oder Würfel entspricht die Form und Größe dieses Um-Quaders exakt der des Objekts. Bei unregelmäßig geformten Objekten kann es jedoch auch zu durchaus großen Abweichungen kommen, denn die Bounding Box zeigt immer nur die maximalen Punktpositionen an einem Objekt an.

Animation in Cinema 4D - Der Bounding Box-Node

Abbildung 2.40: Der Bounding Box-Node

Gefüttert werden muss dieser Node mit dem Datentyp Objekt, also über den gleichnamigen Ausgang-Port eines Objekt-Nodes. Beachten Sie dabei, dass es sich um ein Punkt- oder Polygon-Objekt handeln muss. Parametrische Grundobjekte, wie z. B. ein Würfel oder eine Kugel funktionieren mit diesem Node nicht und müssten zuerst konvertiert werden (Mesh > Konvertieren > Grundobjekt konvertieren). Gleiches gilt für andere Objekttypen, wie z. B. eine Lichtquelle, die keine Punkte enthalten.

Die Ausgabe-Ports Quader Minimum und Quader Maximum stellen Vektoren zur Verfügung, die jeweils die kleinsten und die größten Koordinatenwerte der Bounding Box zusammenfassen. In dem Beispiel der Abbildung 2.40 erkennen Sie, dass ich dort sowohl Ergebnis-Nodes mit dem Datentyp Vektor, als auch zwei Kugel-Objekte angeschlossen habe, deren globale Position durch die minimale und die maximale Koordinate der Bounding Box gesetzt werden. Daran können Sie erkennen, dass durchaus auch mehrere Nodes an den Ausgang-Ports verbunden werden können. Nur an den Eingängen ist jeweils nur eine Verbindung erlaubt. Der Port für die Quader-Größe liefert ebenfalls einen Vektor, der nur die absoluten Abmessungen der Bouding Box enthält. Ein Klick auf die rote Schaltfläche am Bounding Box-Node zeigt, dass sogar noch mehr Ausgänge erzeugt werden können, über die dann alle acht Eckpunkte des Um-Quaders separat ausgegeben werden können. Wenn Sie nun jedoch den Quader in der Editoransicht etwas rotieren, scheint die Platzierung der beiden Kugeln nicht mehr zu stimmen. Woran liegt das?

Dies liegt daran, dass die Bounding Box vorerst parallel zum Welt-Koordinatensystem berechnet wird. Nichts anderes bewirkt die Matrix-Modus-Einstellung des Bounding Box-Nodes im Attribute-Manager, die standardmäßig auf Global geschaltet ist. Diese Einstellung war bereits in Abbildung 2.40 zu sehen. Ein mögliches Ergebnis erkennen Sie in Abbildung 2.41.

Animation in Cinema 4D - Die globale Bounding Box eines rotierten Quaders

Abbildung 2.41: Die globale Bounding Box eines rotierten Quaders

Die Bounding Box erfasst zwar weiterhin die Maximalabmessungen des rotierten Quaders, bleibt dabei aber parallel zu den Weltachsen. Ist dies nicht gewünscht, schalten Sie den Matrix-Modus auf Lokal um. Die Abmessungen der Bounding Box werden dann parallel zu den Objektachsen berechnet. Im Fall unserer Schaltung sind dann nur kleine Korrekturen nötig, damit die beiden Kugel-Objekte wieder an den richtigen Ecken platziert werden. Diese Modifikationen sind in Abbildung 2.42 zu sehen. Zuerst sollten die Eingänge an den beiden Kugel-Objekt-Nodes von Globale Position auf Position umgeschaltet werden. Löschen Sie also die alten Verbindungen und Ports und rufen Sie die neuen Ports über die blauen Schaltflächen auf. Die Verbindungen zu den entsprechenden Ausgängen der Bounding Box sind anschließend wieder zu ziehen. Da die Kugeln nun lokale Positionen erhalten, beziehen sich diese auf das Achsensystem des rotierten Quaders. Die Kugeln müssen daher auch im Objekt-Manager unter diesem Würfel gruppiert werden. Die Abbildung 2.42 zeigt die korrigierte Szene.

Animation in Cinema 4D - Anpassung der Schaltung und der Objekthierarchie auf lokale Positionen

Abbildung 2.42: Anpassung der Schaltung und der Objekthierarchie auf lokale Positionen

Was die Ausgabe der Quader-Punkte eins bis acht angeht, so sollte Ihnen die Abbildung 2.43 weiterhelfen können. Dort habe ich alle Ausgang-Port am Bounding Box-Node aktiviert und mit Zahlen gefüllte Text-Splines damit verschaltet. Die Ziffern in den Text-Splines passen natürlich zu den jeweiligen Ausgängen, so dass wir im Editor gut ablesen können, wo welche Ecknummer eigentlich liegt.

Animation in Cinema 4D - Reihenfolge der Eckpunkte am Um-Quader

Abbildung 2.43: Reihenfolge der Eckpunkte am Um-Quader

Einfach-Flop-Node

Bei diesem Node geht es dann schon etwas mehr ans Eingemachte, wobei aber auch festgehalten werden muss, dass Sie derartige Nodes nur in Spezialfällen benötigen werden. Der Einfach-Flop funktioniert wie ein zeitverzögerter Schalter. Nach dem Anschalten benötigt dieser also eine gewisse Zeit bis das maximale Signal durchgeleitet wird. Man kann sich dies vielleicht wie das langsame Hochdimmen einer Glühbirne vorstellen. Um diese Aufgabe erfüllen zu können, müssen drei Eingänge am Node mit Werten beliefert werden. Einerseits wird die aktuelle Zeit benötigt, damit der Nodes berechnen kann, wie viel Zeit seit der Aktivierung vergangen ist. Dann brauchen wir natürlich das eigentliche Schaltersignal, ab wann der Node überhaupt mit dem Hochdimmen beginnen soll. Schließlich legt ein dritter Wert fest, wie lange es dauert, bis am Ausgang des Nodes die volle Signalstärke ankommt. Bei derart spezialisierten Nodes kommen wir nicht drum herum, noch andere Nodes mit ins Spiel zu bringen, um ein plausibles Beispiel zu erstellen.

In diesem Fall benötigen wir zusätzlich noch den Zeit-Node und einen Vergleich-Node. Den Zeit-Node finden Sie ebenfalls unter Neuer Node > XPresso > Allgemein. Der Vergleich-Node ist in der Kategorie Neuer Node > XPresso > Logik zu finden. Der Zeit-Ausgang des Zeit-Nodes liefert einfach nur die aktuelle Abspielzeit unserer Animation gemessen in Sekunden. Diesen Wert können Sie also direkt mit dem Zeit-Eingang am Einfach-Flop verbinden. Nun benötigen wir noch einen Boole-Wert, also z. B. 0 oder 1, um den Einfach-Flop einschalten zu können. Wichtig dabei ist für den Einfach-Flop der Wechsel des Boole-Werts von 0 zu 1, bzw. von FALSE zu TRUE. Hier kommt der Vergleich-Node ins Spiel denn dieser vergleicht einfach nur zwei Werte miteinander. Wie dieser Vergleich berechnet werden soll, stellen Sie im Attribute-Manager ein. Dort stehen typische mathematische Funktionen, wie z. B. > (größer) oder <= (kleiner gleich) zur Verfügung. Der Vergleich gibt also ein positives Boole-Signal aus, sobald die eingestellte Funktion zutrifft. Die folgende Abbildung 2.44 sollte beim Verständnis dieser Zusammenhänge helfen. In Abbildung 2.44 erkennen Sie den bereits angesprochenen Zeit-Node und dessen Verbindung zum Einfach-Flop. Der Eingang 1 des Vergleich-Nodes wird nun ebenfalls mit dem Zeit-Ausgang verbunden und die Funktion im Vergleich auf >= (größer gleich) eingestellt. Wenn also die Zeit größer oder gleich groß dem Wert bei Eingang 2 wird, resultiert daraus ein TRUE-Signal am Ausgang des Vergleich-Nodes. Es liegt jetzt also an uns, wie wir Eingang 2 und somit den Zeitpunkt wählen, ab dem der Vergleich aktiviert wird.

Animation in Cinema 4D - Beispielhafte Verwendung des Einfach-Flop-Nodes

Abbildung 2.44: Beispielhafte Verwendung des Einfach-Flop-Nodes

Da die Zeit in Sekunden gemessen wird, sollte Eingang 2 ebenfalls eine entsprechende Größenordnung haben. Der Wert 1 würde dort also bedeutet, dass nach Ablauf der ersten 25 Bilder der Animation, der Schalter aktiv wird. Dazu müssen Sie keinen separaten Node erzeugen, denn der Eingang 2 kann direkt im Attribute-Manager eingestellt werden, wenn der Vergleich-Node selektiert ist.

Schließlich muss noch ein Zahlenwert für die Länge am Einfach-Flop bestimmt werden. Das ist dann die Zeitspanne, die der Node nach seiner Aktivierung benötigt, um auf volle Signalstärke zu kommen. Ob dieser Wert in Bildern oder Sekunden angegeben werden muss hängt wieder von den Programm-Voreinstellungen und der dort gewählten Animationseinheit ab. Sie können diesen Wert bei selektiertem Einfach-Flop direkt im Attribute-Manager eintragen oder aber Sie verwenden dafür einen sogenannten Konstante-Node. So ein Node ist bereits in Abbildung 2.44 zu sehen und dient nur dem Zweck, einen festen Wert an seinem Ausgang zur Verfügung zu stellen. Sie finden diesen Node ebenfalls unter Neuer Node > XPresso > Allgemein.

Sobald Sie dessen Datentyp auf Zeit geschaltet haben, können Sie über den Attribute-Manager einen beliebigen Wert einstellen. Ich habe mich hier für 25 B entschieden. Der Einfach-Flop wird dadurch eine Sekunde für den Signalaufbau, bzw. das Hochdimmen benötigen. Nun ist es an uns, die Ausgänge und auch den Modus des Einfach-Flops richtig zu nutzen. Voreingestellt ist der Modus Normal. Dabei wird der Einfach-Flop erst dann aktiv, wenn das Auslöser-Signal von TRUE auf FALSE wechselt. Das wäre in unserem Fall also nicht die richtige Einstellung. Im Modus Einfach fängt der Node dann an aktiv zu werden, wenn ein TRUE-Signal anliegt. Das hört sich also schon besser an. Beachten Sie dabei nur, dass durch den Wechsel des Auslöser-Signals auch eine noch laufende Zählung im Einfach-Flop unterbrochen werden kann. Würde also unser Auslöser-Signal bereits nach zwei Animationsbildern wieder ausgeschaltet, würde der Einfach-Flop automatisch zurückgesetzt und nicht die vorgegebene Länge für den Signalaufbau nutzen. In unserem Fall steht dies jedoch nicht zu befürchten, denn ab einer Sekunde Animation bleibt der Auslöser durch den Vergleich-Node aktiv. Wir müssen uns nun also nur noch um die Ausgänge am Einfach-Flop kümmern. Dort stehen bis zu drei verschiedenen Ports zur Verfügung, nämlich Anzahl, Ausgang und Zustand.

Anzahl gibt die Anzahl der Schaltzyklen wieder, also wie oft der Einfach-Flop bereits aktiviert wurde und die unter Länge angegebene Zeitspanne abgearbeitet hat. Beachten Sie in diesem Zusammenhang, dass diese Zählung auch individuell wieder zurückgesetzt werden kann. Sie finden dazu einen Eingang-Port namens Zurücksetzen am Einfach-Flop. Es handelt sich dabei um einen Port vom Typ Boole, der also beim Setzen eines TRUE-Signals die Zählung der Schaltvorgänge wieder auf Null reduzieren kann.

Der Ausgang-Port schleift nur ein Boole-Signal durch, an dessen Wert abgelesen werden kann, ob der Auslöser im Sinn der Modus-Einstellung am Einfach-Flop aktiv ist oder nicht. Wohl am interessantesten ist der letzte Ausgang-Port, der den Zustand des Nodes mit Zahlen zwischen 0.0 und 1.0 wiedergibt. Dies ist also mit der Signalstärke zu vergleichen, die sich nach der Auslösung entsprechend der Länge-Vorgabe langsam von 0.0 bis hin zu 1.0 steigert. Um diesen Wert begreiflicher zu machen, habe ich der Szene eine einfache Lichtquelle hinzugefügt und diese in die XPresso-Schaltung gezogen. Es erscheint dadurch der bekannte Objekt-Node, auf deren Eingang-Seite Sie nun die freie Wahl haben zwischen allen Parametern, die eine Lichtquelle zu bieten hat. Wie wäre es z. B. mit der Intensität dieser Lichtquelle. Sie finden diesen Port nach einem Klick auf die blaue Schaltfläche am Objekt-Node in der Untergruppe Allgemein.

Wir hatten bereits besprochen, dass Realzahlen zwischen 0.0 und 1.0 auch als Prozentwerte zwischen 0% und 100% interpretiert werden. Sie können daher den Zustand-Port direkt mit dem Intensität-Eingang verbinden, um so die Helligkeit der Lichtquelle zu steuern. Wenn Sie nun die Animation ablaufen lassen, sollten Sie bis zu Bild 24 eine dunkle Lichtquelle sehen. Zwischen Bild 25 und 50 steigert sich die Helligkeit bis zur maximalen Intensität von 100% und springt dann in Bild 51 schlagartig wieder zurück auf 0%.

Einfrieren-Node

Dieser Node eignet sich zum zeitweise Festhalten oder Merken von Werten. Zuerst legen Sie über das Datentyp-Menü im Attribute-Manager fest, welcher Datentyp verarbeitet werden soll. Dann schließen Sie eine Verbindung mit diesem Datentyp am Wert-Eingang des Nodes an. Solange der Boole-Wert am Schalter-Eingang des Nodes auf Aus bzw. FALSE steht, wird der Wert einfach ohne weitere Bearbeitung an den Ausgang des Einfrieren-Nodes durchgereicht. Sobald der Schalter mit einem TRUE-Signal aktiviert wird, wird der zuletzt eingelesene Wert praktisch gespeichert und fortan anstatt eventuell aktuell Wert-Eingänge am Ausgang zur Verfügung gestellt.

Ein mögliches Beispiel für eine solche Funktion wäre z. B. eine Stoppuhr. In dem Moment, in dem ein Objekt eine Ziellinie überschreitet, wird die Zeit angehalten. Ich habe in der folgenden Abbildung 2.45 einmal ein solches Szenario nachgebaut. Zusätzlich zum Einfrieren-Node benötigen wir dazu wieder die Zeit- und Vergleich-Nodes. Den Zeit-Node finden Sie ebenfalls unter Neuer Node > XPresso > Allgemein. Der Vergleich ist unter Neuer Node > XPresso > Logik zu finden. Diesmal benutzen wir den Vergleich jedoch nicht für eine Zeitmessung, sondern wollen damit feststellen, wann ein Objekt eine bestimmte Koordinate, bzw. Ziellinie überschreitet. Dafür erzeugen Sie ein beliebiges Objekt in der Szene und animieren dies mit zwei Position-Keyframes so, dass es sich senkrecht von oben nach unten bewegt und dabei vom positiven in den negativen Y-Anteil wechselt, also durch die Welt-XZ-Ebene fliegt.

Animation in Cinema 4D - Messung der Zeitspanne, bis das Objekt durch die Bodenebene fliegt.

Abbildung 2.45: Messung der Zeitspanne, bis das Objekt durch die Bodenebene fliegt.

Wie Sie auf der linken Seite der Abbildung 2.45 erkennen können, habe ich dafür eine Kugel benutzt. Ein einfacher Text-Spline soll daneben die Zeitspanne anzeigen, die die Kugel benötigt, um die Welt-XZ-Ebene zu erreichen. Es ist dabei wie immer egal, ob Sie die Schaltung der Kugel oder dem Text-Spline zuweisen, da wir mit absoluten Objekt-Referenzen arbeiten. Wie auf der rechten Seite der Abbildung zu erkennen, aktivieren Sie am Node der Kugel den Ausgang für die Globale Position.Y. Solange die Kugel im Objekt-Manager nicht gruppiert wurde könnte aber auch Position.Y verwendet werden. Das Ergebnis wäre identisch.

Leiten Sie diesen Ausgang in den Eingang 1 des Vergleich-Nodes. Mit der Funktion <= (kleiner gleich) können wir nun abfragen, wann die Y-Position der Kugel unter Null sinkt. In dem Moment liefert der Ausgang am Vergleich-Node das positive Signal TRUE, das wir direkt als Schalter am Einfrieren-Node verwenden können. Dadurch wird der Wert am Einfrieren-Node genau in dem Moment gespeichert, in dem die Kugel unter die Welt-XZ-Ebene sinkt. Jetzt brauchen wir nur noch den Zeit-Ausgang des Zeit-Nodes mit dem Wert-Eingang des Einfrieren-Nodes zu verbinden. Dabei handelt es sich zwar um eine Real-Zahl, aber Cinema 4D kann daraus auch automatisch einen String machen. Daher können wir den Text-Eingang des Text-Spline-Objekt-Nodes direkt mit dem Ausgang des Einfrieren-Nodes verbinden und sind bereits fertig mit der Schaltung. Den Text-Eingang finden Sie übrigens unter den Ports der Objekt-Eigenschaften. Beim Abspielen der Animation sollten Sie nun die aktuell gemessene Zeit in Sekundenbruchteilen am Text-Spline angezeigt bekommen. Ergebnis-Node Wir haben mit diesem Node bereits mehrfach gearbeitet. Dieser Node eignet sich ausschließlich für Testzwecke, um z. B. die Ergebnisse von Berechnungen direkt anzeigen zu lassen. Achten Sie dabei immer auf den Datentyp der Anzeige am Node, den Sie über den Attribute-Manager vorgeben können. Ansonsten kann es zu den bereits angesprochenen Umrechnungen kommen. Der Datentyp sollte in der Regel immer dem des mit dem Node verbundenen Ausgang-Ports entsprechen. Wir werden dann etwas später noch einen ähnlichen Node kennenlernen, den Spion-Node, der jedoch zwischen miteinander verbundene Ports geschaltet werden kann und somit auch über einen Ausgang zur Durchleitung eines Werts verfügt.

Animation in Cinema 4D - Der Farbtemperatur-Node Farbtemperatur-Node

Abbildung 2.46: Der Farbtemperatur-Node Farbtemperatur-Node

Mit einer Farbtemperatur ist tatsächlich eine Temperatur im herkömmlichen Sinn gemeint, die jedoch in der Einheit Kelvin gemessen wird. Die uns öfter gebräuchliche Einheit Grad Celsius entspricht in Ihrer Umrechnung 0 °C gleich 273,15 Kelvin. Die Basis von Kelvin ist somit der absolute Nullpunkt bei -273,15 °C. Ansonsten sind die Abstände zwischen beiden Einheiten identisch. Eine um 1 °C erhöhte Temperatur entspricht also ebenfalls einem um 1 Kelvin erhöhten Wert. Um nun den Bogen zu einem Farbwert zu schließen ist festzuhalten, dass jede Temperatur einem gewissen Farbwert zuzuordnen ist. Sie erkennen dies leicht an einem geschmiedeten Stück Eisen oder an einer schlichten Kerzenflamme. Dieser Node rechnet also einen eingeleiteten Temperaturwert, gemessen in Kelvin, in so einen Farbwert um. Lassen Sie uns dies kurz testen, indem Sie in einer neuen Szene einen Würfel aufrufen und diesem ein XPresso-Tag zuweisen. Ziehen Sie den Würfel in die Schaltung und aktivieren Sie dort den Eingang für Basis-Eigenschaften > Farbe (Ansicht) > Farbe (Ansicht). Hierüber lässt sich die Oberflächenfarbe des Objekts im Editor einstellen. Voraussetzung hierfür ist aber auch, dass in den Basis-Einstellungen des Würfels im Attribute-Manager z. B. Farbe aktivieren auf Automatisch gestellt wird. Ansonsten würden wir von diesem Farbwert im Editor nichts sehen können.

Ergänzen Sie schließlich den Farbtemperartur-Node und verbinden Sie diesen wie in Abbildung 2.46 mit dem Eingang des Würfel-Nodes. Sie sollten augenblicklich die Einfärbung des Würfels im Editor beobachten können. Höhere Temperatur-Einstellungen führen so zu gelblichen, weißen und schließlich sogar bläulichen Färbungen. Die untere Farbskala endet bei einem tiefen Rot. Selbst die Absenkung auf 0 Kelvin ändert daran nichts. Dazu muss nicht unbedingt ein anderer Node am Eingang des Farbtemperatur-Nodes hängen. Sie können diesen auch direkt über den Attribute-Manager mit Werten füttern.

FlipFlop-Node

Nein, hier geht es nicht um Sandalen, sondern um einen spezialisierten Schalter-Node für Boole-Daten. Wir schauen uns zuerst die verfügbaren Ports an, bevor ich Ihnen zur Nutzung des Nodes ein Beispiel gebe. Der An-Port schaltet den FlipFlop-Node ein. Dazu muss der An-Port ein TRUE-Signal erhalten. Der FlipFlop bleibt selbst dann noch eingeschaltet, wenn der An-Port wieder auf FALSE gesetzt wird. D. h. der Ausgang des FlipFlops bleibt nach einem TRUE-An-Signal permanent TRUE.

Um den FlipFlop wieder auszuschalten, muss ein TRUE-Signal an den Aus-Eingang gesendet werden. Der Node liefert anschließend so lange ein FALSE als Ausgang, bis das An-Signal wieder auf TRUE wechselt, selbst wenn Aus noch immer auf TRUE steht. Ganz schön kompliziert, oder? Im Prinzip müssen Sie sich aber bei An und Aus nur merken, dass immer das Signal gewinnt, welches als Letztes auf TRUE geschaltet wurde.

Schließlich gibt es auch noch einen Schalter-Eingang. Dieser wechselt immer dann das Ergebnis am Ausgang des FlipFlops, wenn er auf TRUE geschaltet wird. Das Ausschalten des Schalter-Ports führt also auch hier zu keiner Veränderung am Ergebnis, sondern nur das Einschalten. Um ein einigermaßen sinnvolles Beispiel mit diesem Node zu konstruieren, brauchen wir noch ein paar der Nodes, die bislang noch nicht besprochen wurden. Dazu zählen der Mathe-Node, den Sie unter Neuer Node > XPresso > Berechne finden können, sowie ein Verteiler-Node, der in der Gruppe Neuer Node > XPresso > Logik liegt. Ein Mathe-Node wird für Grundrechenarten verwendet, also z. B. um zwei Werte zu addieren. Der Verteiler verfügt über einen Schalter als Eingang, über den Sie gezielt einen seiner Eingänge an den Ausgang des Nodes weiterleiten können. Die anderen benötigten Nodes haben wir bereits zuvor verwendet.

Wir starten wieder mit einer leeren Szene und rufen dort ein Würfel-Grundobjekt auf. Weisen Sie diesem Würfel ein XPresso-Tag zu und ziehen Sie anschließend den Würfel direkt in die noch leere Schaltung. An dem entstehenden Objekt-Node aktivieren Sie den Ausgang Position.X. Ziel der Schaltung soll sein, dass der Würfel automatisch zwischen zwei Positionen auf der X-Achse hin und her läuft. Wir müssen also zuerst überprüfen, ob der Würfel bereits eine dieser Positionen erreicht hat. In dem Fall muss die Bewegungsrichtung nämlich umgekehrt werden.

Derartige Überprüfungen lassen sich hervorragend mit Vergleich-Nodes erledigen, die wir bereits benutzt haben. Sie finden diesen Node unter Neuer Node > XPresso > Logik. Von diesen Vergleich-Nodes benötigen wir gleich zwei Stück, denn wir haben ja auch zwei Umkehrpunkte bei der Bewegung, die wir überwachen müssen. Den einen Vergleich-Node benutzen Sie mit der Funktion <= (kleiner gleich) und geben diesem für seinen Eingang 2-Port z. B. einen Wert von -100. Der zweite Vergleich-Node nutzt folglich die Funktion >= (größer gleich) mit einem Wert von z. B. 100. Wenn wir nun die Eingang 1-Ports beider Vergleich-Nodes mit dem Position.X-Ausgang des Objekt-Nodes verbinden, erhalten wir immer dann ein positives Signal, wenn der Würfel auf der X-Achse die Position -100 unterschreitet oder die X-Position 100 überschreitet. Diese Signale sind für unseren FlipFlop-Node gedacht, den Sie nun aufrufen können. Wir benötigen daran in diesem Beispiel nur den An- und den Aus-Eingang. Der Ausgang an dem Vergleich, der die Überprüfung <= -100 vornimmt, kommt dabei an den An-Port. Die folgende Abbildung 2.47 macht dies auch mit farbig markierten Kommentar-Nodes noch einmal deutlich. Wenn Sie dieser Anordnung der Nodes folgen, wird der FlipFlop ein FALSE-Signal liefern solange der Würfel die X-Position -100 erreicht. Danach springt das Ausgang-Signal um auf TRUE und wechselt erst wieder dann zurück, wenn der Würfel eine X-Position >= 100 erreicht. Dies ist dann auch die Stelle, an der der Verteiler-Node ins Spiel kommt, dann mit den Boole-Signalen des FlipFlops allein lässt sich nicht sonderlich viel anfangen. Glücklicherweise ist es aber so, dass die Zustände TRUE und FALSE automatisch auch als die Zahlen 1 und 0 interpretiert werden. Dies können wir am Verteiler-Nutzen, der einen Schalter-Eingang zur Verfügung stellt. Dieser nimmt die dort eingeleitete Zahl und aktiviert den dazugehörenden Eingang. Voreingestellt sind dort bereits zwei Eingänge, die von uns frei mit Werten im Attribute-Manager belegt werden können. Ein Schalter-Wert von 0 aktiviert also den obersten der beiden Eingänge und leitet dessen Wert an den Ausgang weiter. Steht der Schalter auf dem Wert 1 ist der zweite Eingang von oben an der Reihe. Je nach Bedarf lassen sich sogar noch weitere Eingänge über die blaue Farbfläche des Nodes aufrufen. Entsprechend höhere Zahleneingängen sind dann am Schalter nötig, um auch diese zusätzlichen Eingänge anzusprechen. In unserem Fall reichen jedoch zwei Eingänge aus, da wir ja auch nur die beiden Schalterzustände 0 und 1 abfragen können.

Animation in Cinema 4D - Die komplette FlipFlop-Schaltung

Abbildung 2.47: Die komplette FlipFlop-Schaltung

Die Werte an den beiden Eingängen des Verteilers können wir jetzt nutzen, um darüber z. B. zwei verschiedene Schrittweiten vorzugeben, mit denen sich der Würfel entlang der X-Achse bewegen soll. Wichtig ist dabei nur dass der obere Eingang einen negativen Wert erhält und der untere einen positiven. Ich habe dort zum Testen erst einmal -10 und 10 eingetragen.

Diese Werte müssen jetzt nur noch zu der jeweils aktuellen Position des Würfels addiert werden, damit sich dessen Position von Bild zu Bild verändert. Dafür ist der Mathe-Node gedacht. An den oberen Eingang knüpfen Sie den Position.X-Ausgang des Würfels, an den unteren den Ausgang des Verteilers. Wie Sie der Abbildung 2.47 entnehmen können, habe ich dafür den Würfel erneut in die Schaltung gezogen und wieder Position.X als Ausgang aktiviert. Sie sehen daran, dass Objekte natürlich auch mehrfach in einer Schaltung auftauchen können. Zudem hilft uns dies dabei, die Schaltung übersichtlich zu halten und lange Verbindungen quer über die Schaltung zu vermeiden. Sie hätten aber ebenso gut auch den ersten Würfel-Node dafür verwenden können.

Am Ausgang des Mathe-Nodes liegt nun die korrigierte Position des Würfels vor und muss nur noch auf den Würfel zurückgeschrieben werden. Ziehen Sie dazu den Würfel erneut in die Schaltung und setzen Sie diesmal auf dessen Eingang-Seite den Port für die Position.X. Nach der Verbindung mit dem Ausgang des Mathe-Nodes lassen Sie die Animation laufen. Der Würfel sollte kontinuierlich zwischen den beiden definierten Grenzen hin und her laufen.

Experimentieren Sie ruhig auch etwas mit den Werten im Verteiler. Wie wäre es z. B. mit -10 am oberen und 5 am unteren Eingang, um zwei unterschiedliche Geschwindigkeiten für die beiden Laufrichtungen zu erhalten.

Über den Autor

Dieses Tutorial ist ein Auszug aus dem CINEMA 4D-Kompendium zur Animation von Arndt von Koenigsmarck. Das komplette C4D-Kompendium mit über 950 Seiten Know-how als Download (PDF) gibt es hier: CINEMA 4D-Kompendium – Die Animation.

Wir empfehlen:
Maxon BodyPaint 3D-Video-Training

Unsere Empfehlung für dich

Cinema 4D für Einsteiger – für R16/R17/R18

Cinema 4D für Einsteiger – für R16/R17/R18

Überschreite mit unserem neuen und sagenhaften Standardwerk für Cinema 4D die Grenzen der Wahrnehmung. Das Release 16 ist das beste Update, das Maxon je herausgebracht hat!

  • Neue Funktionen von R16, R17 und R18 im Detail erklärt
  • In über 15,5 Stunden Video-Training Cinema 4D von A bis Z ergründen
  • PLUS 850 PDF-Seiten und Arbeitsmaterialien
  • Maximales Kreativtraining: Nachbau des Covermotivs

Zum Training

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Folgende HTML-Elemente sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>