MoGraph: Das MoSpline-Objekt – Modus Turtle

Tutorials 14. November 2016 – 0 Kommentare

Dieser etwas lustig anmutende Modusname ist dem Zeichensystem zu verdanken, das nun benutzt werden kann. Dabei lässt sich eine Art Zeichenstift, Turtle genannt, über Kommandos steuern. Dies mag zuerst etwas umständlich wirken und ist sicherlich auch mit Lernaufwand verbunden, eröffnet jedoch ganz neue Welten, wie bereits das Umschalten in diesen Modus eindrucksvoll beweist. Das MoSpline zeichnet uns einen stilisierten Baum, der über Einstellungen auf der Werte-Dialogseite auch noch interaktiv gesteuert werden kann. Dazu gleich noch mehr.
Der Kern des Systems bleibt der Turtle-Dialogbereich, wo wir u. a. einen Startstring und Regeln für das Zeichnen vorgeben können. Dazu müssen wir aber erst einmal die Kommandos kennen, die uns hier zur Verfügung stehen.

Animation in Cinema 4D - Befehle zum Drehen der Turtle um ihre drei Achsen

Abbildung 5.207: Befehle zum Drehen der Turtle um ihre drei Achsen

Beginnen wir mit den grundsätzlichen Befehlen zum Verschieben unserer zeichnenden Schildkröte und zum Abbiegen nach Links oder Rechts. Das Kürzel F malt uns eine gerade Linie in Blickrichtung der Schildkröte. Diese blickt Anfangs immer in Z-Richtung des MoSpine-Objekts. Wie weit wir mit diesem F-Befehl kommen, können Sie über den Wert für die Standardlänge in der Werte-Kategorie einstellen. Dort finden Sie auch eine Standarddicke, die zum Zeichnen verwendet wird. Diese Dicke kommt erst dann zum Einsatz, wenn wir den MoSpline mit einem Sweep-Objekt verwenden um Geometrie zu erzeugen, oder aber wenn Sie die Anzeigemodi Doppellinie oder Volle Form in den Objekt-Einstellungen des MoSplines verwenden. Alternativ hierzu können aber auch konkrete Werte mit dem Befehl verbunden werden. Das sähe dann so aus: F(a,b,c), wobei a für Länge der Linie, b für die Dicke dieser Linie und c für die gewünschte Anzahl an Unterteilungen auf dieser Linie stehen.

Zum Abbiegen bzw. Drehen der Schildkröte können Sie die Zeichen + oder – verwenden. Auch diese können in der Schreibweise +(Winkel) bzw. –(Winkel) direkt mit Gradwinkeln benutzt werden. Das Pluszeichen dreht die Turtle im Uhrzeigersinn, das Minuszeichen gegen den Uhrzeigersinn. Verwenden Sie + und – ohne eine Winkelangabe dahinter, so wird der Standardwinkel aus den Werte-Einstellungen herangezogen. Neben den Drehungen um die Y-Achse der Turtle können Sie mit den Kürzeln & und ^ um die X-Achse, und mit den Kürzeln \ bzw. / um die Z-Asche drehen lassen. Auch hier lassen sich auf Wunsch konkrete Winkel direkt in einer Klammer dahinter angeben. Die Abbildung 5.207 fasst illustrativ noch einmal die verschiedenen Kürzel zum Drehen der Turtle zusammen.

Für noch mehr Kontrolle können Sie auch eigene Benutzerdaten definieren und deren Namen direkt als Variablen benutzen. So könnten Sie z. B. den Begriff H_Winkel als Benutzerdaten anlegen und dann schreiben F+(H_Winkel)F. Die Turtle fährt dann eine Standardlänge in Z-Richtung, biegt um Ihren H-Winkel nach rechts ab und fährt wieder eine Standardlänge nach vorne. Den Umgang mit Benutzerdaten haben wir bereits ausführlich im XPresso-Kapitel besprochen. Lesen Sie bitte dort bei Bedarf nach. Ebenfalls praktisch ist, dass auch die Parameter aus dem Werte-Bereich über Kürzel in die Befehle eingebracht werden können. So stehen _move z. B. für die Standardlänge und _rotate für den Standardwinkel. Schauen Sie mal in der nächsten Abbildung 5.208, was wir allein schon mit diesem Wissen anstellen können.

Animation in Cinema 4D - Zeichnen eines parametrischen Pfeils

Abbildung 5.208: Zeichnen eines parametrischen Pfeils

Wie Sie bereits in Abbildung 5.208 erkennen können, habe ich dort mit den uns bislang bekannten Befehlen einen Pfeil zeichnen lassen. Die Größe und Richtung dieses Pfeils kann über Standardlänge und Standardwinkel in den Werte-Einstellungen gesteuert werden. Diese Befehle habe ich dafür als Startstring verwendet:

-(90+_rotate)F(0.25*_move)+(90)F(1.5*_move)-(90)F((sin(45)-0.25)*_move)+(135)F+(90)F+(135)F((sin(45)-0.25)*_move)-(90)F(1.5*_move)+(90)F(0.25*_move)

Natürlich wirkt dies auf den ersten Blick kryptisch, aber Schritt für Schritt betrachtet ist es recht simpel. Mit –(90+_rotate) drehen wir uns zuerst um 90° nach rechts, korrigieren dies aber zugleich wieder durch die Auswertung des Standardwinkels. Danach spazieren wir um ein Viertel der Standardlänge in Blickrichtung nach vorn. Nun drehen wir uns um 90° nach links, spazieren um 150% der Standardlänge nach vorn, usw. usw.

Wie Sie sicher bemerkt haben, sind dies eigentlich immer die gleichen Befehle. Stellt sich also die Frage, wie solche Skripte vereinfacht werden können. In solchen Fällen können wir im Bereich Regeln Variablen definieren, so wie Sie es bereits z. B. aus C.O.F.F.E.E. gewohnt sind. So könnten wir z. B. dies als Regeln definieren:

A=F(0.25*_move)
B=F(1.5*_move)
C=F((sin(45)-0.25)*_move)

Nun könnten wir für den Startstring schreiben:
-(90+_rotate)A+(90)B-(90)C+(135)F+(90)F+(135)C-(90)B+(90)A

Ich hoffe, dieses kleine Beispiel macht Ihnen den Nutzen bereits deutlich. Hier hört der Funktionsumfang aber keineswegs auf, denn es können auch Variablen neu definiert und somit rekursive Skripte erstellt werden. Rekursiv bedeutet, dass die gleiche Abfolge an Befehlen mehrfach durchlaufen werden kann. Auf diese Weise können bereits einfache Befehlsfolgen sehr komplexe Strukturen malen. Zudem müssen wir nicht unbedingt in einem Strich durchzeichnen lassen. Wenn Befehle in eckigen Klammer stehen, so wird dafür eine neue Turtle erzeugt.

Nach diesen Befehlen wird dann dort weiter gemalt, wo die Turtle vor den eckigen Klammern aufgehört hatte. Dies eignet sich hervorragend zum Zeichnen von Zweigen und Ästen z. B. an Pflanzen.

Lassen Sie uns einmal dies hier probieren:

A=FT[+(70-60*_index/_total)B][-(70-60*_index/_total)B]A
B=F&B

Tragen Sie diese Zeile als Regeln ein und verwenden Sie schlicht den Buchstaben A als Startstring. Wenn Sie nun noch mit den Werten für Wachstum, Standardwinkel und Tropismus arbeiten, können Sie mit wenigen Handgriffen Strukturen erzeugen, die an ein Palmblatt oder den Ast einer Tanne erinnern. Wie ist die möglich? Schauen wir uns die Zeilen genauer an.

Der Startstring sorgt dafür, dass am Anfang unsere Variable A ein Mal ausgeführt wird. Dort verschiebt der Befehl F zuerst die Turtle um eine Standardlänge nach vorn. Der Buchstabe T steht für Tropismus und ist direkt mit dem gleichnamigen Parameter der Werte-Seite verbunden. Damit wird eine Art Erdanziehung simuliert, die z. B. einen Ast nach unten zieht. Unsere gezeichnete Linie wird sich also dadurch automatisch nach unten krümmen, wenn Tropismus erhöht wird. Es folgen dann eckige Klammern. Das was jeweils in einem Klammerpaar steht, wird durch eine separate Turtle gezeichnet. Die Befehle in der ersten und der zweiten eckigen Klammer sind identisch, nur das Vorzeichen ist negiert. Diese Klammern zeichnen uns die seitlichen Äste, links und rechts am Zweig. Über +(70) wird die Turtle zuerst im Uhrzeigersinn um ihre Y-Achse gedreht. Von diesem Winkel ziehen wir jedoch 60*_index/_total wieder ab. Diese beiden Begriffe haben mit dem Wachstum zu tun, das Sie über Wachstum in den Werte-Einstellungen kontrollieren. Je größer diese Wert ist, desto länger wird unser Ast und desto mehr Zweige sind an seinen Seiten zu finden. Im Prinzip legt dieser Wert nur fest, wie oft der Befehl A ausgeführt werden soll. Der Begriff _index steht für die Nummer des gerade ausgeführten Befehls und _total steht für die Gesamtzahl aller Befehle. Da die Gesamtzahl der Befehle direkt mit dem Wachstum zusammenhängt, erhalten wir über diesen Ausdruck eine Stellschraube, um den seitlichen Winkel der Äste zum Ende des Asts immer kleiner werden zu lassen. Der Ausdruck _index/_total ergibt also für die Zweige am Ende des Asts höhere Werte als für die zuerst erzeugten Äste an der Wurzel des Asts.

Nach dieser Drehung der neu erstellen Turtle folgt noch der Befehl B, hinter dem F&B als Befehlsfolge steckt. F& kennen wir bereits. Die Turtle marschiert nach vorn und dreht sich anschließend um den Standardwinkel nach unten. Das letzte Zeichen ist wieder der Buchstabe B. Dies ist das Geheimnis der Rekursion, denn über diesen Buchstaben ruft sich praktisch diese Befehlsfolge F& immer wieder neu auf. Wen wir also F&F&F&F& usw. immer weiter wiederholen, ergibt sich dadurch eine Linie, die sich abschnittweise immer weiter krümmt. Theoretisch würde dieser Befehl somit nie zum Ende kommen. Hier greift jedoch der Wachstum-Wert, denn dieser regelt, wie oft solche Befehle wiederholt werden. Somit ist die erste eckige Klammer fertig definiert und somit ein nach rechts abzweigender Ast definiert. Es folgt eine zweite eckige Klammer mit gleichem Inhalt. Diesmal wird anfangs jedoch der Befehl – verwendet, die Turtle also auf die andere Seite des Asts gedreht. Am Schluss folgt dann auch hier erneut der Buchstabe A. Die gesamte Zeile wird also ebenfalls durch die Erhöhung des Wachstum-Werts immer wieder aufgerufen und erzeugt somit ein Zweig-Paar nach dem anderen. Schon erstaunlich, was mit so ein paar Befehlen schon möglich ist, oder? Die Abbildung 5.209 zeigt Ihnen Impressionen unseres aktuellen MoSplines mit dem beschriebenen Skript.

Animation in Cinema 4D - Mögliche Formen des MoSplines mit dem beschriebenen Skript

Abbildung 5.209: Mögliche Formen des MoSplines mit dem beschriebenen Skript

Um einen Überblick darüber zu bekommen, wie die komplette Formel tatsächlich aussieht, können Sie jederzeit die Schaltfläche für Ergebniszeichenfolge zur Konsole unter dem Regeln-Feld anklicken. In Abhängigkeit des eingestellten Wachstum-Werts können Sie dann in der Konsole eine Befehlskette finden, bei der alle Rekursionen aufgelöst wurden. Dies kann natürlich mit hohen Wachstum-Werten schnell ein ganz schöner Wust werden. Die Konsole finden Sie im Skript-Menü von Cinema 4D. Die folgende Abbildung 5.210 stellt diese Ausgabemöglichkeit dar.

Animation in Cinema 4D - Ausgabe der Ergebniszeichenfolge in der Konsole

Abbildung 5.210: Ausgabe der Ergebniszeichenfolge in der Konsole

Inkrementale Veränderungen

Momentan haben wir bereits einige Stellschrauben in unseren Regeln untergebracht, um schrittweise Veränderungen an den Strukturen zu zeigen. So liegen die seitlichen Zweige z. B. an der Spitze des Asts stärker an als an der Astwurzel. Derartige Veränderungen lassen sich aber auch auf anderem Wege mit dem Wachstum-Wert verknüpfen. Die einfachsten Optionen sind dabei das Multiplizieren bzw. das Dividieren mit jeder Rekursion. Auf diese Weise könnten wir z. B. die Strichlänge mit der Wachstumsphase steigern oder z. B. Winkel mit dem Wachstum des Zweigs verringern. Wie Sie sicher wissen, könnten wir alle diese Manipulationen allein durch Multiplikationen erzeugen. Eine Division z. B. durch 2 entspricht schließlich einer Multiplikation mit 0.5. Dennoch mag es praktisch sein, für das Multiplizieren und das Dividieren separate Befehle bzw. Kürzel zu haben. Wir schauen uns diese Befehle in einer Auflistung kurz an und werden dann unserer Ast-Generierung damit etwas tunen.

Befehle für die Multiplikation
“(Wert) Multipliziert eine Verschiebung mit dem Wert pro Wachstumsgeneration
;(Wert) Multipliziert eine Drehung mit dem Wert pro Wachstumsgeneration
!(Wert) Multipliziert eine Skalierung mit dem Wert pro Wachstumsgeneration

Befehle für die Division
_(Wert) Dividiert eine Verschiebung durch den Wert pro Wachstumsgeneration
@(Wert) Dividiert eine Drehung durch den Wert pro Wachstumsgeneration
?(Wert) Dividiert eine Skalierung durch den Wert pro Wachstumsgeneration

Wenn wir also möchten, dass die zuerst gezeichneten Zweige am Ende nicht so lang werden, fügen wir einfach einen Multiplikator hinzu, der geringer als 1 ist. Das könnte dann so aussehen:
B=“(0.6)F&B

Hiermit reduzieren wir z. B. die Verlängerung der Äste auf 60% pro Wachstumsgeneration. Wenn jetzt noch die Biegung der Zweige nach unten mit der Länge der Äste ansteigen soll, ergänzen wir dies:
B=“(0.6)F;(1.1))&B

Damit wird dann die Drehung am Ende der Zweige jeweils um 10% pro Wachstum-Wert stärker, was dann sogar zum Einrollen der längeren Zweige führen kann, wenn man es mit dem Standardwinkel übertreibt. Die Abbildung 5.211 zeigt Ihnen Eindrücke der zuletzt vorgenommenen Veränderungen.

Animation in Cinema 4D - Inkrementales Anpassen von Rotationen und Längen

Abbildung 5.211: Inkrementales Anpassen von Rotationen und Längen

Wie Sie vielleicht schon bemerkt haben, ist das Wachstum keineswegs auf den Wert 10 beschränkt. Sie können über direkte Werteingaben auch weit höhere Vorgaben machen. Entsprechend wird sich unser Ast oder Palmblatt immer weiter ausbreiten. Um nun diese Animation noch etwas ansprechender zu gestalten, verlangsamen wir das Wachstum der seitlichen Zweige.
Wir geben dazu einfach eine Bedingung vor die zuerst erfüllt werden muss, bevor die seitlichen Zweige gezeichnet werden. Das könnte dann so aussehen:

B:(_growth>8)=“(0.6)F;(1.1))&B

Hier hat sich also die Schreibweise für die Variable etwas geändert. Durch den Doppelpunkt muss erst die Bedingung in der runden Klammer erfüllt werden, damit B die Zeichenkette nach dem Gleichheitszeichen erhält. Hier wurde z. B. festgelegt, dass zuerst ein Wachstum-Wert von über 8 erreicht werden muss, bis die seitlichen Zweige sprießen dürfen. Dies verändert natürlich auch die Gesamtform etwas. Das Blatt bzw. der Ast bleibt dadurch am Ansatz etwas schmaler.

Zwei weitere Dinge möchte ich noch ergänzen. Ich würde gern den Tropismus über die Länge, also mit zunehmendem Wachstum, immer stärker werden lassen und der Ast soll noch eine Verlängerung erhalten, bevor die seitlichen Zweige ansetzen. Beides ist wieder schnell erledigt. Hier der neue Startstring, der durch die Ergänzung von F(3) die dreifache Standardlänge vorweg zeichnet, bevor mit dem Buchstaben A die Regeln greifen:

Startstring: F(3)A
Regeln: A=FT(1.5)[+(70-60*_index/_total)B][-(70-60*_index/_total)B]A

Am Anfang der Regel für A erkennen Sie, dass ich T durch T(1.5) ersetzt habe. Damit wird der Tropismus, also praktisch die Erdanziehung, die auf das Blatt oder den Ast wirkt, mit jedem Iterationsschritt verstärkt. Probieren Sie z. B. einfach mal T(5) aus, um die Wirkung noch eindrucksvoller begutachten zu können. Der Ast krümmt sich dann immer früher in Richtung Boden, so wie es in der Bildfolge von Abbildung 5.212 zu sehen ist.

Animation in Cinema 4D - Wirkung des Tropismus

Abbildung 5.212: Wirkung des Tropismus

Immer wenn es um Vegetation geht, für die Turtle-Graphics oft eingesetzt werden, kann natürlich auch etwas Zufall nicht schaden. Schauen wir uns also an, wie sich dieser mit einbauen lässt.

Animation in Cinema 4D - Zufälligkeiten im Blattaufbau

Abbildung 5.213: Zufälligkeiten im Blattaufbau

Zufall

Ich könnte mir z. B. nett vorstellen, wenn die Enden der längeren Zweige nicht ganz so ordentlich und uniform ausgerichtet wären. Eine Möglichkeit hierfür wäre, die Rotation der Turtle um ihre Längsachse zufällig zu gestalten. Bislang nutzen wir ja eigentlich nur Heading- und Pitch-Rotationen. Dies ist schnell erledigt, denn es gibt dafür einen eigenen Befehl. So könnten wir z. B. schreiben:
B:(_growth>8)=“(0.6)F;(1.1)&/(_random*Verwirbeln*_x)TB

Der Befehl _random erzeugt pro neuer Wachstum-Stufe eine neue Zufallszahl zwischen -1.0 und +1.0. Um die äußeren Enden und Spitzen der seitlichen Zweige stärker zu beeinflussen als die direkt am Ast abzweigenden Teile, multipliziere ich diese Zufallszahl mit _x. Damit ist die lokale X-Position der Turtle im Achsensystem des MoSpline gemeint. Über die Kürzel _y oder _z kämen Sie entsprechend an die anderen beiden Koordinaten heran. Schließlich multipliziere ich noch mit dem Begriff Verwirbeln. Dies ist ein Fließkommawert, den ich mir als Benutzerdatenwert für den MoSpline selbst angelegt habe. Auf diese Weise können Sie also beliebig viele eigene Parameter ebenfalls in das Skript mit einbringen. Bitte lesen Sie bei Bedarf im Kapitel zu XPresso nach, wie solche Benutzerdaten im Attribute-Manager angelegt und verwaltet werden. Mit scharfem Blick werden Sie zudem erkennen, dass ich hinten an die Regel für B noch ein Tropismus T angehängt habe, um das Herunterhängen der Zweige mit ansteigendem Tropismus noch zu verstärken.

Eine weitere Option in Sachen Zufall finden Sie direkt in den Werte-Einstellungen. Dort sind ein Regler für Zufall und ein Startwert zu finden. Diese funktionieren bereits ohne weitere Veränderungen an unseren Befehlen. Der Zufall verändert automatisch alle Längen und Winkel des MoSplines. Eine Veränderung des Startwerts führt zu anderen Zufallslängen und -Winkeln im MoSpline. Diese Zufälligkeit steht Ihnen also immer zur Verfügung, auch ohne die Nutzung des _random-Befehls in den Regeln.

Weitere Werte-Parameter

Die untere Hälfte der Werte-Einstellungen enthält noch einige Einstellungen, die wir bislang noch nicht beschrieben hatten. Das möchte ich nun nachholen. Sie finden dort drei Einstellungen für Längenmultiplikator, Winkelmultiplikator und Dickenmultiplikator. Diese spielen mit dem Wachstum zusammen und sorgen dann z. B. dafür, dass sich Längenmultiplikationen automatisch reduzieren. Wir hatten dies bereits durch individuelle Multiplikationen, wie z. B. „(0.6)F direkt in die Regeln geschrieben, was den Vorteil hat, dass wir z. B. F-Verschiebungen an unterschiedlichen Stellen unterschiedlich stark gewichten können. Die Parameter für Längenmultiplikator, Winkelmultiplikator und Dickenmultiplikator greifen daher auch nur dann, wenn Symbole, wie „, ; oder ! alleine ohne Multiplikationswert benutzt werden. Wenn Sie also z. B. ein neues MoSpline erstellen und dort im Turtle-Modus folgendes benutzen, sollte sich der Effekt gut darstellen lassen:

Startstring: ^(90)FA
Regeln: A=;+“FA

Ein mögliches Ergebnis ist in Abbildung 5.214 zu sehen. Der Startstring rotiert zuerst die Turtle um deren Pitch-Achse nach oben und zeichnet dann eine Linie mit der Standardlänge. Danach wird A aufgerufen, das eine multiplizierte Rotation im Uhrzeigersinn um die Heading-Achse der Turtle ausführt. Danach folgt eine multiplizierte Vorwärtsbewegung. Diese beiden Multiplikationen können wir nun über Längenmultiplikator und Winkelmultiplikator beeinflussen, um z. B. sich am Ende einrollende Strukturen zu modellieren. Da sich diese Multiplikatoren auch animieren lassen, können wir nahtlos zwischen verschiedenen Krümmungen und Längen dieses Pflänzchens wechseln.

Animation in Cinema 4D - Veränderungen von Längen und Winkeln mit zunehmendem Wachstum

Abbildung 5.214: Veränderungen von Längen und Winkeln mit zunehmendem Wachstum

Unter diesen Reglern finden wir noch drei Optionen für Wachstum Winkel, Wachstum Dicke und Wachstum Länge. Ihnen ist vielleicht schon aufgefallen, dass unsere Pflanzen beim Erhöhen des Wachstum-Werts fließend wachsen, also nicht erst beim Erreichen des nächsten vollen Werts ihre nächste Wachstumsgröße erreichen. Dies ist diesen Optionen zu verdanken. Werden sie ausgeschaltet, springt die Pflanze immer erst beim Erreichen der nächsten vollen Zahl in den dann rechnerisch definierten Zustand.

Polygone erzeugen

Unser Objekt nennt sich zwar MoSpline, kann jedoch auch Polygone erzeugen. Damit dies von der Generierung der Splines auch getrennt werden kann, lassen sich auf der Objekt-Einstellungsseite nicht nur Spline-Objekte für Zielspline, Ziel Rail X und Ziel Rail Y zuweisen, sondern auch ein Zielpolygon-Objekt. Wird hatten dieses Prinzip bereits für den Modus Einfach ausführlich besprochen. Neu ist daher hier nur das Feld für Zielpolygon, in das Sie ein leeres Polygon-Objekt legen können. Sie finden so ein Objekt unter Erzeugen > Objekt > Leeres Polygon. Dieser Kunstgriff erleichtert es uns, den reinen Spline-Anteil des MoSplines in einen Zielspline zu kopieren, dort eventuell noch den Typ und die Zwischenpunkte anzupassen und den Zielspline dann mit einem Sweep-Objekt zu verwenden, wobei die Polygone des MoSplines gleichzeitig in einem separaten Zielpolygon-Objekt landen. Ob das MoSpline-Objekt überhaupt Polygone erzeugt, hängt von uns selbst ab, denn auch dafür gibt es eigene Befehle, die wir in unsere Regeln einbauen können. Keine Angst, im Prinzip ist da gar nicht so viel Neues zu lernen, denn die bekannten Befehle zum Drehen und Verschieben der Turtle bleiben identisch. Neu ist die Verwendung von geschweiften Klammern, denn diese begrenzen jeweils die Befehle, mit denen die Eckpunkte eines Polygons beschrieben werden. Dabei verwenden wir nicht F für das Vorwärtskommen sondern f. Dadurch wird kein Splinesegment hinter der bewegten Turtle gezeichnet, sondern durch ein Eckpunkt angefahren. Der Befehl kann auch mit einem festen Wert kombiniert werden, wie z. B. f(10), um eine bestimmte Distanz zurückzulegen. Ansonsten wird auch hier die Standardlänge verwendet. Ein einfacher Punkt . setzt dann an die aktuelle Position der Turtle einen Eckpunkt für ein Polygon. Wir brauchen uns dabei keine Gedanken über das Schließen von Flächen mit mehr als vier Eckpunkten zu machen. Legen Sie einfach die gewünschten Eckpunkte fest. Der MoSpline schließt beim Erreichen der geschlossenen geschweiften Klammer diese Fläche automatisch mit der dann benötigten Anzahl an Polygonen.

Der Startstring {.f.+(90)f.+(90)f.} erzeugt uns daher bereits ein Quadrat in der XZ-Ebene, wobei der erste Punkt an der Position des MoSpline-Objekts liegt. Auf ähnliche Art und Weise können wir nun auch Blätter erzeugen, die den bislang erzeugten Spline-Zweigen folgen. Ich benutze dazu folgende neue Regeln:
B:(_growth>8)=C“(0.6)F;(1.1)&/(_random*Verwirbeln*_x)TB
C=[{.(90)^(30)“(100.0/(Faktor*_z))f.+(90)“(0.6)f.+(90) „(100.0/(Faktor*_z))f.}][{.+(90)^(30)“(100.0/(Faktor*_z))f.
-(90)“(0.6)f. (90)“(100.0/(Faktor*_z))f.}]

Sieht ziemlich wild aus, ich weiß, im Prinzip sind es aber jeweils nur vier Punkte links und rechts von jedem komplett gezeichneten Zweig-Segment die über die Variable C erstellt werden. Diese wird einfach vorne in Variable B mit aufgerufen. Das Kürzel ^(30) ziemlich am Anfang von C dreht die Turtle mit der Nase noch etwas nach oben, damit die beiden Polygone am Ende eine V-Form bilden, ähnlich der Blattform einer Palme. Der Teil „(100.0/(Faktor*_z))f sorgt dafür, dass die Blätter immer schlanker werden, je weiter Sie auch der Z-Achse von der Position des MoSpline entfernt sind. Der Faktor ist dabei wieder ein neuer Benutzerdatenwert. den ich mir selbst am MoSpline angelegt habe, um von außen schnell eingreifen zu können. Sie müssen selbst nur dafür sorgen, dass dieser Wert nicht Null wird, denn eine Division durch Null ist bekanntlich mathematisch nicht gut zu handhaben.

Die zusätzlichen eckigen Klammern um die geschweiften Klammern sorgen dafür, dass die Turtle am Ende der Erzeugung eines Polygons wieder an den Startpunkt zurückkehrt. Wir können dadurch direkt nach der Erzeugung des vierten Punkts mit dem Setzen des ersten Punkts am zweiten Polygon fortfahren.

Gern hätte ich noch mehr Kontrollen über den Verlauf der Blattformen eingebracht, aber da zeigen sich dann schnell die Grenzen dieses Systems. Wir haben keine Möglichkeiten, eigene Laufvariablen, z. B. für eigene Zählungen von Segmenten oder Punktnummern durchzuführen. Aus dem Grund ist hier die Verwendung von unserem Verwirbeln und von und Zufall nicht anzuraten. Die Blätter verlieren dadurch ihren Anschluss zu benachbarten Polygonen. In einigen Fällen lassen sich diese Lücken aber z. B. über das Objekt verbinden-Objekt mit einer großen Toleranz überbrücken. Die Abbildung 5.215 zeigt ein Beispiel dazu. Der MoSpline wird dort zuerst durch ein Objekt verbinden-Objekt optimiert, erhält dann über eine Kleidungs-Oberfläche (zu finden unter Simulieren > Kleidung) eine Dicke und wird anschließend über ein Subdivision Surface-Objekt noch zusätzlich geglättet. Der Spline-Anteil des MoSplines wird zu einem Zielspline kopiert, der dann traditionell mit einem Sweep-Objekt die Äste und Zweige darstellt.

Animation in Cinema 4D - Geometrie-Erzeugung mittels eines MoSpline-Objekt

Abbildung 5.215: Geometrie-Erzeugung mittels eines MoSpline-Objekt

Letztendlich ist dann oft die Erzeugung von Formen z. B. über einen Python-Generator oder auch ein MoGraph Klon-Objekt komfortabler. Auch in diesem Zusammenspiel bietet das MoSpline nämlich noch Funktionen an, die ich nun abschließend zu diesem Thema noch beschreiben möchte.

Das MoSpline und die Klon-Erzeugung

Neben der direkten Generierung von Polygonen mit einem MoSpline lassen sich auch Schlüsselbefehle verwenden, um an bestimmten Stellen des MoSplines MoGraph-Klone platzieren zu lassen. Abschließend zu dem Themenkomplex MoSpline möchte ich auch diese Option noch kurz besprechen. Im Prinzip ist es recht simpel, denn Ihnen stehen die vier Buchstaben I, J, K und L zur Verfügung, um Stellen in Ihrer MoSpline-Formel zu markieren. Diese vier Buchstaben lassen sich dann über ein MoGraph Klon-Objekt ansteuern.
Dafür müssen Sie ein Klon-Objekt im Modus Objekt verwenden, das Klone auf dem MoSpline erzeugt. In diesem Modus finden Sie in den Objekt-Einstellungen des Klon-Objekts ein Verteilung-Menü, über das Sie Gruppe 1, Gruppe 2, Gruppe 3 oder Gruppe 4 auswählen können. Diese Gruppen nehmen direkten Bezug auf die schon genannten Buchstaben I, J, K und L. Probieren wir dies einmal aus. Erstellen Sie dazu ein neues Klon-Objekt und ordnen Sie diesem z. B. einen Würfel unter. Wählen Sie den Modus Objekt am Klon-Objekt und weisen Sie unseren MoSpline als Objekt im Klon-Objekt zu. Über das Verteilung-Menü wählen Sie Gruppe 1. Damit werden die Würfel nur dort dupliziert und platziert, wo im MoSpline der Buchstabe I auftaucht. Wir müssen unsere Formeln im MoSpline also etwas ergänzen. probieren Sie es einmal hiermit:

Startstring: IFIFIFIA

Sie erkennen hier, dass ich den ursprünglichen Befehl F(3) umgeschrieben habe zu FFF. Damit erhalten wir Gelegenheit, nach jedem gezeichneten Teilstück am Stiel des virtuellen Blatts mit dem Kürzel I eine Würfel-Kopie zu platzieren. Sie sehen diesen Effekt links in Abbildung 5.216 beim Buchstaben I. Schauen wir nun, wie wir noch andere Klone in unseren MoSpline integrieren können:

A=FJT(4.5)[+(70.0-60.0*_index/_total)BF(0,50,0)K][-(70.0-60.0*_index/_total)BF(0,50,0)K]A
B:(_growth>8)=“(0.6)F;(1.1)&/(_random*Verwirbeln*_x)TL(1,0.7,0.7,0.7)B

Wie Sie erkennen können, habe ich die Variable C, die für die Erzeugung von Polygonen zuständig war, wieder aus den Regeln entfernt, damit wir uns voll auf die Platzierung von Klonen konzentrieren können. Eine Kombination ist jedoch ebenfalls kein Problem. Wie Sie an der Variable A erkennen können, habe ich dort nach dem ersten Verschiebe-F das Kürzel J platziert. Damit werden die Klone der Gruppe 2 entlang der Symmetrieachse des Blatts erstellt. Wir benötigen dafür also ein neues Klon-Objekt, dem Sie z. B. zwei verschiedene Objekte unterordnen können. Der Modus muss wieder auf Objekt eingestellt und das MoSpline als Objekt zugewiesen werden. Für Verteilung benutzen Sie folglich Gruppe 2. Die Objekte unter diesem Klon-Objekt werden dadurch immer abwechselnd platziert.

Animation in Cinema 4D - Platzierung von Klonen entlang eines MoSplines

Abbildung 5.216: Platzierung von Klonen entlang eines MoSplines

Ist eines dieser Objekte z. B. ein Null-Objekt können Sie also auch Bereiche im MoSpline überspringen. Dies ist in Abbildung 5.216 beim Buchstaben J zu erkennen. Später, in den eckigen Klammern der Variable A habe ich dies ergänzt: F(0,50,0)K

Dazu müssen Sie wissen, dass die Skalierung der Klone an den Buchstaben I, J, K und L der Zeichengröße des MoSplines folgt. Sie können also die Klone z. B. über die Standarddicke aus den Werte-Einstellungen des MoSplines steuern. Möchten Sie eine bestimmte Größe vorgeben, so können Sie einen leeren F-Befehl vorschalten, so wie hier geschehen. Der F-Befehl lässt sich nämlich noch um weitere Parameter ergänzen im Format F(Verschiebelänge, Skalierung, Unterteilungen). Die von mir hier verwendeten Begriffe Verschiebelänge, Skalierung und Unterteilungen ersetzen Sie dann natürlich durch die gewünschten Zahlenwerte. Mit F(0,50,0) bleibt unsere Turtle also praktisch stehen, wird jedoch auf die neue Dicke 50 eingestellt. Die nachfolgenden Klone, die mit dem Kürzel K der Gruppe 3 zugeordnet sind, erhalten also diese feste Skalierung. Sie benötigen entsprechend ein neues Klon-Objekt, dem die Gruppe 3 für die Verteilung zugewiesen wird. Diese Klone werden dann ausschließlich an den Spitzen der seitlichen Zweige platziert, da das K jeweils nach dem Aufruf der Variable B in den eckigen Klammern steht.

Schließlich ergänze ich noch L(1,0.7,0.7,0.7)am Ende der Beschreibung der Variablen B. Sie erkennen an dieser Schreibweise, dass auch die Buchstaben I, J, K und L noch mit zusätzlichen Werten verknüpft werden können. Die vier optionalen Zahlen stehen der Reihe nach für die Indexnummer des Objekts unter dem Klon-Objekt und für die drei RGB-Farbanteile für die Färbung der Klone. Der Befehl L(1,0.7,0.7,0.7)bedeutet also, platziere hier das erste Objekt unter dem Klon-Objekt der Gruppe 4 und färbe dies Grau mit einer Helligkeit von 70%. Die Platzierung dieser L-Klone erfolgt an jedem Teilstück der seitlichen Zweige. Sie können den Effekt bereits in Abbildung 5.216 beobachten, wo Röhre-Grundobjekte an diesen Stellen platziert wurden.

Damit haben Sie bereits einen guten Einblick in die Möglichkeiten des MoSplines erhalten. Das Eingabefeld für Kontext ignorieren in den Turtle-Einstellungen habe ich übrigens nicht vergessen, es scheint nur schlicht keine Funktion zu haben, bzw. nicht wie gedacht zu funktionieren. Ich gehe daher davon aus, dass Sie es vorerst ignorieren können, bis ein Bugfix verfügbar ist.

Ü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>