Cinema 4d

[Xpresso] Gabelstapler - Teil 1 (Cinema 4d Tutorial)

Tutorial erstellt von Andreas, letzte Änderung am 29.10.2007



Download: Das Mesh des Gabelstapler's kann kostenlos in der Downloadarea herunter geladen werden.
Hallo und herzlich willkommen zum umfangreichen Tutorial "XPresso- Steuerungen". Diesmal handelt es sich um eine Gemeinschaftsarbeit von drei Mitgliedern unserer Site. Besonderer Dank geht an dieser Stelle an Mark von tutorials.de. Er war so lieb, hat unseren ersten Versuch stark überarbeitet und unsere Fehlerchen wieder "geradegebogen". Neben meinen bescheidenen Beiträgen hat unser Mitglied DrHonigtau den "Mammut"- Teil des Rad-Setups übernommen und unser Site- Admin Manuel wird sich um die gesamte Texturierung des Meshes kümmern. Also unsere erste "internationale" Zusammenarbeit. Wie immer haben wir zunächst ein "Leckerlie" vorbereitet. Dabei handelt es sich um den downloadbaren Gabelstapler, der uns als Ausgangsobjekt dienen wird. ...Das Geheimnis ist gelüftet...*g* das *tüüüt* ist also ein Gabelstapler... Wir werden im ersten Teil dafür sorgen, dass der sog. "Mastbaum" voll animiermiert werden kann, uns im zweiten Teil dem Fahrwerk widmen und schließlich im letzten Teil die ersten kleinen Animationen erstellen. Also have fun!



...Zunächst für viele etwas Abschreckendes. Genau genommen muss XPresso als Programmiersprache definiert werden, die Abhängigkeiten von Objekteigenschaften festlegt. Dies können Eigenschaften aller Art sein, nicht nur Positionen und Winkel, z.B. auch Materialeigenschaften, parametrische Eigenschaften von Grundobjekten und vieles andere. Zudem basiert das Modul "Thinking Particles" auf dem XPresso- Editor. Prinzipiell wäre ja alles per "Hand" machbar (mehr oder weniger mühevoll...) Allerdings wäre es wie hier müßig, die Bewegung der Räder richtig zu keyen oder den Mastbaum zu kippen und auszufahren. Eine "Fernbedienung" müsste her...
Die Hinterräder, welche ja auch das Gefährt lenken, folgen bestimmten physikalischen Gesetzmäßigkeiten, lenkt der Gabelstapler, ändern sich Winkel etc. Es wäre also "nett", wenn wir dem Gabelstapler sagen könnten: "fahre hier lang und lass alles zugehörigen Teile sich automatisch mitbewegen". Wenn Objekt A (z.B. das linke Hinterrad) lenkt, soll sich der Winkel des Objektes B (das rechte Hinterrad) äquivalent verhalten, jedoch das Objekt C (die Spurstange) an den Rädern "befestigt" sein, sie sorgt ja für die Lenkung. Ganz supi wäre es, dass sich Objekt D (das Lenkrad) entsprechend "mitbewegt". Um diese "Abhängigkeiten" der vier Objekte herzustellen, bedarf es XPresso zur Automatisierung.

Die früheren Versionen von Cinema beschränkten sich auf das C- basierende COFFEE- Script. Es folgte also eine -mehr oder weniger- lange Eingabe eines Scriptes. Das COFFEE- Script ist aber keinesweges dem XPresso gewichen, im Gegenteil, es ist möglich, nur COFFEE oder beides kombiniert zu nutzen. XPresso arbeitet mit Nodes, es wird nie für jede erdenkliche Möglichkeit ein Node geben, das wäre ein bisserl viel verlangt. COFFEE und XPresso ist also gemein, dass es sich um Programmiersprachen handelt. Wer also Kenntnisse in der Programmierung hat, dem würde XPresso bedeutend leichter fallen. Auch ist es derzeit nicht möglich, alle erdenklichen Abhängigkeiten per XPresso zu steuern, so dass man auf das Programmieren in COFFEE angewiesen wäre. Da aber unser lieber Hersteller auch an die Leute dachte, die in C, C+, C++ eben weniger oder nicht bewandert sind, entstand diese wunderbare Möglichkeit, sich wenigstens einmal als "Mathematiker" zu bezeichnen *g*...

Hier setzte also der Erfindergeist von MAXON ein: Es wäre doch toll, dem Anwender eine "grafische Programmiersprache" in die Hand zu geben: Ziehe das Objekt einfach in einen Editor und verschalte es dort duch "Verlegen von Leitungen", ohne sich Gedanken über die im Hintergrund laufenden mathematischen Zusammenhänge machen zu müssen. Der User schreibt keine einzige Zeile Programmcode, vielmehr arbeitet er in einem grafischen Editor. Klingt sehr gut, macht es auch im wesentlichen, allerdings kommt man um mathematische und physikalische Verständnisfragen nicht umhin. Es gibt Grundsätze, die die Form betreffen (wie wird ein Node festgelegt etc), aber für das eigentliche "Verschalten" gäbe es mehrere Möglichkeiten, es wird also hier nicht der, sondern ein Weg beschrieben...





Um ein Objekt per XPresso steuern zu können, gehen wir wie folgt vor:
1. Das Objekt wird im Objekt- Manager selektiert
2. Es erhält ein XPresso- Tag über Datei- Cinema 4D- Tags- XPresso
3. Das XPresso- Symbol erscheint neben dem Objekt. Per Doppelklick auf das XPresso- Symbol öffnet sich der XPresso- Node- Editor.
4. Per Drag´n`Drop wird das Objekt in den Editor gezogen.
5. In dem erscheinenden Kästchen ist links oben ein blaues und rechts ein rotes Viereck. Hier wird jeweils duch Linksklick der objektabhängige Eingangsport (blau) und der Ausgangsport (rot) 6. geöffnet. Nun können jeweils die benötigten Nodes festgelegt werden. Die eigentlichen Nodes sind die rot/blauen Kügelchen, die erscheinen. Diese werden später durch "Anklicken und Ziehen" per Mouse verbunden. Die Nodes (Knoten) sind sozusagen unsere Verbindungsstellen. Im obigen Beispiel liegt am Eingangsport die "Rundung" des Zylinders und am Ausgangsport der "Radius" an. Falls ihr versehentlich einen falschen Port wählt, kann per Rechtsklick auf dem Node im erscheinenden Kontext-Menü dieser wieder entfernt werden. Näheres würde mal wieder den Rahmen sprengen...

Wenn geplant ist, das Mesh per XPresso zu einem späteren Zeitpunkt animieren zu wollen, sind zwei Dinge beim Modellieren unerlässlich:

1.
Die Objekte des Meshes, die verschalten werden sollen, müssen einzeln vorliegen. Entweder wird es von vornherein solo- gemoddelt oder aber über Funktionen, wie etwa Ablösen, Abtrennen etc. separiert.

2.
Die Objekt- Achse muß entsprechend angeordnet werden. Typisches Beispiel: Wir haben eine Spline erstellt, die nicht im Koordinaten- Ursprung (0,0,0) liegt. Wir wollen es per Extrude-Nurbs visualisieren. Also rufen wir es auf und ordnen die Spline unter. Alles bestens, allerdings liegt das vorher aufgerufene Extrude- Nurbs immer im Koordinaten- Ursprung, wenn nun der Text verschoben/ animiert werden soll, liegt die Objekt- Achse nicht am Text, sondern am Extrude- Nurbs an. Generell wäre es also sinnvoll, bei zusammengehörenden Objekten vor der Herstellung der Hierarchie die Objekt- Achsen an gleiche Stelle zu verbringen, z.B. mittels der Funktion Übernehmen (in unserem Falle wird das Extrude-N. aufgerufen -Funktion- Übernehmen und die Text-Spline per Drag`n`Drop in das Eingabefeld gezogen. Dann erst wird die Text- Spline dem Extrude- N. untergeordnet). Schließlich besteht die Möglichkeit, die Objekt- Achse im gleichnamigen Modus zu bearbeiten (verschieben). Dies gilt besonders für "Drehpunkte". Wenn wir wie beim Gabelstapler den Mastbaum modellieren, liegt der Drehpunkt zunächst "mittig". Allerdings soll der Mastbaum unten kippbar sein, also muß die Objektachse verschoben werden...

All dies haben wir uns erlaubt, euch abzunehmen, der Gabelstapler ist entsprechend vorbereitet. Es wäre prinzipiell egal, ob das Mesh texturiert ist oder nicht, wir werden hier im Tutorial aus Übersichtlichkeitsgründen mit einem "entmaterialisierten" Stapler arbeiten.



Der "Mastbaum" eines Gabelstaplers sorgt für die Führung der eigentlichen Gabel. Im wesentlichen besteht er aus drei Teilen, dem "inneren", dem "äußeren" Mastbaum und der Gabel. Hinzu kommt die Hydraulik und zwei Ziehketten. Eventuelle "unfachmännische" Begriffe mögen uns verziehen sein...*g*.

Nützt nichts, wir müssen uns Gedanken machen, wie es in Wirklichkeit funktioniert. Danach können wir die Abhängigkeiten erst programmieren. Welche Funktionen hat der Mastbaum nun also ? Er ist der vordere Bestandteil des Gabelstaplers, der die eigentliche Last trägt. Er besteht aus Profilen, Hydraulikelementen und der eigentlichen Gabel. Der gesamte Mastbaum hat unten eine Drehachse. Diese ist notwendig, damit der Mastbaum gekippt werden kann (zum Aufnehmen und Ablegen der Last). Dann soll die Last hoch- und runtergefahren werden können. Dazu diesen die Profile und die Hydraulik. Wir müssen also überlegen, welche Teile hierarchisch zusammengefasst werden.

1.
Öffnet die Hierarchie des Staplers, dort die des Mastbaum.drehenP.



Die Hierarchie ist also so angelegt, dass korrekterweise alle zusammengehörenden Teile bewegt werden könnten. Falls ihr doch einen Test gemacht habt, bitte wieder Undo, gell.



Prinzipiell könnte es losgehen, jedoch benötigen wir eine Art "Regler", um die Abläufe "fernzusteuern". Wir werden Slider erstellen; einen, der den Mastbaum kippt (also rotiert), einen weiteren, der den inneren Mastbaum innerhalb seiner physikalischen Grenzen hoch- und runterfährt, dabei werden wir die Gabel integrieren. Ein dritter soll uns erlauben, entweder die Gabel allein hochfahren zu lassen oder zuerst den inneren Mastbaum. Beide Varianten sollen gemischt werden können. Die Regler werden wir mittels der Benutzerdaten schaffen. Sie geben uns zum Schluss einen "Schiebe- oder Drehregler" (Geschmackssache), an denen wir per Mouse ziehen können. Sozusagen wie ein "Mischpult". Ab Release 9 können diese in das HUD gelegt und die gesamte Animation innerhalb des Editorfensters gestaltet werden. Das ist unser erklärtes Ziel für den dritten Teil.

Auch das Anlegen von Benutzerdaten ist denkbar einfach.



1. Das Objekt wird selektiert und im Objekt-Manager wird über den Reiter Benutzer- Benutzerdaten hinzufügen geklickt.
2. Es erscheint das Eingabefeld.
3. Nach Eingabe aller benötigten Werte erscheint der Schieberegler.

Damit sind die für uns wichtigsten Begriffe geklärt.



Benutzerdaten können am Objekt selbst oder aber "gesammelt" vergeben werden. Da wir für den Mastbaum insgesamt 3 Slider benötigen, sammeln wir sie in einem Null- Objekt.

Wir rufen ein Null- Objekt auf und benennen es in Mastbaum.Steuerung um.
Mastbaum.Steuerung erhält einen XPresso- Tag. Wir erzeugen den ersten Benutzerdateneintrag. Über den Reiter Benutzer- Benutzerdaten hinzufügen öffnet sich das Eingabefeld.



Im Eingabefeld nennen wir den Eintrag MB_Rotation. Alle Werte belassen wir, mit Ausnahme des minimalen Wertes, den wir mit (-100%) belegen. Nach Bestätigen durch "OK" erscheint rechts im Objekt-Manager unser Slider



Wir selektieren Mastbaum.Steuerung erneut und legen noch zwei Benutzerdaten an, den zweiten nennen wir MB_Hoehe; den dritten MB_H-Art. Der zweite Regler soll später für das Ausfahren des inneren Mastbaumes verantwortlich sein und der dritte soll die Art und Weise des Ausfahrens steuern können. Dabei soll die Höhe bzw. der Bereich, den der Mastbaum ausfährt, anhand der Gabelhöhe gesetzt werden. Wenn die Gabel am "Anschlag" des inneren Mastbaumes angelangt ist, fährt dieser erst aus. Die zweite Art soll sein, dass der innere Mastbaum von Anfang an mit ausfährt und nicht erst auf den Anschlag der Gabel wartet. Beide Variationen sollen gemischt werden können (Mastbaum_Höhe_Art und Weise= MB_H-Art). Die Bezeichnungen sind selbstredend fiktiv und können geändert werden... Falls ihr irritiert seid, dass bei den Screens Benutzerdaten bearbeiten und nicht hinzufügen steht, so liegt es daran, dass das Tutorial nach der Programmierung geschrieben worden ist und ich die Benutzerdaten noch einmal geöffnet habe, das Eingabefeld ist identisch, gell. Also folgt daraus, dass die Benutzerdaten nach dem Anlegen noch einmal bearbeitet werden können.





Nun können wir an den Slidern herumschieben, allerdings passiert...nix. Wir haben sozusagen die Batterien in unsere Fernbedienung eingelegt und drei Regler eingebaut, müssen aber drinnen noch ein bisschen "herumlöten", damit die Slider aus ihrem "Blindknopf-Dasein" hervortreten. Hier kommt der XPresso-Editor ins Spiel. Wir doppelklicken das XPresso- Symbol bei Mastbaum.Steuerung; es öffnet sich der Editor. Jetzt löten wir herum.

Zieht Mastbaum.Steuerung in den Editor.
Klickt auf den Ausgangsport der Mastbaum.Steuerung und ruft dort die Benutzerdaten auf.
Es erscheinen die drei angelegten Benutzerdaten. Aktiviert werden MB_Rotation und MB_Hoehe. MB_H-Art brauchen wir hier noch nicht, da dieser Benutzerdaten-Eintrag erst beim inneren Mastbaum zum Tragen kommt.



Somit liegen die Ausgänge an. MB_Rotation soll für das horizontale Schwenken des gesamten Mastbaumes verantwortlich sein. Der "Schwenkpunkt" (Objektachse) sitzt bereits an der richtigen Stelle. Es handelt sich um das Null- Objekt Mastbaum.DrehenP (es soll der P-Winkel rotiert werden...). Dieses ziehen wir in den XPresso-Editor. Das Null- Objekt ist nicht nur unsere Drehachse, sondern beherbergt auch die Hierarchie des Mastbaumes. Am Eingangsport rufen wir über Koordinaten- Winkel -Winkel P auf.



MB_Hoehe soll die Gabel "ausfahren" lassen, besser gesagt, die Y- Position wird geändert. Die Objekt-Achse der Gabel ist ebenfalls vorbereitet und liegt wieder als Null- Objekt vor, was alle Teile beinhaltet, die für die Gabel entscheidend sind. Sucht in der Hierarchie des Staplers das Null- Objekt _Gabel (nicht Gabel!) und zieht es ebenfalls in den Editor. An dessen Eingangsport legen wir den Position Y-Node über Koordinaten- Position- Position Y an.



Jetzt benötigen wir eine "Schnittstelle", die es uns erlaubt, die Prozentangaben der Benutzerdaten mit den m- Angaben der Höhe und der Gradzahl der Rotation kompatibel zu machen. Wir benötigen den Bereichswandler. Genau diese Funktion hat er neben anderen, die wir später betrachten werden. Wenn wir also wollen, dass z.B. 100 % einem Winkel von 90° entsprechen soll, wird dieser zwischengeschaltet und gestaltet die Werte kompatibel. Alle XPresso- Objekte, die nicht der Hierarchie des Meshes zu entnehmen ist, befinden sich im X- Pool. Öffnet diesen und ruft unter System- Operatoren- XPresso- Berechne- den Bereichswandler auf. Wir benötigen zwei. Entweder ruft ihr ihn zweimal auf oder aber ihr kopiert ihn im Editor mittels gedrückter Strg- Taste durch Ziehen auf eine freie Stelle.



Verbindet sodann die Nodes wie auf dem Screen. Leider war es das noch nicht ganz, wir müssen noch ein paar Werte in den Bereichswandlern festlegen. Bei selektiertem Bereichswandler öffnet sich im Attributen- Manager das Eingabefeldes des jeweiligen Nodes, hier also der des Bereichswandlers. Selektiert den Bereichswandler zwischen MB_Rotation und Mastbaum drehenP. Wir müssen hier die Bereiche angeben, die "gewandelt" werden sollen. Bei Datentyp stellt bitte Real ein. Den Eingangs- Intervall stellen wir auf Benutzerdefiniert ein. In diesem Modus werden die Zahlen genutzt, die wir jetzt unter den Ein- und Ausgängen eingeben. Der kleinste Eingang ist (-1), der größte Eingang 1. Es werden die untere und obere Grenze des Wertebereiches für den eingeleiteten Wert (-100 bis 100%) festgesetzt. Der Mastbaum soll dabei im Winkel P von (-5°) beim Aufnehmen/Ablegen der Last bis 5° reichen, nämlich dann, wenn er z.B. fährt und der Mastbaum leicht zum Stapler hin angewinkelt sein soll. Das sind die "Ausgabewerte" des Bereichswandlers, also kleinster Ausgang (-5°) und der größte Ausgang 5°. Zudem muss der Ausgangsintervall auf Grad eingestellt werden. Wenn beim Ausgangsintervall Grad eingestellt wird, sind Winkelangaben von (-360) bis 360° möglich. Hier wird also der Intervall (bei uns -5 bis 5°) festgelegt; durch die Verknüpfung zum Winkel P des Mastbaum.DrehenP wird nun der Mastbaum beim Ziehen am Slider "MB_Rotation" "gekippt".

Viele könnten sagen...warum nicht einfach eine Positionsaufnahme keyen? Nun, zum einem müssen wir uns bei der Animation nie wieder darum kümmern, ob die Gabel zu weit nach unten (in den Boden...) oder umgekehrt ragt, allein die Animation des Sliders ist nun ausreichend. Zum anderen könnte dies der Ausgangspunkt für weitere Verknüpfungen sein, z.B. gehen die Scheinwerfer nur an, wenn der Winkel kleiner Null ist etc...



Ähnlich verhält es sich bei MB_Hoehe. Selektiert den zugehörigen Bereichswandler. Die Höhe ergibt sich aus dem "Ruhepunkt" der Gabel unten und dem maximalen Wert, wenn sie ausgefahren ist, also der Y-Positionswert ändert sich. Dieser wird benutzerdefiniert in "Metern" angegeben. 0 ist der Objekt-Achsen-Nullpunkt, 840 (Meter) der höchste (innerhalb der physikalischen Grenzen des hier vorliegenden Meshes) Punkt, den die Gabel erreichen kann, ohne "auszureißen". Das wäre auch ein gar lustiger Effekt, jetzt allerdings weniger gefragt...*g*.

Daher stellen wir in diesem Bereichswandler den Eingans- und Ausgangsintervall auf Benutzerdefiniert und wählen als kleinsten Eingang 0, als größten 1 und für den kleinsten Ausgang ebenfalls 0 sowie für den größten Ausgang 840.





Nun kümmern wir uns um die Verschaltung des inneren Mastbaumes, der die Gabel trägt. Auch die hier benötigte Hierarchie ist im Mesh bereits hergestellt. Wir benötigen unser angelegtes Bedienpult und wollen nun dafür Sorge tragen, dass die Gabel physikalisch korekt angehoben und gesenkt wird. Dabei sollen zwei Varianten zum Tragen kommen. Die erste wollen wir so gestalten, dass die Gabel zum oberen Ende des inneren Mastbaumes fährt und erst dann der innere Mastbaum bis zur Maximalhöhe (840 m) ausfährt. Die zweite Variante soll uns gestatten, dass der Mastbaum bereits von Anfang an mit ausfahren kann (die eigentliche Gabel wird ja von der Ziehkette hochgezogen). @Mark´s Idee war, diese Varianten "mischen" zu können.



Öffnet die Hierarchie des Mastbaum.DrehenP- Objektes und selektiert dort das Null-Objekt _Mastbaum.innen . Es erhält einen XPresso- Tag. In den XPresso- Editor ziehen wir als erstes nochmals unser Objekt Mastbaum.Steuerung. An dem Ausgangsport rufen wir diesmal die Benutzerdaten MB_Hoehe und MB_H-Art auf.



Aus dem X-Pool ziehen wir unter System- Operatoren -XPresso- Berechne noch einen Mischen- Node und einen Bereichswandler- Node in den Editor. Aus der Hierarchie des Meshes ziehen wir das Objekt _Mastbaum.innen hinein.



Beim _Mastbaum.innen interessiert uns nur der "Weg", den der ausfahren soll, mithin wieder eine Änderung der Y-Position. Also aktivieren wir an dessen Eingangsport die Position Y (wie oben) Der Bereichswandler hat zunächst die Aufgabe, die Werte der Benutzerdaten aus der MB_Hoehe kompatibel zur Höhe der Gabel zu machen. Also verbinden wir den Ausgangsport des MB_Hoehe mit dem Eingang des Bereichswandlers und dessen Ausgang mit dem Eingang des _Mastbaum.innen.



Wir selektieren den Bereichswandler, damit sich dessen Operator öffnet. Als kleinsten Eingang geben wir 0, als größten 1 ein. Der kleinste Ausgang ist 0 (Meter) und der größte Ausgang 390 (Meter). Der innere Mastbaum fährt somit innerhalb der in der Natur des hiesigen Modells liegenden Grenzen ein und aus. Diese Werte haben wir nicht aus dem Zauberwald, sondern ergeben sich ganz einfach durch Probieren bzw. Ausrechnen. Wir waren so frei, diese Werte zu ermitteln. Innerhalb der Hierarchie des gesamten Mastbaumes, kann dieser nun maximal 390 Meter ausfahren, ein höherer Wert würde wieder den Comic- Effekt des "Verlassens" nach sich ziehen... Diesmal sind der Eingangs- und Ausgangsintervall benutzerdefiniert. Der Datentyp ist real. Die Hydraulik, die den inneren Mastbaum hoch/runterfahren läßt, brauchen wir nicht zu beachten. Sie muß nicht verschaltet werden, da sich ihr "Bewegungsablauf" allein aus der Hierarchie der Hydraulikzylinder ergibt.



Nun zum Mischen- Node.

Wie der Name schon sagt, erzeugt er einen Mischwert aus zwei vorgegebenen Werten. Daher erscheinen bei Aufruf des Nodes auch gleich seine festgelegten Eingangs- und Ausgangsports. Der Mischfaktor reicht von 0 bis 1. Bei einem Mischfaktor von 0 wird nur "Wert 1" berücksichtigt, bei 1 nur "Wert 2". Also ein Mischfaktor von 0,5 würde Wert 1 und 2 hälftig mischen. Wir wollen erreichen, dass MB_H-Art uns erlaubt, zwischen den beiden Varianten "stufenlos" zu regeln. Der Mischfaktor kann durch verschiedene Datentypen gesteuert werden.

Wir werden hier mittels Splines den Mischen- Node steuern. Selektiert den Mischen- Node, damit sich rechts sein Operator öffnet. Unter dem Reiter Node wird der Datentyp Spline ausgewählt.



Unter dem Reiter Parameter erscheinen nun 2 Diagramme, in die die Splines gezeichnet werden sollen.



Die obere Spline symbolisiert den Eingang 1 und die untere den Eingang 2. Splines werden hier wir folgt gezeichnet: Durch Linksklick erscheint ein orangefarbener Punkt. Jeder erneute Klick fügt einen Punkt hinzu. Um diesen wieder zu entfernen, zieht ihn über oder unter das Diagramm. Für den Eingang 1 zeichnet eine geradlinige Spline. Diese stellt nun Eingang 1 dar. Für Eingang 2 zeichnet die Spline wie im Screen. Zuerst werden die "Eckpunkte" oben und unten gesetzt, dann ein dritter Spline- Punkt eingefügt.



Schließlich müssen wir den Mischen-Node noch "verlöten". Die Splines bedürfen noch einer Umrechnung, um mathematisch verarbeitet werden zu können. Hierzu dient uns wieder der Bereichswandler. An dessen Eingangsport legen wir noch einen Node Spline an.



Nun werden der Ausgangs- Node des MB_H-Art mit dem Mischfaktor des Mischen- Nodes und dessen Ausgangs- Node mit dem Bereichswandler -Splines- Eingangsnode verbunden.



Das war zunächst die Mastbaum-Innen- Steuerung.

Die Splines erzielen nun folgende Wirkung: Wenn MB_H-Art bei 0% ist, fährt die Gabel bis zum Ende des inneren Mastbaumes, dann fährt dieser mit aus. Wäre MB_H-Art bei 100%, würde der innere Mastbaum gleich mit anfahren. Wir können diese Spielerei nun auch stufenlos machen, indem wir den MB_H-Art, der letztlich den Mischen- Node ansteuert, zwischen 0 und 100% variierend sliden.



Öffnet in der Hierarchie die Kette. Sie liegt unter einem Symmetrie- Objekt, da es bei diesem Modell zwei gibt. Unter dem Polygonobjekt der Kette liegen zwei Biege- Deformer, einer für "oben" (hier läuft die Kette über die Führungsrollen) und eines unten (dort wird sie mittels Motor aufgewickelt.) Gott sei Ding ist der Motor unsichtbar im Kasten verstaut. Das obere Biege- Objekt hat eine Stärke von 180°. Damit wird die Kette u- förmig über die Führungsrollen gelegt. Das untere hat eine Stärke von ca. 2540°, damit gewährleistet ist, dass die insgesamt 2000 m lange Kette unten im Kettenkasten "aufgewickelt wird.



Damit bei einer Animation die Kette "läuft", benötigen wir noch zwei Hilfsobjekte, dabei handelt es sich um die Null- Objekte #Biege_oben.position und #Biege_Ende.position. Sie werden in der Hierarchie -bei euch bereits vorliegend- so eingeordnet, dass das oben.position dem inneren Mastbaum untergeordnet ist und das ende.position direkt dem Sammelobjekt Mastbaum.drehenP. Somit folgen die Deformer dem logischen Aufbau des Mastbaumes.

Genau zwischen diesen vier Objekten muß nun eine Abhängigkeit bestimmt werden. Diese ist relativ einfach...*g*.

Zunächst wird das Biege-Objekt Biege_oben selektiert und ein XPresso- Tag aufgerufen.



In den XPresso- Editor ziehen wir das Null-Objekt #Biege_oben.position und das Biege_oben (Biege-Objekt). Am Ausgangsport des #Biege_oben.position rufen wir über Koordinaten- Globale Position - Position auf. Es erscheint am Ausgangsport der Node Globale Position.



Selbiges erledigen wir am Eingangs- Node des Biege_oben - Objekt. Beide Ports werden verbunden. So sollte es ausschauen.



Für das untere Biege- Objekt, unserem "Kettenmotor", gilt dasselbe. Wir vergeben dem Biege_ende- Objekt wieder einen XPresso- Tag. Im Editor ziehen wir das zugehörige #Biege_ende.position und das Biege_ende selbst hinein, rufen analog oben die Globale Position an den Ports auf und verbinden die Nodes.



Somit wird die (globale Position) der jeweiligen Biege- Deformer durch die imaginären Positionen der Deformer bestimmt. Deshalb darf es euch nicht wundern, dass das #Biege_ende.poition weit unterhalb des Fahrzeuges liegt, denn die Kette ist ja 2000 m lang.



Wir müssen als nächstes die freischwebende Hydraulik unten "vernetzen". Sie ist ja im wahren Leben dafür verantwortlich, dass der gesamte Mastbaum rotiert werden kann. Wir werden hier eine Expression einsetzen. Nicht erschrecken *g*, ihr habt sicherlich schon die eine oder andere verwendet...Sie befinden sich ebenfalls unter den Cinema 4D- Tags. Expressions sind mit XPresso und COFFEE verwandt; es handelt sich um vorgefertigte Scripte, die gezielt an Objekte vergeben werden können. Typisches Beispiel: die Zielkamera etc. Cinema 4D stellt uns eine Expression zur Verfügung, mit der sich ein Objekte an ein anderes ausrichten lässt. Naheliegenderweise heißt die Expression: Ausrichten.

Es ist auch möglich, zwei Objekte zueinander in Abhängigkeit auszurichten, indem beide diese Expression erhalten. Genau das brauchen wir hier für die Hydraulik. Der Hydraulikkolben fährt nicht nur ein oder aus, die gesamte Hydraulik rotiert auch leicht dabei.

Wir selektieren das Objekt Hydraulik_klein.aussen.halb, ein gar furchtbar langes Wort für ein Nullobjekt, was die Drehachse des hinteren Hydraulikzylinders simuliert (na ja, viel kürzer wäre das auch nicht...). Über die Cinema 4D- Tags rufen wir die Ausrichten -Expression auf, es erscheint unsere Zielscheibe, wie wir sie von der Zielkamera oder -lichtquelle kennen. Diese Expression verlangt im Attribute- Manager ein Ziel- Objekt. Zieht dort das Objekt Hydraulik_klein.innen.halb hinein. Das ist dieses runde Dingens, das am Kolben der Hydraulik für die Befestigung am Mastbaum sorgt.



Selbiges machen wir mit dem Hydraulik_klein.innen.halb, es wird selektiert und erhält ebenfalls eine Ausrichten- Expression. Als Zielobjekt ziehen wir jetzt das Hydraulik_klein.aussen.halb - unser voriges Nullobjekt- hinein. Schon haben wir Cinema überlistet und die Hydraulik folgt brav unserer Rotation.





Bonus...und weil wir "verfressen" sind, wollen wir uns zum Schluss des ersten Teiles über die Bedienhebel hermachen. Sie sollen der Mastbaumbewegung folgen. Einer ist für die Rotation des gesamten Mastbaumes zuständig und der andere für das Ausfahren des inneren Mastbaumes. Ich weiss auch schon, dass diese Detailverliebtheit sich im zweiten Teil fortsetzen wird...

Der Hebel wird nur im B- Winkel rotiert, die Objektachse ist entsprechend unten angeordnet.

@Mark´s Idee war folgende: Logischerweise steht der Hebel still, wenn der Mastbaum nicht rotiert wird. Je schneller der Mastbaum nach vorn gekippt wird, desto schneller wird der Hebel nach vorn bewegt, also der Winkel B wird größer 0. Je schneller der Mastbaum wieder angewinkelt wird, desto schneller wird der Hebel nach hinten gezogen, der Winkel B wird also kleiner 0. In Ruhelage ist der B- Winkel also 0. Wenn der Mastbaum nach der einen oder anderen Seite langsam gekippt wird, bewegt sich der Hebel mithin nicht bis zum "Anschlag"...Klingt verwirrend, ist aber so *g*

Selektiert den Hebel.Rotation und verleiht ihm einen XPresso- Tag. In den Editor ziehen wir zunächst unser Null- Objekt Mastbaum.DrehenP. Zieht als nächstes den Hebel.Rotation hinein und schiebt ihn nach rechts, wir müssen jetzt die mathematischen Zusammenhänge "hineinwurschteln". Zuvor müssen wir an den Ausgangsport des Mastbaum.DrehenP folgende Nodes legen: Winkel P, Vorherige Rotation und Geschwindigkeit der Rotation. Am Eingangsport des Hebel.Rotation legen wir den Winkel B an.



Zieht aus System- Operatoren- XPresso- Adapter einen Vektor zur Reale- Node in den Editor. Dieser Adapter spaltet einen Vektor in seine drei Komponenten vom Typ "Real" auf. Einem Dreh- Vektor spaltet er in den H,P und B- Wert um.

Der Mathe(Addieren)- Node (unter System- Operatoren- XPresso- Berechne zu finden) beherbergt verschiedene mathematische Grundoperationen, so auch das Subtrahieren. Er zieht den zweiten vom ersten Wert ab, das Ergebnis liegt am Ausgangs- Node an.

Der Vergleichs- Node vergleicht immer zwei Eingangswerte. Am Ausgang liegt das Ergebnis dieses Vergleiches vom Typ "Boole" an. Der Typ Boole kennt nur zwei Zustände. Entweder ist das Ergebnis positiv (z.B. der Wert soll größer sein als 0), dann sagt er, es ist wahr ("True") oder 1. Bei einem negativen Verlauf (im Beispiel oben: der Wert ist kleiner 0) liegt als Ergebnis falsch ("False") oder 0. Er befindet sich unter System- Operatoren- XPresso- Logik .

Unter System- Operatoren- XPresso- Berechne befindet sich der Negieren- Node. Dieser Begriff ist leicht irritierend, besser wäre eigentlich die Bezeichnung "Umkehrer". Er tauscht das Vorzeichen des Datentyps ins Gegenteil um, was dann am Ausgang anliegt. (z.B. wird aus (-6) dann 6 oder aus 5 wird (-5).

Als letztes brauchen wir einen Verteiler- Node (unter System- Operatoren- XPresso- Logik)Dieser funktioniert wie folgt: Am Eingang "Schalter" wird ein Wert angelegt, der bestimmt, welcher Eingangswert an den Ausgang ausgegeben wird. Der Wert 0 aktiviert den ersten Eingang, wenn sich der Wert am Schalter um 1 erhöht, wird der nächste Eingangswert an den Ausgang gegeben. Wenn also zwei (es könnten mehrere sein) Eingänge anliegen, würde bei dem Schalterwert 0 der erste Eingangswert an den Ausgang gegeben. Bei 1 wird der 2. Eingang aktiviert. Bei einem Schalterwert von 3 beginnt es wieder von vorn, der oberste Eingang wird durchgereicht u.s.w.

Zieht alle Nodes in den Editor. Hinzu tritt noch ein Bereichswandler. Beim Negieren- und Verteiler- Node stellen wir im Operator als Datentyp jeweils Real ein.



Die Operator- Einstellungen der anderen Nodes entnehmt bitte den folgenden Screens:





Wir verbinden nun die Nodes wie folgt



Wie ihr seht, kann ein Node auch mehrfach belegt werden, hier z.B. der Bereichswandler- Ausgang, der einmal zum Negieren- Eingangs-Node und zum Verteiler Eingang 2 geht.

Diese Schaltung sorgt nun für den oben erwähnten Effekt des Hebelbetätigens.

Ähnlich wird der Hebel.Hoehe verschalten. Es handelt sich um diesselben Nodes, allerdings sind unsere Steuerobjekte jetzt die _Gabel und der Hebel.Hoehe. Nachdem ihr diese beiden Objekte nach Vergabe eines XPresso- Tags an Hebel.Hoehe in den Editor gezogen habt, werden noch einmal alle X-Pool- Nodes aufgerufen, wie bei der obigen Schaltung. Es werden auch diesselben Einstellungen vorgenommen, mit Ausnahme folgender: Am Ausgangsport der -Gabel geht es diesmal um die Position Y, nicht um einen Winkel. Also werden die Position Y, vorherige Position und Geschwindigkeit der Position aufgerufen. Die Bereichswandler- Einstellungen müssen an die Gabel angepasst werden. Diese entnehmt ebenfalls dem Screen. Die Vernodung ist aber selbige wie bei dem Hebel.Rotation. Hier mal aus einer anderen "Perspektive", falls beim vorigen Screen etwas unklar geblieben ist.



..und noch schnell die Werte für den Bereichswandler:



Das war es eigentlich "schon"...
Soweit zum ersten Teil des Tutorials XPresso, was wahrlich nicht gerade einfach war, aber wer an den Slidern einmal probezieht und alles richtig gemacht hat, der wird mit einem realistischen Verhalten des Mastbaumes inklusive aller zugehöriger Komponenten belohnt.

In diesem Sinne, schwindelfreies Be- und Entladen...

Euer Andreas
(special thanks to Mark von tutorials.de und Dr.Honigtau!)

>> Allgemeine Fragen oder Probleme mit dem Tutorial? Hier gehts zum Forum!

Impressum / Datenschutzerklärung          © der-Webdesigner.net 2002 - 2008           top ▲