design publishing imaging
Arndt von Koenigsmarck
EinWorkshop für Profis
auch zu MAXON BODYPAINT 3D
ADDISON-WESLEY
...
201 downloads
1378 Views
25MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
design publishing imaging
Arndt von Koenigsmarck
EinWorkshop für Profis
auch zu MAXON BODYPAINT 3D
ADDISON-WESLEY
MAXON CINEMA 4D 7
Arndt von Koenigsmarck
MAXON CINEMA 4D 7 Ein Workshop für Profis
ADDISON-WESLEY An imprint of Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam
Die Deutsche Bibliothek-CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei der Deutschen Bibliothek erhältlich Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewahrleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Vertag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch Irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Autoren dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulassig. Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie - zum Schutz vor Verschmutzung - ist aus umweltverträglichem und recyclingfähigem PE-Material.
10 9 8 7 6 5 4 3 2 1
04 03 02 01 ISBN 3-8273-1890-4
© 2001 by ADDISON-WESLEY Verlag, ein Imprint der Pearson Education Deutschland GmbH Martin-Kollar-Straße 10-12, D-81829 München/Germany Alle Rechte vorbehalten Einbandgestaltung: Lektorat: Korrektorat: Herstellung: Satz: Druck und Verarbeitung: Printed in Germany
Helmut Kraus, Dusseldorf Klaus Hofmann, khofmann@pearson. de Angelika Obermayr, Grafing Anna Plenk, aplenk@pearson. de mediaService - Siegen (www. media-service. tv) Kösel, Kempten (www. KoeselBuch. de)
Inhaltsverzeichni l
Einleitung
9
CINEMA 4D 7
13
1. 1 Das Interface................................................................................. 13 Die Betriebsarten............................................................................. 13 Werkzeuge und Funktionen............................................................. 15 Eigene Icon-Paletten integrieren...................................................... 16 Die wichtigsten Befehle und Funktionen.......................................... 17 Die verschiedenen Fenster von CINEMA 4D..................................... 24 1. 2 Ein Arbeitsbeispiel........................................................................... 28 Die Boole-Methode...........................................,.............................. 28 Die Spline-Methode......................................................................... 47 Selektive Deformationen................................................................. 57
2
HyperNURBS
.
71
MODELLIERUNG UND ANIMATION EINES ZYLINDERS MIT PLEUEL UND KURBEL WELLE 2. 1
Die Modellierung des Kolbens......................................................... 71 Die Kolbenringe modellieren........................................................... 80 2. 2 Modellieren der Pleuelstange.......................................................... 89 Aufteilen der Pleuelstange in Baugruppen...................................... 96 Schrauben und Muttern hinzufügen.............................................. 102 2. 3 Modellieren der Kurbelwelle.......................................................... 105 2. 4 Vorbereitungen für die Animation................................................... 111 Lokale Drehzentren positionieren................................................... 113 Hilfsobjekte einsetzen.................................................................... 115 2. 5 COFFEE-Expressions....................................................................... 118 2. 6 Key-Frames.................................................................................... 125
3
Expressions 131 Die fließende Spirale...................................................................... 131 Die Modellierung............................................................................ 132 Das Animieren des Zylinders.......................................................... 134 Austauschen des Zylinders............................................................. 151 3. 2 Bewegungsabläufe automatisieren................................................ 157 Wie funktioniert Morphing?............................................................ 169 3. 3 Delta-Expression............................................................................ 178
4
Organisches Modellieren ENTWURF UND MODELLIERUNG EINES MENSCHLICHEN KOPFES
189
4. 1 Herstellen von 3D-tauglichen Vorlagen.......................................... 189 4. 2 Vorbereitungen für die Modellierung............................................ 200 EdgeExtrude, EdgeBevel und Cutter.............................................. 200 Die Skizzen als Vorlagen nutzen.................................................... 203 4. 3 Die Modellierung des Kopfes........................................................ 206 Das Auge....................................................................................... 206 Die Augenlider............................................................................... 217 Die Nase........................................................................................ 229 Wangen und Kinn.......................................................................... 235 Der Mund....................................................................................... 241 Stirn und Nacken........................................................................... 246 Das Ohr......................................................................................... 249
5 5. 1
Mechanische Modellierung MODELLIERUNG EINES MENSCHLICHEN TORSOS
257
Der Torso...................................................................................... 257 Der Kehlkopf................................................................................. 257 Hydraulik-Halterung...................................................................... 264 Hydraulik-Zylinder......................................................................... 267 Mechanische Muskeln................................................................... 270 Ein Abweiser................................................................................. 275 Schulter und Brust........................................................................ 278 Schläuche und Kabel..................................................................... 283 Die Wirbelsäule............................................................................. 292 Der Hals........................................................................................ 296 5. 2 Eine Holzkiste modellieren............................................................ 299 Den Raum modellieren.................................................................. 305
Radiosity und Caustics
313
6. 1 Radiosity-Einstellungen ermitteln.................................................. 313 Die Stärke...................................................................................... 313 Die Genauigkeit............................................................................. 314 Prepass-Größe............................................................................... 314 Strahltiefe..................................................................................... 315 Sammelstrahlen............................................................................ 315 Min. Auflösung/Max. Auflösung.................................................... 315 Den richtigen Min. -Wert ermitteln................................................. 316 Den Max. -Wert ermitteln................................................................ 318 Die Genauigkeit nutzen................................................................. 319 Strahltiefe und Sammelstrahlen.................................................... 323 Zusammenfassung........................................................................ 330 6. 2 Caustics und matte Effekte............................................................ 331 6. 3 Materialien und Shader-Trees....................................................... 345 Holz............................................................................................... 345 Die Unterschiede der Illuminations-Modelle.................................. 350 Das Brettermaterial platzieren....................................................... 352 Störungen hinzufügen................................................................... 354 Verwittertes Metall........................................................................ 357 Normale metallische Oberflächen.................................................. 366 Mit dem Fresnel-Shader arbeiten.................................................. 367 Stein und Mörtel............................................................................ 372 Matte Effekte mit SLA simulieren................................................... 386
7
Tipps und Tricks 395 Compositing und Multi-Passes...................................................... 395 Ein kleines Multi-Pass-Beispiel...................................................... 406 Ein Compositing-Beispiel................................................................ 411 7. 2 Texturen anpassen mit BODYPAINT 3D.......................................... 419 7. 3 Texturen als Lichtquellen benutzen............................................... 432 7. 4 Animierbare Haare erstellen.......................................................... 437 7. 5 Reduzieren und Explodieren.......................................................... 444 Explosion FX................................................................................... 448
Index
461
Einleitung Immer kürzer scheinen die Produktionszyklen zu werden. Kaum hat man sich in CINEMA 4D Version 6 eingearbeitet, schon gibt es Version 7, wieder mit vielen Neuerungen und Techniken, die es zu beherrschen gilt, will man das Potenzial der Software ausschöpfen. Um der neuen Version Rechnung zu tragen, habe ich mich nicht damit begnügt, mein Buch zu Version 6 zu erweitern, sondern ein komplett neues Buch geschrieben, das wieder als Ergänzung zum vorhandenen Handbuch benutzt werden sollte. Aus zahlreichen Rückmeldungen und Kommentaren weiß ich, dass viele Leser sich mehr Informationen über COFFEE-Programmierung und die verschiedenen Modellierungsmethoden wünschen. Ich habe dem mit einem nochmals gesteigerten Umfang an Expression-Beispielen und noch detaillierteren Arbeitsbeispielen zum Thema Modellierung Rechnung getragen. Ich hoffe damit, auch dem Anfänger in Sachen CINEMA 4D und 3D kompetente Hilfe leisten zu können. Wie gewohnt hier ein kurzer Abriss dessen, was Sie in den folgenden Kapiteln erwartet. Ich beginne im ersten Kapitel mit einem stichwortartigen Abriss über das Interface der Software und die wichtigsten Funktionen und Werkzeuge. Dieser Abschnitt dient nur der Auffrischung, da ich das Handbuch als Nachschlagewerk für CINEMA zumindest als vorhanden voraussetze. Im zweiten Teil dieses Kapitels steigen wir daher gleich in die Materie ein und modellieren den Kolben eines Automotors. Dabei geht es weniger um die exakte Modellierung nach einer Vorlage, sondern mehr um einen Überblick über die verschiedenen Techniken, um eine derartige Aufgabe zu meistern. Hier wird besonders deutlich, welche Fehler auftreten können und welche Voroder Nachteile die gezeigten Techniken haben. Im zweiten Kapitel führen wir die Modellierung des Kolbens mit den PolygonWerkzeugen fort und nutzen alle Möglichkeiten der HyperNURBS-Modellierung. Am Ende steht eine Kurbelwelle samt Pleuel und Kolben, die für die Animation vorbereitet ist. Wie ein derartiges Modell mit Hilfe von verschiedenen Expressions animiert werden kann, zeigt der letzte Teil dieses Kapitels.
Das dritte Kapitel ist in Gänze der Erstellung eigener COFFEE-Expressions gewidmet. Es werden drei konkrete Beispiele vorgestellt, die ohne den Einsatz von Expressions niemals zu realisieren gewesen waren. Das abgedeckte Spektrum reicht dabei von Morphing bis zu Delta-Expressions. Das Niveau ist dabei zwar recht hoch, die Beispiele sind jedoch Zeile für Zeile dokumentiert und können so auch von Anfängern gut nachvollzogen werden. Wie modelliere ich einen Kopf? Diese oder ähnliche Fragen an mich oder in Foren lese ich sehr oft. In diesem Kapitel wird daher von der Erstellung realistischer Skizzen bis hin zur HyperNURBS-Modellierung der komplette Arbeitsablauf der Planung und Umsetzung eines Kopf-Objektes beschrieben. Dabei greifen wir nicht nur auf Standardwerkzeuge von CINEMA 4D zurück, sondern auch auf zusätzliche, frei erhältliche Plugins, die die Produktivität erheblich steigern und zudem noch bessere Ergebnisse liefern können. Wurde im Kapitel zuvor eher die Modellierung organischer Objekte besprochen, so geht es hier im fünften Kapitel mehr um mechanische und unbelebte Objekte. Passend zum Kopf aus dem letzten Kapitel wird hier ein mechanischer Oberkörper modelliert, der in eine komplette Szene integriert wird. Dabei werden fast alle Werkzeuge von CINEMA 4D benutzt. Kapitel 6 beschäftigt sich ausführlich mit den neuen Radiosity- und CausticEffekten, sowie mit dem Umgang der neu integrierten SLA-Shader. Besonders die Ermittlung der richtigen Radiosity-Parameter ist essentiell für moderate Renderzeiten und das erwünschte Ergebnis. Schritt-für-Schritt-Anleitungen zeigen daher einen exemplarischen Weg für die Ermittlung der optimalen Einstellungen. Zudem wird im zweiten Teil des Kapitels der Umgang mit SLA-Shadern und Shader-Trees ausführlich besprochen. Kapitel 7 schließlich fasst in mehreren Kurzbeispielen weitere interessante Techniken zusammen und stellt u. a. die ergänzende Arbeit in BODYPAINT 3D vor und erläutert eine Möglichkeit, realistisch animierte Haare in CINEMA 4D zu erzeugen. Auch die neu integrierten Plugins für die Reduzierung von Polygonen und die Explosion von Objekten werden vorgeführt Wie schon gewohnt konnte ich auf die freundliche Zusammenarbeit mit MAXON Computer GmbH zählen. Hier möchte ich speziell Michael Giebel, Dirk Beichert, Tilo Kühn, Philip Losch und Joachim Heller danken, aber natürlich auch allen anderen Mitgliedern der „MAXON-Familie". Mein Dank geht nun auch zum schon wiederholten Mal an Sebastian Dosen von DOSCH DESIGN für die freundliche Unterstützung mit Demomaterial für die Buch-CD (www.doschdesign.com). Auch Herbert Fahrnholz von NOCTUA GRAPHICS war so freundlich, exklusive Proben seiner Texturen für Sie als Leser zur Verfügung zu stellen (www.noctua-graphics.de). Vielen Dank auch an Klaus Baulmann von BAULMANN PRODUKT ENTWICKLUNG für die Bereitstellung eines hochauflösenden 3D-Scans (www.digital-forms.de). Dieser hat die Arbeit mit dem Polygon-Reduzierer an einem realistischen Objekt erst möglich gemacht.
Viele Freunde und „Mitstreiter" in der C4D-Community haben auch wieder kostenfreie Plugins und Demos für die Buch-CD zur Verfügung gestellt. Vielen Dank dafür an alle, die ich hier nicht separat erwähnen kann. Natürlich auch ein freundlicher Gruß an alle Freunde im C4D-TREFF und C4DFORUM sowie an Ricky, Ulf und Bernd von VREEL 3D ENTERTAINMENT oHG, an Jay und Mike von MEDIENBUNKER oHG, an nEO vom C4D-TREFF und natürlich an meine Familie. Letztlich ein freundlicher Gruß auch an die Mitarbeiter von ADDISON-WESLEY, und hier besonders an Angelika Obermayr, Christian Rauscher und Klaus Hofmann. Die Zusammenarbeit war wie immer eine Freude. Gerne können Sie mich auch über meine Internetseite www.vonkoenigsmarck.de kontaktieren. Für Fragen, Wünsche und Anregungen habe ich dort immer ein offenes Ohr für Sie. Wie viele von Ihnen bereits wissen, stehe ich zudem für individuelle Schulungen zur Verfügung. Happy rendering Arndt von Koenigsmarck Menden, im Juni 2001
1
CINEMA 4D 7
Als kleine Hilfestellung für die Leser, die von anderen 3D-Programmen oder von alteren CINEMA-4D-Programmversionen vor V6 auf die aktuelle Version 7 umsteigen, bringe ich hier einen kurzen Abriss über die wichtigsten Menüs und Symbole in CINEMA 4D XL. Umsteiger von Version 6 können sich hier vorerst etwas zurücklehnen, denn zumindest vom optischen Erscheinungsbild her hat sich CINEMA 4D nicht verändert. Bitte sehen Sie mir nach, wenn ich nicht jeden Menüeintrag detailliert beschreibe. Da dieses Buch als vertiefendes Übungsbuch konzipiert ist, mochte ich Sie in diesen Fallen auf das Handbuch verweisen. Ich mochte mich aus Platzgründen auf die Befehle beschränken, die ich in den Arbeitsbeispielen verwende.
1. 1 Das Interface Je nachdem, ob Sie CINEMA 4D in der ART-, der X L - , der BODYPAINT 3D- oder der kombinierten Version mit BODYPAINT 3D und XL starten, stellt sich das Interface etwas anders dar. Dies liegt daran, dass CINEMA 4D nicht alle Befehle in jeder Version zur Verfugung stellt und deshalb ggf. Eintrage komplett fehlen oder wie z. B. bei BODYPAINT 3D in Verbindung mit der XL-Version neue Icons und Menüs hinzukommen. Ich beschränke mich hier vorerst auf die XL-Version und gehe dann zu einem spateren Zeitpunkt auf die BODYPAINT-3D-Menüs und -Icons detaillierter ein.
1. 1. 1 Die Betriebsarten CINEMA 4D arbeitet mit so genannten Betriebsarten, die der Software mitteilen, welche Bestandteile eines Objektes zu bearbeiten sind. Die jeweils aktive Betriebsart bestimmt zudem die Darstellung in den Ansichtsfenstern. So bekommt man z. B. die Punkte eines Objektes nur zu sehen, wenn man tatsächlich auch in die PUNKTEBEARBEITEN-Betriebsart schaltet. Erst jetzt erhalt man Zugriff auf die Punkte und kann diese selektieren, verschieben und auch loschen oder erzeugen. Sinngemäß verhalt es sich mit den anderen Betriebsarten, wie z. B. POLYGONE BEARBEITEN oder OBJEKT BEARBEITEN. In Abbildung 1. 1 sind die verschiedenen Betriebsarten, die Sie als Icons auf der linken Interfaceseite ebenso finden wie auch als Menüeintrage im WERKZEUGE-Menü. Dort sieht man sich aus Platzgründen jedoch nur Einträgen, wie POLYGONE, PUNKTE und OBJEKT gegenüber.
Grundobjekte konvertieren Kamera bearbeiten Objekt bearbeiten Model! bearbeiten Objektachse bearbeiten Punkte bearbeiten Polygone bearbeiten Textur bearbeiten Texturachsen bearbeiten Animation bearbeiten inverse Kinematik aktivieren Animationen aktivieren/deaktivieren Deformationen aktivieren/deaktivieren Expressions aktivieren/deaktivieren Partikel aktivieren/deaktivieren Abbildung 1.1: C!NEMA-4D-Betriebsarten
Seitdem mit der Version 6 so genannte parametrische Objekte eingeführt wurden, lässt sich nicht jedes Objekt sofort beliebig weiterbearbeiten. Da parametrische Objekte zwar ebenfalls aus Punkte und Polygonen bestehen, diese jedoch vorerst nicht sichtbar sind, müssen parametrische Objekte zuvor konvertiert werden. Dies geschieht bei Betätigung der GRUNDOBJEKTE-KONVERTIERTEN-Schaltfläche, die ebenfalls in Abbildung 1.1 dargestellt ist. Dieser Schritt will jedoch gut überlegt sein, denn nach der Konvertierung liegen zwar alle Punkte und Polygone eines parametrischen Objekts zur weiteren Manipulation vor, die Vorteile dieser Objektgruppe gehen jedoch unwiederbringlich verloren. Dazu zählt z. B. die Veränderbarkeit von Radien an Grundobjekten oder die Manipulationsmöglichkeiten von Unterobjekten eines Boole-Grundobjekts. Wie Sie an dem Beispiel des Boole-Grundobjekts sehen, sind nicht nur eigentliche Grundobjekte, wie z. B. ein Würfel, eine Kugel oder auch Spline-Grundformen wie das Zahnrad oder der Kreis von einer derartigen Umwandlung betroffen, sondern auch alle Arten von NURBS-Objekten und andere interaktive Modellierungshilfen, wie das Symmetrieobjekt,
Die vier unteren Icons in Abbildung 1.1 aktivieren bzw. deaktivieren die so genannten Drawing-Pipelines von CINEMA 4D. Die Drawing-Pipelines unterscheiden dabei zwischen Partikeleffekten, Expressions, Deformatoren und Animationen. Die Deaktivierung umgeht die Berechnung der entsprechenden Effekte in den Ansichtsfenstern. Dies macht auch dann Sinn, wenn sich überhaupt keine entsprechenden Effekte oder Objekte in der Szene befinden, denn CINEMA 4D überprüft bei aktivierten Einstellungen auf jeden Fall die Szene und verliert daher kostbare Zeit. Sie sollten daher die Drawing-Pipelines ganz oder teilweise deaktivieren, wenn keine entsprechenden Objekte verwendet werden. Die hier vorgenommenen Einstellungen beeinflussen nur die Editordarstellung und nicht das Ergebnis der Bild- oder Animationsausgabe. Haben Sie also zwecks schnellerer Editorarbeit z. B. die COFFEE-Expressions über das entsprechende lcon deaktiviert, so sind die Expressions dennoch während der Berechnung des Bildes oder der Animation wieder aktiv.
1.1.2
Werkzeuge und Funktionen
Lupe
X-Achse ein/aus Y-Achse ein/aus Z-Achse ein/aus
Bewegen/Skalieren/Rotleren Objekt- /Welt-System Selektionsmethoden Render in aktiver Ansicht Wiederherstellen Rendermethoden - Rückgängig Rendering Optionen Abbildung 1.2: Icons im oberen Bereich des Interfaces
Wandern wir nun zu den horizontalen Icons am oberen Bildschirmrand. Hier konkretisieren Sie zu der ausgewählten Bewegungs-, Skalierungs- oder Rotations-Betriebsart durch das Aktivieren und Deaktivieren der Icons X, Y und Z die zulässigen Achsen. Gleich daneben schalten Sie auf das gewünschte Bezugssystem, also auf das Objekt- oder das Welt-System um. Die drei mit stilisierten Vasen gekennzeichneten Icons starten die Berechnung der aktiven Editoransicht oder eines Teilbereichs dessen. Hier wird auch die finale Berechnung des Bildes oder der Animation gestartet. Die dabei relevanten Parameter stellen Sie in den Render-Optionen ein. Hier verbergen sich die massivsten Unterschiede zu der Vorgängerversion, weshalb hierauf auch an anderer Stelle noch gezielter eingegangen wird. Am linken Rand der Icon-Leiste lösen die beiden gekrümmten Pfeile eine Zurücknahme der letzten Aktionen, bzw. ein Wiederherstellen fälschlich zurückgenommener Aktionen aus. Die Tasten lassen sich mehrfach betätigen, falls z. B. mehrere Schritte verworfen werden sollen. Die maximale Anzahl der Aktionen, die über
diese lcons gesteuert werden können, lässt sich in den Voreinstellungen des Programms vorgeben. Je höher die Zahl, desto mehr Speicherplatz wird für die gespeicherten Aktionen von CINEMA 4D belegt. Der Standardwert beträgt 20 gespeicherte Aktionen und sollte normalerweise auch ausreichend sein. Das lcon mit dem blauen Mauszeiger beherbergt die verschiedenen Selektionsmethoden. Sie haben die Wahl zwischen Rechteck-, Polygon, Freihand- oder Mauszeiger-Selektion. Für alle Methoden gilt, dass Sie konkretisierende Einstellungsmöglichkeiten dazu in dem separaten Fenster AKTIVES WERKZEUG finden, das standardmäßig am rechten unteren Bildrand zusammen mit dem Koordinatenfenster gruppiert ist. Hier geben Sie dann z. B. den gewünschten Radius um den Mauszeiger herum vor, der noch ausgewählt werden soll, oder ob Selektionen nur für sichtbare Objektteile oder auch für verdeckte Bereiche erstellt werden sollen. Bei der Arbeit mit Selektionen ist es noch wichtig zu wissen, dass Selektionen durch Halten der [^]-Taste erweitert und durch Halten der [Strg]-/[Ctrl]-Taste verkleinert werden können. Das Lupen-lcon dagegen steuert die Zoomfunktion in den Editorfenstern. Durch Anklicken oder Aufziehen eines Rahmens um das gewünschte Objekt lässt sich dieses größer darstellen und zentrieren. Auch hier hilft wieder die Tastatur weiter, denn durch Betätigung der rechten Maustaste bzw. durch zusätzliches Halten der [Strg]-/[Ctrl]-Taste kehrt sich der Zoom-Effekt um. Die Tasten [+] und [-] auf der Tastatur bewirken gleiches, ohne die Maus benutzen zu müssen. In Abbildung 1.2 nicht mehr zu sehen sind die Icons mit den Grundobjekten und einigen Modelling-Funktionen. Da hier einige nur über Menüs erreichbar sind, andere jedoch auch als Icon vorliegen, führe ich kurz vor, wie sich beliebige Funktionen selbst in lcon-Menüs organisieren und in das Layout integrieren lassen. Ansonsten erschöpft sich hiermit - abgesehen von der kombinierten CINEMA 4D / BODYPAINT 3D-Variante - die Anzahl der sichtbaren Icons. Aufgrund der modularen Funktionsweise des Interfaces lassen sich jedoch beliebige, bislang nur in Menüs zu findende Funktionen auch als Icons in beliebige Paletten integrieren.
1.1.3
Eigene Icon-Paletten integrieren
Dazu ruft man im FENSTER-Menü unter dem Eintrag LAYOUT den Punkt PALETTEN BEARBEITEN auf. Alle Icons werden jetzt dunkel umrandet dargestellt und können durch einfaches Verschieben mit gehaltener linker Maustaste, auch „Drag & Drop" genannt, an eine andere Stelle im Interface verschoben werden. Ein Doppelklick auf ein Icon löscht dieses aus dem Layout. Möchte man neue lcons, oder auch thematisch gruppierte lcongruppen in das Layout integrieren, um z. B. häufig benutzte Werkzeuge auch als Schaltfläche anwählen zu können, so ruft man zuerst eine neue, leere Palette auf. Dazu klicken Sie mit der rechten Maustaste, bzw. auf Macintosh-Computern mit gehaltener [#]Taste, in einen leeren Bereich des Layouts. In dem aufklappenden Submenü wählen Sie den Punkt NEUE BEFEHLS-PALETTE aus. Es erscheint ein leeres kleines Fenster.
Abbildung 1.3: Zusammenstellen eigener Befehlspaletten Ziehen Sie jetzt beliebige Icons aus dem Fenster mit den miniaturisierten Icons in das leere Fenster hinein, wie es in Abbildung 1.3 angedeutet ist. Dabei sind die Icons thematisch nach Editor, Werkzeugen und z. B. installierten Plugins geordnet. Wenn Sie also das gewünschte Icon in der Auswahlliste nicht finden, wechseln Sie einfach die entsprechende Rubrik über das Aufklappmenü im oberen Bereich. Haben Sie die gewünschten Icons in dem Fenster gruppiert, klicken Sie wieder rechts, bzw. mit der [#]-Taste in das neue Icon-Fenster und wählen den Befehl BEFEHLS-GRUPPE ERZEUGEN aus. Die Icons verschwinden nun bis auf das erste lcon in der Liste. Dieses bekommt zusätzlich einen kleinen schwarzen Pfeil, der auf die Befehlsgruppe hindeutet. Jetzt verschieben Sie das Icon mittels Drag & Drop an die gewünschte Stelle im Layout und schließen das Icon-Auswahlfenster (siehe Abbildung 1.4). CINEMA 4D kehrt daraufhin in die gewohnte Betriebsart zurück.
Abbildung 1.4: Eingefügte neue Befehlspalette Damit das derart veränderte Layout auch beim nächsten Programmstart wieder erscheint, muss es nun noch über die entsprechende Funktion im FENSTER-Menü z. B. als Start-Layout gesichert werden.
1.1.4 Die wichtigsten Befehle und Funktionen Nachfolgend habe ich Ihnen nach dem gleichen Schema die wichtigsten Werkzeuge aus dem STRUKTUR-Menü in Icon-Gruppen zusammengestellt. Wir werden noch regen Gebrauch von diesen Werkzeugen machen und intensiv mit ihnen arbeiten. Deshalb belasse ich es hier bei einer kurzen Aufzählung.
Abbildung 1. 5: Eine Auswahl an Funktionen aus dem Struktur-Menü
In Abbildung 1. 5 sehen Sie von links nach rechts die Funktionen ABLÖSEN, ABTRENNEN, ARRAY, BEVEL, BRÜCKE, EXTRUDIEREN, INNEN EXTRUDIEREN, SMOOTH SHIFT, SPIEGELN, das DREHEN UM NORMALEN, das VERSCHIEBEN ENTLANG DER NORMALEN, das MESSER und den MAGNET. Ich gehe stichwortartig auf die Wirkung dieser Funktionen ein. Fast alle beschriebenen Werkzeuge funktionieren nur im POLYGONE-BEARBEITEN-Modus. Zudem besitzen viele Werkzeuge zusätzliche Einsteilmöglichkeiten in dem bereits erwähnten Fenster AKTIVES WERKZEUG. Beim ABLÖSEN werden die selektierten Punkte oder Polygone von der übrigen Struktur getrennt, bleiben jedoch als ein gemeinsames Objekt weiterhin intakt. Beim ABTRENNEN werden die selektierten Abschnitte in ein neues Objekt kopiert, bleiben jedoch am ursprünglichen Modell unverändert. Da die Teile am ursprünglichen Objekt weiterhin aktiv bleiben, können Sie z. B. über die [ < - ] - T a s t e gelöscht werden. Auf diese Weise lässt sich ein komplexes Modell in Unterobjekte zerlegen. Die ARRAY-Funktion vervielfältigt ein aktives Objekt mit diversen Variablen und Zufalls-Optionen. Die BEVEL-Funktion extrudiert selektierte Flächen, verschiebt diese also mit zusätzlich erstellten Seitenflächen und skaliert die Flächen dabei gleichzeitig. Es entsteht dadurch eine abgerundete Kante. Zu beachten ist dabei jedoch, dass das Objekt um den Wert der Extrudierung an Größe gewinnt. Das BRÜCKE-TOOL verbindet selektierte Flachen innerhalb eines Objekts miteinander. Dazu werden erst die Flächen selektiert, dann das BRÜCKE-TOOL aktiviert und schließlich muss mit gehaltener Maustaste eine Verbindungslinie zwischen den zu verbindenden Polygonen gezogen werden. Die selektierten Flächen werden automatisch gelöscht und die Ränder der entstehenden Löcher mit Polygonen verbunden. Das Werkzeug kann sowohl mit einzelnen Polygonen als auch mit Polygongruppen umgehen. Als zweite Variante dieser Funktion bietet sich das Erstellen von Polygonen an, da das BRÜCKE-TOOL auch Punkte verbinden kann. Das EXTRUDIEREN zieht Polygone oder ganze Gruppen davon aus einem Objekt heraus. Dabei werden die Eckpunkte der selektierten Polygone oder Polygongruppen dupliziert und mit dem extrudierten Teil verbunden. Mit diesem Werkzeug lassen sich Strukturen also verlängern oder auch verzweigen. Während das Extrudieren eine Entfernung von der ursprunglichen Oberfläche vorsieht, extrudiert die Funktion INNEN EXTRUDIEREN die neuen Flachen in die Ebene der alten Flachen hinein. Dies wird später an Beispielen deutlicher.
Die SMOOTH-SHIFT-Funktion arbeitet ähnlich dem EXTRUDIEREN, behält jedoch auf jeden Fall alle selektierten Elemente in einer Gruppe. Beim normalen EXTRUDIEREN können Grenzwinkel angegeben werden, ab denen Polygongruppen nicht mehr als Gruppe, sondern als Einzelobjekte behandelt werden. Beim SPIEGELN werden selektierte Punkte oder Polygone an einer vorzugebenden Ebene gespiegelt und dort ggf. auch miteinander verschmolzen. Das DREHEN UM NORMALEN und das VERSCHIEBEN ENTLANG NORMALEN berücksichtigt die Richtung der Normalenvektoren jedes selektierten Polygons bei den Bewegungsarten. Damit lässt sich z. B. eine Hülle um ein komplexes Modell erstellen, indem die duplizierten Oberflächenpolygone entlang der Normalen von der Oberflache wegbewegt werden. Ein konkretes Anwendungsgebiet sind z. B. Kleidungsstücke. Zu diesem Werkzeugkomplex gehört auch das Skalieren entlang der Normalen, bei dem das Polygon gleichmäßig um seine Normale vergrößert wird. Das MESSER-Werkzeug erzeugt entlang einer Schnittführung neue Punkte und Polygone. Der Schnitt kann auch auf eine Selektion von Polygonen beschränkt werden. Der MAGNET bewegt schließlich Punkte in seinem Wirkradius entsprechend der Mausbewegung mit. Es stehen in den Optionen des Magneten im Fenster AKTIVES WERKZEUG diverse Formen zur Auswahl, wie sich die Punkte um Umfeld des Magneten verhalten sollen.
Abbildung 1. 6: Spline-Grundobjekte
Abbildung 1. 7: 3D-Grundobjekte Die Abbildungen 1. 6 und 1. 7 zeigen Ihnen die so genannten „Grundobjekte" in CINEMA, also Formen und Objekte, die bereits fertig abgerufen und nicht erst selbst erstellt werden müssen. In CINEMA 4D sind alle diese Objekte parametrischer Natur, d. h. die Form jedes dieser Objekte kann in speziellen Dialogen weiter beeinflusst werden. So lassen sich neben den Größenverhältnissen noch Punkt- und Polygon-Zahlen vorgeben oder gezielt Rundungen hinzufügen. Zu den detaillierten Einstellmöglichkeiten für jedes dieser Objekte gelangen Sie durch einen Doppelklick auf das miniaturisierte Symbol des jeweiligen Objekts im OBJEKTE-Fenster, auf das wir noch zu sprechen kommen.
Abbildung 1.8: Verschiedene Spline-lnterpolationen
Natürlich können Splines auch manuell erstellt werden. Dazu stehen Ihnen die in Abbildung 1.6 abgebildeten Interpolationsmethoden zur Verfügung, die Sie zusammen mit den Grundobjekten im OBJEKTE-Menü abrufen können. Sie haben hier die Wahl zwischen AKIMA-SPLINES, B-SPLINES, BEZIER-SPLINES, FREIHAND-SPLINES, mit FORMELN erzeugten, LINEAREN oder KUBISCHEN SPLINES. Nachdem Sie in den PUNKTE-BEARBEITEN-Modus gewechselt und eine Spline-lnterpolation ausgewählt haben, können Sie durch Einfachklicken in ein Editorfenster Splinepfade erzeugen. Kücken und gleichzeitiges Ziehen der Maus bildet bei BEZIERSPLINES automatisch eine Tangente an dem erstellten Punkt aus, die sich weiter über deren Endpunkte skalieren und rotieren lässt. Manipulationen der Tangente mit gehaltener [^]-Taste bewirken ein „Brechen" der Tangente im Punkt, so dass beide Tangenten-Enden unabhängig voneinander bewegt werden können. Die anderen Interpolationsarten stellen zwar keine Tangenten zur Verfügung, jede Splineart kann jedoch auch nachträglich noch in jede andere umgewandelt werden. Auch hier bringt Sie ein Doppelklick auf das Spline-Symbol im OBJEKTE-Fenster zu einem kleinen Dialog, der Ihnen diese und andere Möglichkeiten bietet.
Abbildung 1.9: Szene-Objekte
Das Umfeld Ihrer Objekte bestimmen Sie über SZENE-OBJEKTE, die Sie ebenfalls im OBJEKTE-Menü finden (siehe Abbildung 1.9). Hier finden sich u. a. Kameras und Lichtquellen mit automatischer Ausrichtung, ein HINTERGRUND- und ein VORDERGRUND-OBJEKT für die automatisierte Einblendung z. B. von Bildmotiven oder Copyrightvermerken in ein Bild oder eine Animation; ein UMGEBUNGS-OBJEKT, mit dem sich Nebel und ambientes Licht in die Szene integrieren lassen, und ein STAGE-OBJEKT, mit dem in einer Animation z. B. zwischen verschiedenen Kameras umgeschaltet werden kann. Ein Großteil dieser Objekte lässt sich bereits aus dem vorhandenen Lichtquellen-lcon im Layout abrufen, ohne in das Menü wechseln zu müssen.
Abbildung 1.10: NURBS-Objekte
Besonders für die Modellierung organischer Formen sind NURBS-Objekte sehr hilfreich, die in dieser Form ab Version 6 in CINEMA Einzug gehalten haben. Sie sind vollkommen parametrisch konzipiert und erlauben daher interaktive und auch nachträgliche Veränderung aller Parameter, wie z. B. der Auflösung. Die verschiedenen NURBS-Objekte sind in Abbildung 1.10 als Symbole zusammengefasst. Neben den auch in anderen Programmen üblichen LOFT-, SWEEP-, LATHE- und EXTRUDE-NURBS findet sich in CINEMA 4D auch das sehr leistungsstarke HyperNURBS-Objekt, das in Verbindung mit niedrig aufgelösten Polygon-Objekte n schnell organisch geglättete Objekte erzeugen kann. Mit letzteren werden wir einen Großteil der kommenden Workshops bestreiten, da sie sich sehr flexibel einsetzen lassen. Die übrigen NURBS-Objekte sind aber nicht minder hilfreich, wenn es um organische Übergänge zwischen Splines geht oder um Objekte, die sich aus mehreren Splines zusammensetzen lassen.
Abbildung 1.11: Deformatoren
Die nächste Gruppe an Objekten sind die Deformatoren (siehe Abbildung 1.11). Mit ihnen lassen sich beliebige Objekte verformen. Auch Spezialeffekte, wie das Explodieren oder Schmelzen von Objekten, gehören dazu. Schließlich finden sich hier auch die für die Animation von Figuren nötigen Bones wieder. Die Philosophie von CINEMA 4D macht es hierbei möglich, Deformationen beliebig zu verschachteln und zu mischen. Dabei bleibt das Objekt unverändert, so dass man jederzeit zu dem ursprünglichen Modell zurückkehren kann.
Abbildung 1.12: Interaktive Werkzeuge
Auch sehr hilfreich sind die in der Abbildung 1.12 zusammengefassten interaktiven Werkzeuge wie das ARRAY- und das BOOLE-OBJEKT, das DUPLIZIEREN mit INSTANZEN-OPTION, METABALLS und das SYMMETRIE-OBJEKT (von links nach rechts). Anders als bei ähnlich benannten Werkzeugen anderer Hersteller oder älterer CINEMA-4D-Versionen können die Ergebnisse jederzeit modifiziert werden. Dies macht besonders das BOOLE-OBJEKT und das SYMMETRIE-OBJEKT zu wertvollen Hilfen bei der komplexen Modellierung. So können Schnittmengen beliebiger Objekte jederzeit verändert oder ergänzt werden. Die zu Grunde liegenden Modelle bleiben wie bei den Deformatoren unberührt.
Abbildung 1.13: Emitter- und Partikel-Modifikatoren
Bereits aus alteren Versionen bekannt ist das leistungsstarke Partikelsystem von CINEMA4D, das sich neben beliebigen Objekten auch animierten Modellen annehmen kann. Wie m der Abbildung 1.13 zu sehen, steht eine ganze Reihe zusatzlicher Manipulatoren für Partikelstrome zur Verfugung, die von WIND- über TURBULENZ- bis hin zu REFLEKTOR-OBJEKTEN mit optionaler Strahlteilung reicht. Besonders in Verbindung mit dem separat erhältlichen Programm Pyrocluster der Firma Cebas lassen sich realistisches Feuer, Rauch und Explosionen erzeugen. Wirksam unterstützen lässt sich dies zudem durch das neue Explosions-Plugin von CINEMA 4D, das in Version 7 Eingang gefunden hat. Näheres dazu in einem späteren Kapitel.
Abbildung 1.14: Selektionsmethoden und entsprechende Optionen
Abbildung 1.14 zeigt die angebotenen Selektionsmethoden, die sich - je nach ausgewählter Betriebsart - auf Punkte, Polygone oder ganze Objekte auswirken können. Neben einer LIVE-SELEKTION mit mehreren Optionen gibt es neben der RAHMENSELEKTION noch eine POLYGON- und eine FREIHAND-SELEKTION. Erstellte Selektionen können mit so genannten Wichtungen belegt werden, auf die dann Deformatoren, wie z. B. Bones, wirken können. Punkt- oder PolygonSelektionen lassen sich auch komplett sichern und gezielt mit Materialien belegen. Auch das vorübergehende Ausblenden von Selektionen ist möglich.
Funktionen, wie die Umwandlung von Punkt- in Polygonselektionen und umgekehrt (ganz rechts in Abbildung 1.14), erleichtern uns zusätzlich die Arbeit an komplexen Objekten. Die sinnvolle Unterteilung von Objekten in Selektionen wird somit zu einer Voraussetzung für professionelle Texturierung und Animation.
Abbildung 1.15: Sound-Objekte
Seit Version 6 sind auch Sound-Objekte in CINEMA 4D XL integriert (siehe Abbildung 1.15). Mit ihnen lassen sich Töne bestimmten Objekten zuordnen und Tondaten in Abhängigkeit von Abstand und Bewegung relativ zum Aufnahmeort in der Szene berechnen. Dabei fließen bei der Berechnung sogar physikalische Besonderheiten wie der Dopplereffekt in die Berechnung ein. Auch das Abmischen verschiedenen SoundDaten ist mit CINEMA 4D möglich. Die Möglichkeiten gehen bis zur Erstellung von Surround-Sound-Daten für Ihre Animationen. Töne und Sound-Daten können jedoch nicht direkt in CINEMA 4D „live" mit der Animation abgespielt werden. Die Montage von Bildern und Tönen muss in einem separaten Programm erfolgen. CINEMA 4D liefert also nur die entsprechend abgemixten Sound-Daten für die gewünschte Anzahl an Kanälen.
Abbildung 1.16: Einige Rendermethoden und Optionen
über die in der Abbildung 1.16 gezeigten Funktionen lassen sich schließlich die Bilder oder Animationen berechnen. Dabei haben Sie die Wahl zwischen der Berechnung eines aktiven Fensters, nur des aktiven Objekts, eines Bildausschnitts, einer Bild- oder Animationsberechnung mit nachfolgender Sicherung, wobei alle eingestellten Parameter berücksichtigt werden, und dem Aufruf eines speziellen Einstellungsfensters für die vorhandenen Optionen der Bildberechnung (von links nach rechts). Gegenüber Version 6 verbergen sich hinter diesen Funktionen komplett neu überarbeitete Programmteile, die nicht nur effektiver und höher wertiger arbeiten als die alten Methoden, sondern zudem teilweise noch schneller berechnet werden. Hinzu kommen Fotorealismus durch Simulation globaler Beleuchtung und realistische Lichtbrechung in Luft und transparenten Materialien. Ein derart hochwertiges und schnelles Berechnungs- und Darstellungssystem gibt es bislang nur in sehr viel
kostspieligeren Programmen und stellen daher eine echte Sensation dar. Ich gehe auf die Neuerungen in diesem Segment gesondert in einem späteren Kapitel ein.
1.1.5
Die verschiedenen Fenster von CINEMA 4D
Herzstück des Interfaces von CINEMA 4D XL ist das Ansichtsfenster (siehe Abbildung 1.17). Über Optionen in den Menüs jeder einzelnen Ansicht können Sie die Darstellungsqualität und die Richtung der Sicht auf die Szene separat steuern. Die farbliche Ausgestaltung der Achsen, des Rasters und des Hintergrunds lässt sich über die Programmvoreinstellungen vorgeben. Aktive Objekte werden mit rötlichen, winkligen Begrenzungen gekennzeichnet. Durch „Anfassen" einzelner Objektachsen mit dem Mauszeiger können Bewegungen auf die selektierte Achse begrenzt werden. Orangefarbene Anfasser an parametrischen Objekten erlauben die Veränderung von Größe und Kantenrundung direkt in den Ansichten. Über die kleinen Icons am rechten oberen Rand jeder Ansicht lassen sich die jeweiligen Blickwinkel auf die Objekte verschieben, die Ansicht mittels einer ZoomFunktion vergrößern oder verkleinern, oder um die Objekte rotieren. Letztere Funktion kann nur in perspektivischen Ansichten funktionieren, da die übrigen Ansichten auf die XY-, ZY- oder XZ-Ebene standardisiert sind. Das Icon für die Rotation der Ansicht ist in diesen Fenstern zwar vorhanden, bleibt jedoch ohne Funktion.
Abbildung 1.17: Die Ansichtsfenster von CINEMA 4D
Über das BEARBEITEN-Menü jeder Ansicht können selektierte Objektteile oder ganze Objekte fensterfüllend dargestellt werden, ohne auf die Zoom-Funktion oder die Lupe zurückgreifen zu müssen.
Abbildung 1.18: Objekte-, Struktur- und Browser-Fenster
Neben den Ansichten sind die OBJEKTE-, STRUKTUR- und BROWSER-Fenster sehr wichtig für die Arbeit in CINEMA 4D (siehe Abbildung 1.18). Im OBJEKTE-Fenster werden alle Elemente einer Szene verwaltet. Hier können Hierarchien angelegt sowie Namen und Eigenschaften vergeben werden. Wie bereits weiter oben beschrieben, können zusatzliche Optionen - vorwiegend von parametrischen Objekten und Splines - in diesem Fenster durch einen Doppelklick auf das Symbol eines Objektes geöffnet werden. Ein Doppelklick auf den Namen eines Objekts öffnet ein kleines Textfenster, in dem der Name des Objektes verändert werden kann. Neben der bereits beschriebenen roten Einrahmung des aktiven Objekts in den Ansichtsfenstern, wird das aktive Objekt im OBJEKTE-Fenster zusätzlich in roter Farbe geschrieben. Sie haben hier daher immer eine gute Kontrolle, ob tatsachlich das richtige Objekt ausgewählt wurde. Im STRUKTUR-Fenster haben Sie die numerische Kontrolle über Punkt- und UVWKoordinaten oder Polygon-Eckpunkte. Da hier die Informationen eines kompletten Objekts gleichzeitig dargestellt werden können, wird dieses Fenster zu einem wertvollen Arbeitsmittel bei der Manipulation größerer Punkt- oder Polygongruppen.
Im BROWSER-Fenster schließlich können Sie Ihre Projekte organisieren oder vorhandene Materialien und Szenen ordnen, über verkleinerte Abbildungen von Materialien, Modellen und Szenen lassen sich auch größere Datenbestände verwalten. Derart zusammengestellte Kataloge lassen sich verwalten und sichern, um jederzeit auf einzelne Elemente daraus zurückgreifen zu können. Der Browser kann also z. B. als Bilderkatalog für Texturen und Materialien benutzt werden, um thematisch geordnete Oberflächen schnell nach der geeigneten Textur zu durchsuchen. Im KOORDINATEN-MANAGER haben Sie jederzeit die Kontrolle über exakte Koordinaten eines selektierten Objekts, Punkts oder Polygons. Hier lassen sich die aktuellen Positionen und Abmessungen abfragen. Außerdem erlauben die Zahlenfelder direkte Eingaben. Objekte können so numerisch exakt positioniert werden. Die benutzten Einheiten lassen sich in den PROGRAMM-VOREINSTELLUNGEN beliebig wechsein. Daneben findet sich das Fenster mit der Aufschrift AKTIVES WERKZEUG. Der Inhalt dieses Fensters passt sich laufend den Möglichkeiten des gerade ausgewählten Werkzeugs an. Ich habe bereits mehrfach z. B. im Zusammenhang mit den Selektionsmethoden oder den Modelling-Werkzeugen darauf hingewiesen.
Abbildung 1.19: Koordinaten-Manager, Aktives-WerkzeugFenster und Snap-Einstellungen Hier können Sie also z. B. das MESSER-TOOL auf eine Selektion beschränken oder die Höhe einer Extrusion vorgeben. Bei Werkzeugen, die auf Wertangaben angewiesen
sind, wird die Modifikation des Objekts erst nach dem Betätigen der Schaltfläche ANWENDEN in diesem Fenster durchgeführt. Wenn Sie nicht auf exakte Wertangaben angewiesen sind, so funktionieren viele der erwähnten Werkzeuge jedoch auch interaktiv in den Ansichten durch Mausbewegung. Das dritte Fenster mit der Aufschrift SNAP-EINSTELLUNGEN ist besonders beim maßgenauen Konstruieren wichtig. Hier können Sie Arbeitsebenen, Raster und Fangpunkte aktivieren, um neue Punkte und Splines an bereits vorhandenen Elementen in der Szene einrasten zu lassen. Radien und Bezugskoordinaten lassen sich hier vorgeben. Beim freien Modellieren sollten die Snap-Funktionen deaktiviert werden, um ein unbeschränktes Setzen von Punkten und Objekten zu gewährleisten.
Abbildung 1.20: Das Materialien-Fenster
Schließlich wird der Bildschirm am unteren Rand vom MATERIALIEN-Fenster begrenzt, das die gleiche Funktionalität wie der aus älteren Versionen bekannte Materialmanager besitzt. In diesem Fenster erzeugen und verwalten Sie Materialien, die Sie dann per Drag & Drop auf die Modelle im OBJEKTE-Fenster ziehen und somit zuweisen können. Ein Doppelklick auf die Materialkugeln öffnet ein Einstellungsfenster für die Materialeigenschaften; ein Doppelklick auf die Materialbezeichnung eröffnet die Möglichkeit, sie abzuändern. Da CINEMA 4D sowohl volumetrische wie auch kanalbasierte Materialien unterstützt, kann ein Doppelklick auf eine Materialkugel unterschiedliche Dialoge öffnen. So gibt es z. B. für die mittlerweile in Version 7 integrierten SLA-Shader des Herstellers bhodilNUT komplett eigene Dialoge. Trotzdem erscheinen diese Materialien im MATERIALIEN-Fenster wie ein normales CINEMA-4D-Material. Um Ihnen einen Eindruck von der prinzipiellen Arbeitsweise mit CINEMA 4D zu geben, beschäftige ich mich nun im zweiten Teil dieses Kapitels mit dem Abiauf einer typischen Modellierungsaufgabe. Ich habe mir dazu die Umsetzung von Kolben, Pleuel und Kurbelwelle eines Automotors vorgenommen, ohne dabei nach einer speziellen technischen Zeichnung vorzugehen. Wir werden im Laufe dieses Arbeitsbeispiels einen großen Teil der Polygon- und Spline-Werkzeuge in Aktion erleben, sowie etwas über die Planung von Projekten erfahren. Um dabei auch etwas Ihre Sinne für die richtige Wahl von Modellierungsmethoden zu schärfen, werde ich das Beispiel mit drei Modellierungsvariationen beginnen, die alle mehr oder weniger zum gleichen Ergebnis führen. Trotz ähnlicher Ergebnisse unterscheiden sich die Vorgehensweisen und bringen unterschiedliche Vor- und Nachteile mit sich.
Obwohl ich mich bemühe, gerade bei den ersten Beispielen dieses Buchs alle benutzten Werkzeuge und Objekte ausführlich in Funktion und Anwendung zu beschreiben, möchte ich Sie jedoch bitten, auch das Handbuch nicht zu vergessen. Ich kann in die folgenden Arbeitsbeispiele nicht alle Funktionen von CINEMA 4D mit einfließen lassen. Dafür ist die Software viel zu komplex. Um das gesamte Potenzial des Programms auszuschöpfen ist jedoch die Kenntnis aller Werkzeuge und Techniken notwendig. Und wie wichtig die richtige Wahl der Werkzeuge und Methoden sein kann, wird folgendes Beispiel zeigen.
1.2 Ein Arbeitsbeispiel Wie bereits angekündigt, möchte ich dieses Arbeitsbeispiel mit der Problematik der Wahl der richtigen Arbeitsmethoden verbinden. Oftmals geht man unüberlegt an eine Aufgabe heran, sei es weil man unter Zeitdruck steht oder die technischen Herausforderungen auch einfach scheinender Modelle unterschätzt. Ich versuche dies an der Modellierung des Kolbens zu verdeutlichen und stelle Ihnen dazu drei verschiedene Techniken zur Wahl.
1.2.1
Die Boole-Methode
Werfen wir zuerst einen Blick auf die komplette Szene (Abbildung 1.21). Sie erkennen eine Kurbelwelle samt Pleuel und Kolben. Dabei wäre es natürlich zweckmäßig, dass die Anordnung tatsächlich funktionsfähig ist und somit realistisch animiert werden kann.
Abbildung 1.21: Die komplette Anordnung
Um dies zu gewährleisten, sollte die Anordnung in die in Abbildung 1.22 einzeln dargestellten Objekte aufgeteilt werden. Sie erkennen dort auf der linken Seite die Pleuelstange in zwei Ansichten und weiter unten einen Kolben in drei verschiedenen Ansichten. Auf der rechten Seite ist die Kurbelwelle abgebildet.
Abbildung 1.22: Die einzelnen Baugruppen
Technisch etwas anspruchsvoller ist dabei der Kolben, da er sowohl geschwungene wie auch durch Öffnungen unterbrochene Abschnitte hat. Ich möchte den Kolben daher etwas näher betrachten und Ihnen verschiedene Möglichkeiten vorstellen, ein solches Objekt - mal mehr, mal weniger geschickt - anzugehen. Ich beginne mit der „Boole-Methode", wie ich sie einmal nennen möchte, bei der man zwar recht schnell die Form annähern, jedoch dann vor unlösbare Probleme gestellt werden kann. Wir starten dabei mit einem Objekt, das bereits die Grundform recht gut beschreibt, einem Zylinder. Wir können es uns dabei recht einfach machen und diese Grundform direkt auf dem entsprechenden OBJEKTE-Menü, bzw. aus dem Icon-Menü in der Kopfleiste des Layouts abrufen. Es wird sich dann eine Situation wie in Abbildung 1.23 ergeben. Standardmäßig erscheinen neue Objekte immer im absoluten Nullpunkt des Welt-Koordinatensystems. Da man nur in den seltensten Fällen mit den Abmessungen von Grundobjekten einverstanden sein wird, gibt es diverse Einstellmöglichkeiten für jedes Objekt, die sich durch einen Doppelklick auf das verkleinerte Symbol des Objekts im OBJEKTEFenster erreichen lassen.
Abbildung 1.23: Aufrufen eines Zylinders
In unserem Fall ist dies der kleine blaue Zylinder. Der Doppelklick darauf sollte ein Fenster wie in Abbildung 1.24 offnen. Der Dialog enthalt dabei Einstellmöglichkeiten für den Radius, die Hohe oder z. B. die Unterteilung des Zylinders entlang des Umfangs. Hier liegt die große Starke parametrischer Objekte. Die Werte können jederzeit durch abermaliges Offnen des entsprechenden Dialogs verändert werden.
Abbildung 1.24: Einstellen der Zylinder-Parameter, Konvertieren des Grundobjekts und Umschalten m den Punkt-Modus
So ist es also möglich, auch noch nachträglich das Objekt mit einer abgerundeten Kante zu versehen oder die Unterteilung zu erhöhen, falls eine Nahaufnahme notig ist und keine störenden Kanten zu sehen sein sollen. Der Nachteil ist dabei jedoch, dass wir keinen direkten Zugriff auf einzelne Punkte oder Polygone eines Grundobjekts haben. Deren Anzahl und Lage wird vollständig von den eingegebenen Werten gesteuert. Ist dennoch ein Zugriff auf Punkte und Polygone notwendig, muss das Objekt konvertiert werden. Dazu genügt ein Klick auf das GRUNDOBJEKTE-KONVERTIEREN-lcon, das ebenfalls in Abbildung 1.24 oben rechts eingeblendet ist. Nun muss nur noch die gewünschte Betriebsart ausgewählt werden, also z. B. der PUNKTE-BEARBEITENModus, um auch tatsächlich die Punkte angezeigt zu bekommen.
Abbildung 1.25: Optimieren der Punkte des Zylinders
Als letzten Schritt fuhren wir das OPTIMIEREN des Objekts durch. Dies mag auf den ersten Blick verwirren, da das Objekt keinerlei Makel aufweist. Das OPTIMIEREN, also m diesem Fall das Zusammenfassen von Punkten, die den gleichen Platz im Raum einnehmen, ist deshalb notig, da ein Grundobjekt wie der Zylinder aus bis zu drei separaten Teilen bestehen kann: dem eigentlichen Zylinder und den oberen und unteren Deckflachen, die diesen verschließen. Da die Punkte der Deckflachen und des Zylinders am oberen und unteren Rand des Zylinders deckungsgleich aufeinander liegen, kommen diese Punkte an den Randern jeweils doppelt vor. Das Optimieren verbindet die paarweise vorliegenden Punkte und loscht dabei die nun überflüssigen Punkte (siehe Abbildung 1.25).
Sie finden den OPTIMIEREN-Befehl im STRUKTUR-Menü.
Abbildung 1. 26: Selektieren der inneren Polygonkreise
Im nächsten Schritt wollen wir den Zylinder innen aushohlen, damit nur ein rohrf ö r m i g e s Objekt übrig und wählen Sie die LIVE-SELEKTION aus den Selektionsmethoden aus. Sie finden die Selektionsmethoden im Menü SELEKTION oder gleich per Icon in der Kopfleiste des Layouts. Das entsprechende Icon sieht aus wie ein blauer Mauszeiger. Um die Art der Selektion weiter zu konkretisieren, gibt es weitere Einstellmöglichkeiten zu diesem Werkzeug im Fenster AKTIVES WERKZEUG. Deaktivieren Sie dort NUR SICHTBARE ELEMENTE SELEKTIEREN. Dies garantiert, dass auch Elemente ausgewählt werden, die in der benutzten Ansicht verdeckt sind. Was damit gemeint ist, wird jetzt in der Anwendung deutlicher. Fahren Sie mit dem Mauszeiger in die XZAnsicht, also der Ansicht, in der Sie den Zylinder direkt von oben sehen, und überstreichen Sie mit gehaltener linker Maustaste den inneren Polygonkreis. Die Abbildung 1. 26 zeigt dies im rechten Bereich schematisch. Den Erfolg dieser Aktion erkennen Sie daran, dass die selektierten Polygone rot umrandet dargestellt werden. Fälschlicherweise selektierte Polygone können Sie durch die zusätzlich zur Maustaste gehaltene [ S t r g ] - bzw. [Ctrl]-Taste wieder deselektieren. Die zusätzlich zur Maustaste gehaltene [^]-Taste dagegen fügt neu ausgewählte Punkte oder Polygone den bereits ausgewählten hinzu. Jedes selektierte Polygon wird neben der rotlichen Umrandung noch durch eine sichtbare NORMALE gekennzeichnet. Eine NORMALE ist eine kurze gelbliche Linie, deren Verlauf die Richtung der Oberflache eines Polygons definiert. NORMALEN gehen immer von der Außenseite eines Polygons aus, von der Innenseite ist dagegen nur ein kleiner Kreis zu erkennen. Dies muss Sie nun nicht weiter irritieren. Es ertaubt uns jedoch, in einer anderen Ansicht auf den Zylinder zu erkennen, dass nicht nur der von uns angeklickte Polygonkreis ausgewählt wurde, sondern auch der entsprechende Polygonkreis im Boden des Zylinders. Sie erkennen dies an den kleinen gelben Linien, die vom Boden des Zylinders nach unten weisen. Dort müssen also auch Polygone ausgewählt sein. Diese „Doppelselektion" wurde nur durch die ausgeschaltete Option im AKTI-
VES-WERKZEUG-Fenster möglich. Hatten wir dort den Haken belassen, waren tatsachlich nur die angeklickten Polygone auf dem oberen Deckel des Zylinders ausgewählt worden.
Abbildung 1.27: Verbindung der selektierten Polygone Für den nächsten Arbeitsschritt, das Aushohlen des Zylinders, sollten wir zuerst für eine gute Sicht auf das Modell sorgen Benutzen Sie dafür das Symbol ganz rechts oben m der Titelleiste des Ansichtsfensters mit der perspektivischen Sicht auf den Zylinder. Das Klicken auf dieses Symbol sorgt für eine bildschirmfüllende Vergrößerung der Ansicht, bei der man das Symbol betätigt hat. Benutzen Sie jetzt das Symbol gleich links daneben mit den beiden Pfeilen, die einen Punkt umkreisen. Mit diesem Symbol rotieren Sie um das aktive Objekt herum. Es findet also eine Kamerabewegung statt. Das Objekt selbst bleibt unbewegt. Benutzen Sie das Symbol so, dass Sie es mit dem Mauszeiger bedecken und dann die Maustaste gedruckt halten. Wenn Sie nun die Maus bewegen, rotiert die Ansicht entsprechend mit. Versuchen Sie einen solchen Blickwinkel einzustellen, dass Sie die oberen selektierten Polygone als flache Scheibe erkennen können. Da wir für die nächste Aktion beide selektierte Polygonkreise sehen müssen, sollten Sie nun die Darstellungsart umschalten. Dies erledigen Sie im Menü DARSTELLUNG im Ansichtsfenster. Wählen Sie dort entweder QUADER oder DRAHTGITTER aus. Beide Darstellungsarten erlauben einen Blick durch die Polygone hindurch und machen die Objekte somit transparent Sie sollten ein Ergebnis wie in
Abbildung 1.27 erzielen. Lassen Sie sich dabei nicht von den senkrechten Verbindungslinien in der Abbildung irritieren. Diese erzeugen wir erst im nächsten Schritt. Sie sollten jedoch grundsätzlich einen ähnlichen Blickwinkel auf den Zylinder haben.
Wählen Sie jetzt im STRUKTUR-Menü das BRÜCKE-Werkzeug aus. Mit diesem Werkzeug lassen sich selektierte Polygone miteinander verbinden, wobei die Polygone selbst nach der Aktion gelöscht werden. Bewegen Sie den Mauszeiger zu einer Ecke eines beliebigen Polygons im oberen selektierten Polygonkreis. Betätigen Sie nun die Maustaste und halten Sie diese gedrückt. Bewegen Sie die Maus nach unten in Richtung des zweiten selektierten Polygonkreises. Sie sollten eine Linie erkennen können, die vom oberen Polygon nach unten führt. Steuern Sie mit der Maus das Polygon und dort auch exakt die Ecke an, die dem Polygon und der Ecke oben entspricht. Die Linie am Mauszeiger sollte also eine senkrechte Verbindung zweier sich entsprechender Polygone darstellen. Wenn Sie die Maustaste nun loslassen, erstellt CINEMA 4D automatisch neue Verbindungspolygone zwischen den beiden Polygonkreisen. Dabei werden die Polygonkreise gelöscht. An deren Stelle ist durch das BRÜCKE-Werkzeug eine Art Röhre entstanden (siehe Abbildung 1.27).
Abbildung 1.28: Der „entkernte" Zylinder
Noch anschaulicher wird diese Verwandlung des Zylinders, wenn Sie die Darstellungsart im Menü DARSTELLUNG wieder auf QUICK-SHADING umschalten. Vielleicht benutzen Sie wieder das ROTIEREN-Symbol im Ansichtsfenster, um von schräg oben in den Zylinder schauen zu können. Wie Sie in der Abbildung 1.28 erkennen können, ist der Zylinder nun zu einem dickwandigem Rohr geworden. Kücken Sie erneut einmal auf das FENSTER-Symbol rechts oben in der Titelleiste der Ansicht, damit Sie wieder das Fenster mit den vier verschiedenen Ansichten vor sich haben. Im nächsten Schritt möchte ich die Wanddicke des Zylinders verringern. Dazu wechseln Sie in den PUNKTE-BEARBEITEN-Modus durch einfaches Anklicken des Symbols und wählen Sie erneut das LIVE-SELEKTION-Werkzeug aus. Achten Sie weiterhin
im Fenster AKTIVES WERKZEUG darauf, dass die Option der Selektion nur sichtbarer Elemente deaktiviert ist (siehe Abbildung 1.29).
Abbildung 1.29: Selektieren der inneren Punktkreise
Selektieren Sie in der Ansicht von oben auf den Zylinder den kompletten inneren Punktring, wie in der Abbildung 1.29 zu erkennen. Vergleichbar mit selektierten Polygonen verändert sich dabei auch die Farbe der Punkte von braun zu orange. Sie haben daher immer eine gute Kontrolle, ob Sie nicht vielleicht einen Punkt vergessen haben. Die Selektion kann dabei durch ein kontinuierliches Überstreichen der Punkte mit dem Mauszeiger und dabei gehaltener Maustaste erfolgen. Sie müssen also nicht jeden Punkt einzeln anklicken. Haben sie alles richtig gemacht, sind nun die beiden Punktkreise oben und unten ausgewählt. Wählen Sie in der waagerechten lconleiste das SKALIEREN-Werkzeug aus und deselektieren Sie die Y-Achse durch Ausschalten des Y-lcons, wie in Abbildung 1.30 unten gezeigt. Wechseln Sie daraufhin wieder mit dem Mauszeiger in die Ansicht, in der Sie den Zylinder von oben sehen können und bewegen Sie die Maus mit gehaltener Maustaste langsam nach rechts und links. Sie müssten jetzt beobachten können, wie die selektierten Punkte entweder weiter nach außen zum Rand des Zylinders, oder weiter nach innen zum Zentrum des Zylinders hin wandern. Wenn Sie gleichzeitig einen Blick auf den KOORDINATEN-MANAGER werfen, können Sie dort die Veränderungen auch numerisch verfolgen. Stellen Sie einen X- und ZWert von 370 m für die selektierten Punktkreise ein. Sie können dies durch die beschriebene Mausbewegung erreichen, oder, was exakter funktioniert, die Werte direkt in den KOORDINATEN-MANAGER eintragen. Nach Anklicken der ANWENDEN-Schaltfläche werden die Werte dann auf die selektierten Punkte übertragen (siehe Abbildung 1.30 und 1.31).
Abbildung 1.30: Skalieren der Selektion
Nach diesem Schema, also entweder durch Arbeiten mit der Maus oder durch direkte Eingabe im KOORDINATEN-MANAGER, können Sie alle Werte bezüglich Position, Größe und Winkel eines aktiven Objekts, selektierter Punkte, Polygone oder Texturen verändern.
Abbildung 1.31: Zylinder mit verringerter Wanddicke
Im nächsten Schritt soll die Oberkante des Zylinders die geschwungene Form bekommen, die einen Kolben auszeichnet. Dazu müssten Teile des Zylinders weggeschnitten werden. Eine Negativform erzeugen Zuerst müssen wir definieren, weiche Form die Schnittführung haben soll Dazu eignen sich besonders gut SPLINES, die Sie entweder im OBJEKTE-Menü oder in dem horizontalen Icon-Menü finden. Wählen Sie dort das BEZIER-Spline, das als einzige Spline-Art auch Tangenten zur exakten Kurvensteuerung anbietet. Um Splines erzeugen zu können, müssen Sie sich weiterhin im PUNKTE-BEARBEITEN-Modus befinden. Schatten Sie die Darstellungsart im Ansichtsfenster mit der frontalen Ansicht, also der XY-Ansicht, auf DRAHTGITTER oder QUADER und klicken Sie dort links beginnend eine Kurve aus fünf Punkten, wie sie die Abbildung 1.32 unten in der Einblendung zeigt.
Denken Sie daran, dass Sie Tangenten an Punkten durch gleichzeitiges Ziehen mit der Maus bei gehaltener Maustaste erzeugen können. Einfach Klicken mit der Maus erzeugt einen Spline-Punkt ohne Tangente. Alle fünf Punkte sollten Tangenten besitzen. Haben Sie aus Versehen Punkte ohne Tangenten erzeugt, ist dies auch kein Problem. Bei BEZIER-Splines lassen sich Punkte auch nachträglich noch mit Tangenten ausstatten. In einem solchen Fall selektieren Sie die entsprechenden Punkte z. B. mit der bekannten LIVE-SELEKTION und wählen dann im Menü STRUKTUR unter dem Eintrag SPLINE BEARBEITEN den Punkt WEICHE INTERPOLATION aus. Der ebenfalls dort zu findende Eintrag HARTE INTERPOLATION entfernt dagegen bei Bedarf die Tangente von einem Punkt, so dass es zu einer harten Ecke an dem Punkt kommen kann. Sie können in einem BEZIER-Spline also weiche Kurvenabschnitte mit geraden Strecken kombinieren. Haben Sie alle Punkte gesetzt, kontrollieren Sie deren Lage im STRUKTUR-Fenster (siehe Abbildung 1.32). Ein doppeltes Anklicken eines Zahlenfeldes macht dies editierbar. Sie können also die exakten Positionen gleich dort eintragen und aus der Abbildung übernehmen. Sie werden zudem feststellen, dass im STRUKTUR-Fenster angeklickte Punkte auch in den Ansichtsfenstern aktiviert werden. So haben Sie immer Kontrolle darüber, welchen Punkt Sie gerade bearbeiten. Zudem werde Sie bemerken, dass Tangenten immer nur an dem aktiven und somit selektierten Punkt sichtbar sind. Dies dient der Übersichtlichkeit.
Abbildung 1.32: Punktpositionen und Tangentensteigungen im Struktur-Fenster Wenn Sie die Punkt-Positionen entsprechend übernommen haben, versuchen Sie durch Verlängern, Verkürzen oder Verdrehen der einzelnen Tangenten einen Kurvenverlauf wie in Abbildung 1.33 zu reproduzieren. Es kommt dabei nicht auf das penible Einhalten von Werten an, Sie können der Kurve also durchaus auch eine hiervon abweichende Form geben. Die Punktpositionen sollten jedoch beibehalten werden und die Kurve sollte an keiner Stelle oben über den Zylinder hinausragen. Der Spline soll schließlich die Schnittkante bilden.
Abbildung 1.33: Mit Tangenten geformter Bezier-Spline
Da alle neuen Objekte in CINEMA 4D im Ursprung des Welt-Koordinatensystems erzeugt werden, wurde auch der Spline mitten im Zylinder erzeugt. Der nächste Arbeitsschritt besteht also aus dem Verschieben des Splines vor den Zylinder. Da nun der Spline als Ganzes verschoben werden soll, müssen Sie zuerst in die MODELLBEARBEITEN-Betriebsart umschalten. Die Spline-Punkte werden daraufhin ausgeblendet und nur die Kurve bleibt sichtbar. Schalten Sie dann m der horizontalen lconleiste m den VERSCHIEBEN-Modus und schalten Sie alle Achsen bis auf die Z-Achse aus (siehe Abbildung 1.34). Bewegungen können nun nur noch entlang der Z-Achse des aktiven Objektes erfolgen. Klicken Sie jetzt in die seitliche Ansicht oder die Ansicht von oben auf die Objekte und halten Sie die Maustaste gedrückt. Beim Verschieben der Maus wird nun der Spline mitbewegt. Halten Sie gleichzeitig den KOORDINATEN-MANAGER im Auge und stellen Sie per Mausbewegung oder durch direkte Zahleneingabe eine Z-Position von -280 m ein. Die Spline-Kurve sollte sich dann ein gutes Stück vor dem Zylinder befinden.
Abbildung 1.34: Verschiebung des Splines vor den Zylinder
Um aus der Spline-Kurve jetzt ein massives Objekt zu erzeugen, verwenden wir ein
EXTRUDE-NURBS. Rufen Sie dieses NURBS-Objekt durch Auswählen aus dem Icon-Menü auf. Das lcon ähnelt da Klicken Sie im OBJEKTE-Fenster auf das Wort Spline-Objekt und ziehen Sie dies mit gehaltener Maustaste auf das Wort Extrude-NURBS. Durch derartige Drag & Drop-Aktionen können Sie Objekte zu Gruppen zusammenfassen oder hierarchische Beziehungen herstellen. Vor dem EXTRUDE-NURBS wird dann ein kleines Pluszeichen erscheinen, das immer dann vor einem Objekt erscheint, wenn weitere Objekte darunter eingeordnet wurden. Ein Klick auf dieses Pluszeichen „klappt" wie ein Filemanager dann die Hierarchie auf, und man hat wieder Zugriff auf die untergeordneten Objekte. So können Sie jederzeit ein untergeordnetes Objekt wieder erreichen, oder auch wieder per Drag & Drop aus der Hierarchie herausziehen. Ziehen Sie dazu das Objekt einfach an die leere Stelle im OBJEKTE-Fenster direkt über dem übergeordneten Objekt.
Abbildung 1.35: Extrudierung des Splines mit einem Extrude-NURBS
Diese Art der Gruppierung von Objekten dient nicht nur der Übersichtlichkeit, sondern macht viele NURBS, Generatoren oder Deformatoren erst funktionsfähig. In diesem Fall haben wir dem EXTRUDE-NURBS das Spline durch die Unterordnung zugewiesen. Sie sollten daher in den Ansichten eine Veränderung beobachten können, denn das EXTRUDE-NURBS sorgt für die Verschiebung von Splines in eine bestimmte Richtung. Um die Lange und Richtung der Verschiebung einstellen zu können, klicken Sie doppelt auf das kastenförmige kleine Symbol des EXTRUDE-NURBS im OBJEKTE-Fenster. Ein Dialog wie in Abbildung 1.35 sollte sich offnen. Übernehmen Sie die Zahlenwerte aus der Abbildung und bestätigen Sie die Veränderungen über die OK-Schaltfläche.
Abbildung 1.36: Der extrudierte Spline im Zylinder
Die Einstellungen sorgen dafür, dass die Spline-Fläche, wie in Abbildung 1. 36, den Zylinder komplett durchdringt. Falls Ihnen die Schnittführung dann nicht mehr gefallt, können Sie diese durch Veränderung der Spline-Tangenten noch immer verandern. Das EXTRUDE-NURBS wird sich simultan anpassen und den Veränderungen folgen. Da das Wegschneiden von Objektteilen nur mit vollständig geschlossenen Objekten funktioniert, muss unser Extrude-NURBS noch etwas weiterentwickelt werden. Wechseln Sie dazu in den PUNKTE-BEARBEITEN-Modus und klicken Sie das SplineObjekt im OBJEKTE-Fenster einmal an. Sie sollten nun wieder die Spline-Punkte in den Ansichten erkennen können. Um nun dem Spline weitere Punkte hinzufügen zu können, reicht kein einfaches Klicken mit der Maus. Dies funktioniert nur direkt beim Erstellen des Splines. Nachtragliches Hinzufugen muss durch Anklicken von PUNKTE HINZUFUGEN im STRUKTUR-Menü eingeleitet werden. Zudem ist Ihnen sicherlich die Farbgebung des Splines aufgefallen. Ein Ende des Splines ist gelb, das andere rötlich. Das gelbe Ende markiert den Anfang eines Splines und somit den Punkt mit der Nummer o im STRUKTUR-Fenster. Das rötliche Ende ist also der Schluss des Splines und repräsentiert den letzten Punkt in der STRUKTUR-Liste. Neue Punkte werden immer am Ende eines Splines angefügt. Wenn Sie also einen Punkt hinzufügen, wird immer das rötliche Ende des Splines mit dem neuen Punkt verbunden.
Abbildung 1. 37: Verlängerung des Splines
Sind Sie meinen Anweisungen gefolgt, sollte Ihr rotes Spline-Ende in der XY-Ansicht rechts liegen. Dort werden wir jetzt zwei neue Punkte anfügen, die diesmal nicht exakt auf bestimmten Positionen liegen müssen. Sie sollten ungefähr so wie in Abbildung 1. 37 platziert werden. Damit Sie die Punkt so setzen können, müssen Sie die [Strg]-/[Ctrl]-Taste zusätzlich zum Mausklick halten. Die neuen Punkte sollten auf jeden Fall außerhalb des Zylinders liegen. Sie werden noch wahrend des Hinzufügens der Punkte bemerken, wie das EXTRUDE-NURBS die Form anpasst. Sind die beiden Punkte entsprechend gesetzt, verbleibt nur noch eine Lücke zwischen dem ersten Punkt und dem jetzt neuen letzten Punkt des Splines. Diese Lücke verschließen Sie im Spline-Dialog, der sich durch einen Doppelklick auf das kleine Spline-Symbol im OBJEKTE-Fenster öffnet (siehe Abbildung 1. 38). Dort aktivieren Sie die Schließung des Splines durch Abhaken der gleichnamigen Option.
Abbildung 1, 38: Schließen des Splines
Abbildung 1. 39: Boole-Operation zwischen Extrude-NURBS und Zylinder
Nach Bestätigung über die OK-Schaltfläche wird nicht nur der Spline geschlossen, sondern es werden auch neue verschließende Flächen vorne und hinten ergänzt. Wenn Sie sich erinnern, wir hatten im EXTRUDE-NURBS die Erzeugung von DECKFLÄ-
CHEN aktiviert. Diese konnten bislang jedoch noch nicht erzeugt werden, da keine geschlossenen Linienzüge vorlagen. Die Vorarbeiten sind damit abgeschlossen. Wir können diese Form jetzt mit dem Zylinder interagieren lassen. Dazu benotigen wir das BOOLE-GRUNDOBJEKT, das Sie im OBJEKT-Menü oder in den Icon-Menüs abrufen können. Das Symbol ähnelt einer blauen Kugel, aus der ein grünes Stück herausgetrennt wurde. BOOLE-Objekte kennen mehrere Betriebsarten, die exakt definieren, welche Teile der Objekte gelöscht und welche sichtbar bleiben sollen. Klicken Sie daher doppelt auf das kleine Symbol des BOOLE-Objekts im OBJEKTE-Fenster und schalten Sie den Modus A GESCHNITTEN B ein. Dies bewirkt, dass nur die Schnittmenge zweier Objekte sichtbar bleibt. Die Buchstaben A und B bezeichnen dabei die Reihenfolge zweier Objekte, oder auch zweier Objektgruppen, die unter dem BOOLE-Objekt eingeordnet sind. Das AObjekt ist das obere, das B-Objekt das untere Objekt unter dem BOOLE-Objekt. Bei dem Modus A GESCHNITTEN B ist dies zwar nicht von Belang, aber bei den anderen Betriebsarten - wie A MINUS B - kann eine falsche Reihenfolge zu unerwünschten Ergebnissen führen. Ordnen Sie jetzt nacheinander das EXTRUDE-NURBS und den ZYLINDER per Drag & Drop auf das Wort Boole im OBJEKTE-Fenster unter dem BOOLE-Objekt ein. Wie gehabt klappt ein Mausklick auf das Pluszeichen vor dem BOOLE-Objekt die Hierarchie auf (siehe Abbildung 1. 39).
Abbildung 1. 40: Hinzufügen eines Zylinders
Sollte die Reihenfolge von EXTRUDE-NURBS und Zylinder bei Ihnen umgekehrt sein, so ist dies bei diesem BOOLE-Modus nicht von Belang. Die Schnittmenge bleibt identisch. Sie können die Reihenfolge jedoch wiederum durch Drag & Drop selbst verändern und der Abbildung somit angleichen.
Hinzufügen der Öffnungen Da dies bislang so gut funktioniert hat, probieren wir die gleiche Technik nun nochmals aus, um die beiden Löcher in den Zylinder zu schneiden. Rufen Sie dazu einen neuen ZYLINDER aus dem OBJEKTE-Menü oder direkt aus dem Icon-Menü der Grundobjekte ab und tragen Sie die Werte aus Abbildung 1. 40 in den ZYLINDER-Dialog ein. Bringen Sie den ZYLINDER dann in die richtige Position, indem Sie ihn auf eine Höhe von 50 m bringen. Damit Sie dem ZYLINDER per Maus oder Eingabe den Wert Y = 50 m zuweisen können, müssen Sie zuvor in den MODELL-BEARBEITEN-Modus umgeschaltet haben.
Abbildung 1. 41: Vom Kolben abgezogener Zylinder Dieser neue ZYLINDER soll jetzt vom Kolben abgezogen werden, um Locher in den Außenwänden zu hinterlassen. Wir benotigen also wieder ein BOOLE-Objekt. Diesmal stellen Sie jedoch den Modus auf A MINUS B ein. Ordnen Sie dann die gesamte alte BOOLE-Gruppe und den neu hinzugefügten ZYLINDER unter dem neuen BOOLE-Objekt ein. Die logische Reihenfolge muss dabei lauten: „Kolben minus Zylinder". Entsprechend der Modus-Einstellung muss also der Kolben als A-Objekt oben und der Zylinder als B-Objekt unter dem Boole-Kolben eingeordnet werden, so wie es Abbildung 1. 41 zeigt. Haben Sie alles richtig gemacht, zeigt sich ein Ergebnis wie in Abbildung 1. 41 rechts.
Abbildung 1. 42: Zusammenfassen der Objektbestandteile
Diese doch etwas verwirrende Anordnung von BOOLE- und NURBS-Objekten lässt sich jetzt weiter zusammenfassen. Klicken Sie dazu einmal auf das oberste BOOLEObjekt. Alle Eintrage im OBJEKTE-Fenster sollten daraufhin rot dargestellt werden. Da ein BOOLE-Objekt ebenfalls ein Grundobjekt ist, lasst es sich mit dem Befehl GRUNDOBJEKTE KONVERTIEREN umwandeln (siehe Abbildung 1. 42 links). Dies bewirkt die Umrechnung der BOOLE- und NURBS-OBJEKTE, so dass nur noch so genannte NULL-OBJEKTE und POLYGON-OBJEKTE übrigbleiben. NULL-OBJEKTE erkennen Sie an dem Symbol des kleinen Koordinatensystems im OBJEKTE-Fenster. Man kann sie gut zum Zusammenfassen von Objekten zu Gruppen benutzen. Für sich allein gesehen, sind sie jedoch in den Ansichtsfenstern unsichtbar. POLYGON-OBJEKTE dagegen enthalten die sichtbaren Polygone, also Punkte und Flächen, aus denen alle Objekte zusammengesetzt sind. Diese Objektart kann ohne Probleme direkt im PUNKTE-BEARBEITEN- oder POLYGONE-BEARBEITEN-Modus weiter bearbeitet werden. Sie erkennen diesen Objekttyp an dem kleinen blauen Dreieck im OBJEKTE-Fenster. Jedoch sieht der Kolben noch immer recht komplex aus. Deshalb verbinden wir im nächsten Schritt alle NULL- und POLYGON-OBJEKTE zu einem einzigen Objekt. Dazu müssen wieder alle Objekte, die zusammengefasst werden sollen, aktiviert - also im OBJEKTE-Fenster rot dargestellt - sein. Dazu reicht das Anklicken des obersten Objekts der Hierarchie, m diesem Fall des NULL-OBJEKTS mit dem Namen Boole. 1. Wahlen Sie dann im FUNKTIONEN-Menü den Punkt VERBINDEN aus. Es erscheint ein neues Objekt mit dem Namen Boole im OBJEKTE-Fenster. In diesem Objekt sind jetzt alle vorher markierten Objekte enthalten. Sie können also die alte Boole. 1 - Gruppe komplett per [ Symbol. Man konnte also bislang die Zeile so lesen: „Reserviere den Begriff link1 und speichere in diesem Begriff folgende Information aus der doc-Variable". Der letzte Teil der Zeile verwendet einen neuen Befehl: FindObject(). Wie die wörtliche Übersetzung schon vermuten lässt, sucht der Befehl das Objekt, dessen
Name in den Anführungszeichen in der Klammer hinter dem Befehl steht. Letztlich bewirkt die Zeile, dass das Objekt mit den Namen „Link1" aus der doc-Variable herausgesucht wird und dessen Daten an die Variable link1 übergeben werden. Bitte beachten Sie noch das Semikolon am Ende der Zeile. Jede Befehlszeile muss mit einem Semikolon beendet werden. Sollte es später Fehlermeldungen geben, ist dies eine berüchtigte Fehlerquelle. Wichtig für Sie ist noch zu wissen, dass die Namensgebung von Variablen nahezu beliebig ist. Ausgenommen sind natürlich reservierte Funktionen und Befehle, aber grundsätzlich könnten Sie die Variable hier auch „Anton" oder „XB111" nennen. Wählen Sie jedoch am besten assoziative Begriffe. Werfen wir einen Blick auf die Zeilen zwei und drei: var opglobal=op->GetMg(); var lglobal=link1->GetMg(); Hier taucht wieder der var-Befehl auf, es werden also wieder von uns bestimmte Begriffe mit Werten gefüllt oder für den späteren Gebrauch reserviert. Komplett neu ist hier nur der GetMg()-Befehl. Er fragt eine so genannte Matrix ab. Eine Matrix ist in diesem Fall eine Anordnung von Vektoren, also zusammengehörenden Werten, wie z. B. X-, Y- und Z-Positionen, oder Verdrehwinkel eines Objekts. Der GetMg()-Befehl liefert dabei eine globale Matrix, also die Werte im Weltsystem. Dies macht die Werte unabhängig von der Position eines Objekts in der Hierarchie des OBJEKTE-Fensters. Zusammenhängend kann man also hier lesen: „Reserviere mir den Begriff opglobal und speichere in diesem Begriff die globalen Werte des op-Objekts". Wie bereits erwähnt ist das op-Objekt jenes Objekt, hinter dem die Expression steht. Ganz ähnlich funktioniert die dritte Programmzeile. Hier wird die Variable l global mit den globalen Werten des link1-Objekts gefüllt, das wir zuvor über den FindObject-Befehl definiert haben. opglobal>SetV0(lglobal->GetVBO): Hier begegnen wir dem eigentlichen Kern dieser Expression, denn hier wird die Position des Link1-Objekts auf das Pleuel1-HyperNURBS übertragen. Da die Programmzeile eine verkürzte Schreibweise darstellt, entzerre ich die Zeile etwas, um Ihnen das Verständnis zu erleichtern:
lglobal->GetV0() Hier wird aus der zuvor gefüllten globalen Werte-Matrix in l global mit dem - > G e t V 0 ( )-Befehl der Vektor mit der Bezeichnung V0 herausgesucht. Dazu müssen Sie wissen, dass die globale Matrix ihre Werte in vier „Schubfächern" sortiert hat. V0 enthält dabei die Position des Objekts. Die „Fächer" V1 bis V3 enthalten die Vektoren der lokalen X-, Y- und Z-Achsen. Über deren Werte lässt sich die Richtung und auch die Größe des Objekts steuern. Diese interessieren uns hier jedoch nicht. Ganz ähnlich wie der GetV0()-Befehl funktioniert der SetV0()-Befehl. Hier werden die in der Klammer stehenden Werte in das V0-Schubfach einer Matrix geschrieben.
Zusammenhängend können wir also lesen: „Hole die Information über die Position aus dem lglobal-Objekt ab und schreibe diese Information in die Positionszeile des opglobal-Objekts". Wir haben jetzt also die Positionsinformation des op-Objekts durch die Positionsinformation des link1-Objekts ersetzt. Wir müssen diese Werte nun nur noch auf das op-Objekt übertragen. Bislang haben wir ja nur mit Variablen gearbeitet. Die geschieht jetzt also in der letzten Programmzeile: op->SetMg(opglobal); Es gibtauch ein Gegenstück zum GetMg()-Befehl, nämlich den SetMg()-Befehl. Damit übergeben wir eine globale Matrix an ein Objekt. Diese Matrix ist hier die Variable opglobal. Wir lesen also wieder: „Schreibe die Werte der Variable opglobal in die globale Matrix des op-Objekts". Oben in der Kopfzeile des EXPRESSION-EDITORS finden Sie die KOMPILIEREN-Schaltfläche. Klicken Sie einmal darauf, um CINEMA 40 Ihre Expression testen zu lassen. Sollten Sie Befehle falsch geschrieben oder z. B. ein Semikolon vergessen haben, wird Sie eine entsprechende Fehlermeldung mit Angabe der Programmzeile darüber informieren. Sie können dann wie in einer Textverarbeitung den Fehler korrigieren. Sind keine Fehler aufgetreten, können Sie die AUSFÜHREN-Schaltfläche betätigen. Das Programm wird jetzt tatsächlich ausgeführt. Auch hier kann es noch zu Fehlermeldungen kommen, wenn z. B. im FindObject-Befehl ein Objektname eingetragen wurde, der in der Szene nicht vorkommt. Die Befehle des Programms sind somit vielleicht völlig korrekt, aber das Programm kann trotzdem nicht richtig ablaufen. Sollte es auch hier zu keiner Fehlermeldung kommen, können Sie das Expression-Fenster schließen. Eine Sicherung ist nicht unbedingt nötig, da COFFEE-Expressions später zusammen mit der Szene abgespeichert werden. Das Sichern macht aber z. B. dann Sinn, wenn Sie sich eine Bibliothek mit Expressions zusammenstellen wollen. Viele dieser kleine Programme sind nämlich sehr universeil einsetzbar und lassen sich z. B, durch einfaches Austauschen von Objektnamen im FindObject-Befehl auch in anderen Projekten nutzen. CINEMA 40 verfügt jedoch auch über einige fertige Expressions, die wir natürlich gerne nutzen wollen. Sehr hilfreich in unserem Fall ist die lK-EXPRESSION. Sie finden Sie im gleichen Menü wie die COFFEE-EXPRESSION im OBJEKTE-Fenster. Eine IK-EXPRESSION sorgt dafür, dass das Objekt mit der Expression laufend versucht, die Position eines Ziel-Objekts zu erreichen. Der Schwerpunkt liegt hier auf „versucht", denn anders als bei unserer Expression, können Objekte hierbei durch hierarchische Verknüpfungen oder Beschränkungen durchaus daran gehindert werden, ein anderes Objekt zu erreichen. Die Expression versucht in solchen Fällen, die Distanz zwischen dem Ziel und dem Objekt mit der Expression möglichst klein zu gestalten. Rufen Sie eine solche IK-EXPRESSION für das Achse1-Objekt in der Pleuel1-Gruppe auf. Klicken Sie doppelt auf das kleine Fadenkreuz, das Symbol dieser Expression, und tragen Sie in den Dialog den Namen des Zielobjekts ein, dessen Position möglichsterreicht werden soll. In unserem Fall ist dies Target1 (siehe Abbildung 2. 58).
Abbildung 2. 58: Exemplarischer lK-Expression-Dialog für das Ausrichten der Pleuelstangen
Sie sollten jetzt bereits eine Reaktion in den Ansichtsfenster erkennen können. Die Pleuelstange mit den Expressions solle sich um das Drehzentrum herum mit dem unteren Ende dem Target-Objekt zuneigen. Da dies Jedoch außerhalb der möglichen Reichweite liegt, kann das Zielobjekt nicht ganz erreicht werden. Am oberen Ende wird der Pleuel schließlich von unserer selbstgeschriebenen Expression auf der Kurbelwellenachse festgehalten. Etwas störend ist jetzt natürlich, dass der dazugehörende Kolben nicht auch von dieser Ausrichtung erfasst wird. Er steht noch an der ursprunglichen Position und hat daher keine Verbindung mehr zur Pleuelstange und deren unterer Achse. Das werden wir nun ändern. Kopieren Sie die COFFEE-EXPRESSION des Pleuel-HyperNURBS auf das entsprechende Kolben-HyperNURBS. Der Kolben wird daraufhin ebenfalls die Position oben an der Kurbelwellen-Achse einnehmen. Dort wollen wir ihn jedoch nicht haben. Vielmehr sollte er die Position des Achse-Objekts in der Pleuel-Gruppe einnehmen. Klicken Sie also doppelt auf das COFFEE-EXPRESSION-Symbol hinter dem Kolben und verändern Sie den Namen in dem FindObject-Befehl auf „Achsel", wie es Abbildung 2. 59 zeigt. Ich habe dort die Namen der Variablen angepasst. Dies ist jedoch nur eine kosmetische Maßnahme. Die Expression funktioniert auch ohne Probleme mit den alten Benennungen. Nach dem KOMPILIEREN und AUSFUHREN sollte der Kolben an die Position der unteren Achse springen. Die alte Verbindung wurde damit automatisch wieder hergestellt.
Abbildung 2. 59: COFFEE-Expression zur automatischen Nachfuhrung der Kolben bei Bewegung der Pleuel
Diese Anordnung der zwei COFFEE-Expressions und der IK-Expression übertragen Sie jetzt per [Strg]-/[Ctrl]-Drag mit der Maus auf die entsprechenden Elemente der beiden anderen Pleuelstangen und Kolben. Jetzt verstehen Sie auch, weshalb die Achsen unterschiedliche Namen haben mussten. Die Expressions hätten sonst nicht feststellen können, welche Position maßgeblich sein soll. Die einzige Arbeit besteht jetzt noch in der Korrektur aller Bezugsnamen in den kopierten Expressions. So müssen die Zielnamen in den kopierten IK-EXPRESSIONS in Target2 bzw. Targets umgeändert werden. Auch die FindObject-Namen in den COFFEE-Expressions müssen auf Link2, Link3, sowie Achse2 bzw. Achse3 verändert werden. Jede Pleuel/Kolben-Gruppe hat schließlich eigene Bezugsobjekte. Haben Sie alle Expressions richtig zugeordnet und auch die korrekten Namen eingetragen, sollte sich Ihnen ein Bild wie in Abbildung 2. 60 bieten. Das faszinierende daran ist, dass dieser Zusammenhalt und diese automatische Ausrichtung auch hervorragend in der Animation funktionieren wird. Der zeitliche Mehraufwand bei den Vorbereitungen und Programmierungen wird dort um ein Vielfaches wieder kompensiert.
Abbildung 2. 60: Ergebnis der bisherigen COFFEE- und IK-Expressions
Was nun noch zu tun bleibt, ist die Ausrichtung der Kolben. Bislang hangen diese noch unmotiviert nach unten. Stellen wir uns die technisch sinnvolle Arbeitsweise vor, so sollten die Kolben in zylinderförmigen Röhren von der Kurbelwelle getrieben auf- und abgleiten. Die Röhre füngiert dabei gleichzeitig als Fuhrung und verhindert ein Verkanten der Kolben. Der Winkel der Ausrichtung der Kolben bleibt also wahrend der gesamten Bewegung konstant. Diese Information hilft uns maßgeblich weiter, denn eine konstante Rotation lässt sich durch einfaches Drehen der Kolben erzielen. Um hier jedoch eine weitere Variante vorzuführen, möchte ich auch diese Winkelveränderung per COFFEE-Expression realisieren. Dazu sind nur zwei weitere Befehlszeilen in den Expressions der Kolben nötig (siehe Abbildung 2. 61).
Abbildung 2. 61: Ergänzen der Kolben-Expression
Zuerst definieren wir eine zusätzliche Variable, die ich hier rotation1 genannt habe. Dieser Variable übertragen wir alle Informationen des Target1-Null-Objekts. Die Zeile laute! also: var rotation1=doc->FindObject („Target1"); Die übrigen Befehlszeilen bleiben davon unberührt. Nur am Ende des Programms fügen wir noch eine weitere Befehlszeile ein: op->SetRotation (rotation1->GetRotation()); Hier begegnen uns zwei neue Befehle, nämlich SetRotation() und G e t R o t a t i o n ( ) . Wie man schon fast aus den Namen erschließen kann, werden damit die Rotationswerte abgefragt oder gesetzt. Wir können also lesen: „Hole die Rotationswerte aus der Variable rotation1 und übertrage diese Werte auf die Rotation des op-Objekts". Da in unserem Fall das Targen -Objekt um 45° gedreht wurde, wird diese Drehung nun auch auf den Kolben übertragen. Zusätzlich bleibt die Position auf dem Achsei -Objekt jedoch erhalten. Da der SetRotation( )-Befehl nach dem SetMg()-Befehl steht, werden dessen Winkelinformationen einfach überschrieben. Ergänzen Sie die übrigen Kolben-Expressions identisch. Sie können die beiden neuen Zeilen durch Kopieren und Einfügen in die anderen Expressions direkt übernehmen. Achten Sie nur darauf, den FindObject( )-Befehl entsprechend auf Target2 bzw. Target3 anzupassen. Der Rest kann so bleiben. Nun bleibt nicht mehr viel zu tun, um die Animation perfekt ablaufen zu lassen. Ziehen Sie die Target-Null-Objekte aus den Link-Gruppen heraus und platzieren Sie diese z. B. oberhalb des Kurbelwellen-HyperNURBS im OBJEKTE-Fenster. Dies ist nötig, da die Target-Objekte ansonsten bei einer Drehung der Kurbelwelle mitbewegt würden. Sie sollen jedoch als fixe Bezugspunkte für die Ausrichtung der Kolben und Pleuel dienen.
Abbildung 2. 62: Schlüsselpositionen der Target-Objekte
Aktivieren Sie jetzt das Polygon-Objekt der Kurbelwelle und drehen Sie dies um die lokale Z-Achse. Drehen Sie die Weile soweit, bis die Kolben der einen Seite den kleinsten Abstand von der Welle haben. Bei mir war dies bei 45° der Fall (siehe Abbildung 2. 62 links). Aktivieren Sie nacheinander die Target-Objekte und verschieben Sie diese entlang deren Y-Achsen soweit, dass diese knapp unterhalb der jeweiligen Achse-Objekte liegen. Dies sorgt dafür, dass die Pleuel gezwungen werden, eine möglichst exakte Neigung von +45° bzw. -45° zu der Kurbelwelle einzunehmen.
2. 6 Key-Frames Damit diese Position gespeichert wird, benutzen wir so genannte Key-Frames. Diese Key-Frames sind nichts anderes als gespeicherte Informationen eines Objekts zu einem definierten Zeitpunkt. Sie können selbst bestimmen, welche Informationen in einem Key-Frame gespeichert werden sollen. Dazu dienen die kleinen Symbole unten rechts am Bildschirmrand des Layouts. Sie finden dort verkleinerte Bewegen-, Rotieren- und Skalieren-Icons, wie noch andere Icons, deren Funktionen jedoch hier noch nicht interessant sind. Sie können diese Icons durch Anklicken aktivieren und auch wieder deaktivieren. In unserem Fall benötigen wir für die Target-Objekte nur die Information bezüglich der Position. Deaktivieren Sie also alle Icons außer dem kleinen Bewegen-lcon. Nun muss der Zeitpunkt bestimmt werden, an dem die Information gespeichert werden soll. Dafür ist der ZEIT-MANAGER mit seinem Zeitschieber da, der gleich links von den kleinen Key-Frame-lcons liegt. Stellen Sie diesen auf „o B". Damit wird das Key-Frame bei Aufnahme direkt an den Anfang unserer Animation, nämlich in das Bild o gesetzt. Aktivieren Sie jetzt eines der verschobenen Target-Null-Objekte und klicken Sie auf den kleinen roten Kreis bei den Key-Frame-Symbolen. Sie haben damit ein Positions-Key-Frame für das Target-Objekt für den Zeitpunkt o B aufgenommen.
Klicken Sie dann auf das nächste bereits verschobene Target-Objekt und nehmen Sie wieder durch Anklicken des roten Kreises ein Key-Frame auf. Wiederholen Sie dies für das letzte Target-Objekt. Im letzten Schritt muss nun noch die Drehung der Kurbelwelle gesichert werden, damit wir einen reproduzierbaren Gesamtzustand der Szene erhalten. Bei der Kurbelwelle ist jedoch keinesfalls die Position entscheidend (sie bewegt sich ja nicht von der Stelle) sondern nur die Rotation. Aktivieren Sie also bei den KeyFrame-lcons das Rotations-Symbol, klicken Sie einmal auf das Kurbelwelle-Objekt im OBJEKTE-Fenster und klicken Sie dann auf den bekannten Aufnahmeknopf für Key-Frames. Damit ist die derzeitige Rotation der Kurbelwelle ebenfalls zum Zeitpunkt o B abgespeichert. Wir legen jetzt willkürlich fest, dass sich die Kurbelwelle in einer Sekunde einmal um die eigene Achse drehen soll. Standardmäßig enthält eine Sekunde fertiger Film in CINEMA 4D 25 Einzelbilder. Da Bild o ebenfalls mitzählt, müssen wir also die vollständige Bewegung mit Bild 24 abgeschlossen haben. Verschieben Sie daher den Zeitschieber des ZEIT-MANAGERS auf Bild 24, also auf 24 B. Falls noch nicht geschehen, wechseln Sie in den MODELL-BEARBEITEN-Modus und drehen Sie die Kurbelwelle um die lokale Z-Achse exakt um 360° weiter. Wenn Sie wie ich bei einem Winkel von 45° in Bild o gestartet sind, sollten Sie also einen Winket von 405° in Bild 24 einstellen. Sofern Sie weiterhin die Aufnahmen von Rotationswerten für Key-Frames aktiviert haben, können Sie wieder den Key-Frame-Aufnahmeknopf betätigen. Eine volle Umdrehung der Kurbelwelle ist somit in Key-Frames festgehalten. Wir können uns jetzt um die Target-Objekte kummern. Diese dürfen, um jederzeit möglichst eng an den Achsen der Pleuel zu liegen, nicht an den Startpositionen belassen werden. Bewegen Sie also durch Anklicken und Verschieben mit der Maus den Zeitschieber des ZEIT-MANAGERS langsam wieder in Richtung Bild o. Sie sollten dabei bereits die Rotation der Kurbelwelle beobachten können. Stoppen Sie an der Stelle, an der die Target-Objekte am weitesten von den Achsen-Objekten entfernt sind. Dies ist bei mir bei einem Kurbelwellenwinkel von 225° der Fall, also exakt in der Mitte der bislang von uns festgehaltenen Bildersequenz. Da nun wieder nur Positionen abgespeichert werden sollen, aktivieren Sie ausschließlich die Positionsinformation bei den Key-Frame-lcons und bewegen Sie das erste Target-Objekt entlang dessen Y-Achse wieder auf eine Position knapp unterhalb der dazugehörigen unteren Pleuel-Achse (siehe Abbildung 2. 62 rechts). Nehmen Sie diese Position mit den Aufnahmeknopfauf. Wiederholen Sie dies mit den übrigen zwei Target-Objekten.
Abbildung 2. 63: Nötige Einstellungen in der Zeitleiste
Um nun einen Überblick über alle Key-Frames zu bekommen, gibt es in CINEMA 40 die sogenannte ZEITLEISTE. Dies ist ein gleichnamiges Fenster, das Sie aus dem FENSTER-Menü von CINEMA 40 abrufen können. In Abbildung 2. 63 sehen Sie die ZEITLEISTE unserer Szene, wobei hier schon einige Einstellungen vorgenommen wurden, die jetzt erst besprochen werden. Bei Ihnen vorhanden sein sollten jedoch die drei Positions-Spuren hinter den Target-Objekten und die Winkelspur hinter dem Kurbelwelle-Objekt. Die kleinen grauen Kästen auf den Spuren sind die von uns gesetzten Key-Frames. Durch einen Doppelklick darauf können die in den Key-Frames gespeicherten Werte betrachtet und auch verändert werden. Ebenso lassen sich die Key-Frames mit der Maus verschieben, falls ein anderer Zeitpunkt für das Key-Frame gewünscht wird. Die grauen Balken unter den KeyFrames sind die SEQUENZEN. Sie können sich diese vielleicht als Trägermaterial für die Key-Frames vorstellen. Sequenzen können bestimmte Längen haben oder auch automatisch wiederholt werden. Alle Key-Frames auf dieser Sequenz werden dann ebenso wiederholt. Man spart sich damit die Aufnahme periodisch wiederkehrender Positionen, Winkel oder anderer Parameter. Dies wurde bei uns ebenfalls Sinn machen, da die Target-Objekte immer nur zwischen den beiden bislang gesetzten Key-Frames hin- und herpendeln müssen. Klicken Sie also doppelt auf den grauen Sequenzbalken hinter dem obersten Target-Objekt. Es öffnet sich ein Fenster, wie es ebenfalls in Abbildung 2. 63 zu sehen ist. Verkurzen Sie dort die Lange der Sequenz auf 24 Bilder und setzen Sie eine beliebige Anzahl an Wiederholungen ein. Ich habe dort drei Wiederholungen eingetragen. Sofort erkennen Sie im Feld darüber, dass diese Sequenz durch die Wiederholungen nun 75 Bilder - das Wort „Bilder" wird durch den Buchstaben „B" abgekürzt - lang ist. Dies entspricht also drei Sekunden, wenn eine Sekunde aus 25 Bildern besteht.
Sehr wichtig für uns ist hier noch das Abhaken der WEICH-Option. Diese sorgt dafür, dass die Wiederholungen der Sequenz und damit auch die Wiederholung der KeyFrames ohne sichtbaren Sprung erfolgen. Die Key-Framefreie Zone zwischen dem letzten Key-Frame und dem Ende der Sequenz bei Bild 24 wird also dafür genutzt, die Bewegung wieder auf den Stand des ersten Key-Frames der Sequenz zu bringen. In unserem Fall wird sich dadurch also das Target-Objekt wieder zur Position des ersten Key-Frames hinbewegen. Aktivieren Sie diese weiche Wiederholung samt der Verkürzung der Sequenz auf 24 Bilder für alle drei Target-Objekte. Leider können wir die Drehung der Kurbelwelle nicht so einfach durch weiches Wiederholen der Rotations-Sequenz automatisieren. Wurden wir die Sequenz auch hier verkurzen und die Wiederholung aktivieren, würde die Weile sich nur zwischen den Winkeln 45° und 405° hin- und herbewegen. Es fände keine fortlaufende Rotation statt. Bewegen Sie also den Zeitschieber, der in der Zeitleiste die Form eines grünen Kästchens hat, weiter nach rechts, bis Sie bei Bild 49 landen. Drehen Sie die Kurbelwelle in einem beliebigen Ansichtsfenster um weitere 360° um deren ZAchse und speichern Sie diese erneute Rotation wieder mit einem Rotations-KeyFrame ab. Die Kurbelwelle sollte nun bereits um 765° verdreht sein. Wiederholen Sie dies bei Position 74 B mit einem Winkel von 1125°, also 765° plus weitere 360° einer vollen Umdrehung. Die Kurbelwelle dreht sich damit im Sekundentakt immer um 360°, also eine komplette Umdrehung, weiter. Man könnte dies nach diesem Schema beliebig fortfuhren. Besonders für die Target-Objekte ist eine Veränderung der Lange der Animation sehr schnell durch Veränderung der Wiederholungszahl machbar. Bei der Kurbelwelle hängen Sie einfach jeweils im Abstand von 25 Bildern ein Key-Frame mit einer weiteren Rotation um 360° an. Wenn Sie den Zeitschieber nun langsam von Bild o nach rechts verschieben, sollten Sie die Rotation der Kurbelwelle mit der entsprechenden Bewegung von Pleuel und Kolben beobachten können. Die Animation ist somit vorerst abgeschlossen und Sie könnten das Objekt mit Materialien belegen, eine geeignete Kameraposition wählen und dann den Film berechnen lassen. All dies sind Arbeitsschritte die noch ausgiebig in einem folgenden Kapitel besprochen werden. Sichern Sie also die Szene für den spateren Gebrauch auf Ihre Festplatte. Sie finden die Szene zudem auch nochmals auf der CD zu diesem Buch.
Abbildung 2. 64: Exemplarisch dargestellte Zusammenfassung der Beziehungen zwischen den Objekten
Abschließend habe ich Ihnen in Abbildung 2. 64 noch einmal die unterschiedlichen Beziehungen der Objekte untereinander durch Pfeile eingezeichnet. Daraus ersehen Sie, dass die Pleuel die Position der Link-Objekte an der Kurbelwelle übernehmen. Sie bleiben dadurch auf den Achsen der Kurbelwelle, auch wenn sich diese dreht. Der Pleuel wird dabei durch die IK-EXPRESSION der untergeordneten Achse auf ein Target-Objekt außerhalb ausgerichtet. Die Kolben übernehmen die Position der Achse-Objekte aus den Pleuel und folgen daher der Bewegung der Pleuel exakt nach. Zudem orientieren Sie sich an der Neigung der Target-Objekte und werden so bezüglich ihrer Rotation fixiert. Wie Sie hier ansatzweise gesehen haben, sind Expressions, egal ob selbst geschrieben oder fertig abgerufen, eine sehr große Hilfe bei der Automatisierung von Bewegungen. Es lohnt sich also, sich mit den einzelnen Befehlen näher auseinanderzusetzen. Das Beispiel hat gezeigt, wie universell bereits eine einzige Expression einsetzbar ist. Wir werden uns daher im folgenden Kapitel noch naher mit diesen kleinen Programmen beschäftigen und an einem konkreten Beispiel lernen, wie vielfältig sich diese einsetzen lassen.
3
Expressions
Wie im letzten Kapitel zu sehen, haben Expressions durchaus ihre Vorteile, auch wenn die Programmierung nicht jedermanns Sache ist. Zumal wenn man seine persönlichen Schwerpunkte eher im Design oder der Modellierung sieht. Trotzdem werde ich mit Hilfe kleinerer Beispiele versuchen, Ihnen die gangigsten Befehle und Funktionen näher zu bringen. Danach wird es Ihnen sicher leichter fallen, selbst Expressions zu schreiben, oder aus Abwandlungen der hier vorgeführten eigene zu entwickeln.
3. 1 Die fließende Spirale Bitte nehmen Sie mir den merkwürdigen Titel dieses Beispiels nicht übel, aber mir fiel einfach keine bessere Umschreibung für das gangige Kinderspielzeug ein, das wir hier modellieren und vor allem animieren wollen. Sicherlich kennen Sie die eng gewickelten Metall- oder Kunststoffspiralen, die man - nach leichtem Anschubsen - z. B. Treppenstufen hinunterwandern lassen kann. Die Spirale neigt sich dabei zuerst über den Rand der ersten Stufe und wird dann von der Schwerkraft auf die folgende Stufe gezogen. Das am Schluss nachgezogene Stuck der Spirale erhält durch die Trägheit einen Bewegungsimpuls nach vorne und zieht so die Spirale wiederum über die Kante in Richtung 2. Stufe. Es ergibt sich damit eine fließende Abwärtsbewegung der Spirale, bis auch die letzte Stufe der Treppe überwunden wurde. Wir haben es hier also mit einer Biegung der Spirale zu tun - sie muss schließlich über die Kante einer Stufe zur nächsten Stufe eine Strecke zurücklegen -, und einer Veränderung der Länge. Die Spirale ist im Ruhezustand nämlich um einiges kurzer als während der Bewegung, wenn z. B. ein Ende noch auf der oberen Stufe liegt, während der ehemals obere Teil der Spirale schon die nächste Stufe erreicht hat. Lassen Sie uns mit der Modellierung einer stilisierten Spirale und einigen Würfeln, die unsere Treppenstufen darstellen sollen, beginnen. Als Platzhalter für die Spirale verwenden wir hier einen Zylinder, da dieser sehr viel weniger komplex ist und daher schneller in den Ansichtsfenstern dargestellt werden kann. Später tauschen wir ihn dann gegen eine richtige Spirale aus.
3. i. i Die Modellierung Rufen Sie zuerst einen ZYLINDER aus den Grundobjekten ab und übernehmen Sie für diesen die Einstellungen auf Abbildung 3, 1. Ansonsten ist hierbei nichts zu beachten, bis auf die Erhöhung der Segmentanzahl für die Höhe. Da der Zylinder gebogen werden soll, müssen wir für eine entsprechende Unterteilung sorgen. Wir haben ja schon im ersten Kapitel beim Biegen des Zylinders festgestellt, dass eine gleichmäßige und hohe Polygondichte bei Deformationen sehr nützlich sein kann. Da der Zylinder andererseits nur als Platzhalter für die Spirale dient, brauchen Sie es damit jedoch auch nicht zu übertreiben.
Abbildung 3. 1: Parameter für den Zylinder
Der Einfachheit halber belassen wir den Zylinder an Ort und Stelle und rufen jetzt einen WÜRFEL aus den Grundobjekten ab. Bringen Sie die Würfel auf die in Abbildung 3. 2 dargestellten Abmessungen. Der Würfel steht für eine Treppenstufe, über die der Zylinder nach unten gleiten soll. Damit diese Bewegung über mehrere Stufen animiert werden kann, sollten Sie noch weitere Würfel gleicher Größe hinzufügen. Kopieren Sie dazu einfach den Würfel noch zweimal. Sie sollten jetzt also 3 gleiche Würfel in Ihrer Szene haben.
Abbildung 3. 2: Parameter der drei Würfelstufen
Im nächsten Schritt setzen wir die Würfel an entsprechende Positionen, damit eine Treppe entsteht. Meine drei Positionen für die Würfel können Sie Abbildung 3. 3 entnehmen. Prinzipiell sind die Werte für die Positionen und auch die Größe der Stufen beliebig wählbar. Die von mir vorgegebenen Werte haben jedoch den Vorteil, dass sich ganzzahlige Abstände ergeben. Dies macht uns später das Rechnen etwas einfacher.
Abbildung 3. 3: Positionen der Würfelstufen Am besten arbeiten Sie bei den kommenden Schritten in der frontalen, also der XYAnsicht. Wir haben dann einen gemeinsamen Bezugspunkt für die weitere Arbeit. Die gesamte Szene sollte sich jetzt so darstellen, dass auf der obersten Stufe der Zylinder steht und rechts unterhalb von diesem zwei weitere Würfelstufen liegen. Schalten Sie in die Betriebsart LOKALE KOORDINATEN BEARBEITEN um und begrenzen Sie die Bewegungsfreiheit für das BEWEGEN-Werkzeug auf die Y-Achse. KONVERTIEREN Sie den Zylinder zu einem POLYGON-OBJEKT und ziehen Sie dann das Koordinatensystem des Zylinders herunter bis auf das Niveau seines Bodens (siehe Abbildung 3. 4). Da unser Zylinder direkt im Welt-Nullpunkt liegt und die Höhe exakt 200 m beträgt, sollte das Koordinatensystem also genau bei einer Welt-Y-Koordinate von 100 m liegen. Sie können diesen Wert also auch direkt in den KOORDINATEN-MANAGER eintragen.
Abbildung 3. 4: Verschieben des lokalen Koordinatensystems des Zylinders
Dieses Verschieben des lokalen Koordinatensystems ist deshalb so wichtig, da es nicht nur Drehzentrum eines Objekts ist - wie wir bereits bei dem Kolben und dem Pleuel gesehen haben -, sondern auch Startpunkt für Größenveränderungen. Da das untere Ende des Zylinder auch während des Verbiegens und Streckens auf der Stufe verbleiben muss, darf sich die Position des Bodens beim Skalieren also vorerst nicht verändern. Die Losung lautet, den Boden als Startpunkt für die spätere Skalierung zu definieren und damit das Koordinatensystem dorthin zu verschieben. Damit sind die Vorbereitungen abgeschlossen, und wir können uns mit dem Animieren beschäftigen.
3. 1. 2
Das Animieren des Zylinders
Wir beginnen mit dem Verbiegen des oberen Zylinderabschnitts in Richtung der zweiten Stufe. Für derartige Anwendungen ist der Biege-Deformator wie geschaffen. Sie finden das sogenannte BIEGE-OBJEKT im gleichen Menü wie den zuvor schon benutzten FORMEL-DEFORMATOR und das WICKELN-OBJEKT. Doppelklicken Sie auf das Symbol des BIEGE-OBJEKTS im OBJEKTE-Fenster und übernehmen Sie die Einstellungen aus Abbildung 3. 5. Der MODUS im BIEGE-OBJEKT definiert dabei, welcher Bereich des Objekts durch das BIEGE-OBJEKT verbogen werden soll. Die BEGRENZT-Einstellung sorgt dafür, dass nur der in den Einflussbereich des Deformators hineinragende Teil des Objekts verbogen wird. Der Deformator wirkt dann je nach Lage im Objekt wie ein Scharnier. Der KRÜMMUNG-Wert steuert über einen Winkel die Starke des Biegens. Ein Wert von 180° sorgt also dafür, dass ein Objekt zu einem „U" verbogen wird. Der RICHTUNG-Wert bezieht sich auf die Richtung, entlang derer gebogen wird. Da Sie diese Werte auch direkt in den Ansichtsfenstern über das Verschieben des Anfassers an dem BIEGE-OBJEKT steuern können, wird Ihnen das Zusammenspie! der Werte schnell verstandlich.
Abbildung 3. 5: Parameter des Biege-Objekts
Bevor wir jedoch etwas verbiegen können, muss das BIEGE-OBJEKT erst an die richtige Stelle gebracht werden. Dies gilt sowohl für das OBJEKTE-Fenster wie auch für die Position in den Ansichten. Deformatoren wirken im Allgemeinen nur auf übergeordnete Objekte. Wir könnten das BIEGE-OBJEKT also direkt unter dem ZYLINDER einordnen. Kurzfristig wurde dann alles wunschgemäß funktionieren; da wir den ZYLINDER jedoch die Treppen hinab bewegen wollen, wurde dadurch das BIEGE-OBJEKT auch mitbewegt. Wir werden zu einem spateren Zeitpunkt dieses Beispiels erkennen, welche katastrophalen Folgen das nach sich ziehen wurde. Glauben Sie mir bis zu der entsprechenden Stelle in diesem Arbeitsbeispiel einfach, dass dies nicht sehr wünschenswert wäre. Vor unlösbare Aufgaben stellt uns dies hier jedoch nicht, denn auch für solche Zwecke sind NULL-OBJEKTE sehr gut zu gebrauchen. Wenn wir das BIEGE-OBJEKT einem NULL-OBJEKT unterordnen, m dem zudem ein POLYGON-OBJEKT liegt, wird das POLYGONOBJEKT verformt, als ob man den Deformator direkt dem POLYGON-OBJEKT untergeordnet hatte. Von Vorteil ist jedoch, dass wir das POLYGON-OBJEKT frei bewegen können, ohne das BIEGE-OBJEKT mit zu verschieben. Es ist schließlich dem NULL-OBJEKT untergeordnet, das an Ort und Stelle verbleibt. Wie so oft sagt auch hier ein Bild mehr als umständliche Beschreibungen. Die entsprechende Anordnung von BIEGE-OBJEKT, ZYLINDER und NULL-OBJEKT sehen Sie in Abbildung 3. 6. Die gleiche Abbildung dokumentiert die wünschenswerte Position für das BIEGE-OBJEKT. Es bedeckt damit den kompletten oberen Teil des Zylinders. Wenn Sie das BIEGE-OBJEKT positionieren wollen, denken Sie daran, wieder in den MODELL — BEARBEITEN — Modus zurückzuschalten. In diesem Fall funktioniert es zwar auch im LOKALE-KOORDINATEN-BEARBEITEN-Modus, aber es ist besser, Sie gewöhnen sich eine gewisse Disziplin in Bezug auf die aktiven Modi an. Ein paar Zeilen tiefer im Text werden Sie verstehen, warum.
Abbildung 3 6: Lage und Einordnung des Biege-Objekts
Da BIEGE-OBJEKT und ZYLINDER jetzt in der richtigen Position zueinander stehen, können wir den Zylinder nun über den Deformator animieren. Dafür benutzen wir KeyFrames, wie schon im Kapitel zuvor. Zuerst müssen wir uns entscheiden, welche Werte als Key-Frames für das Objekt gesichert werden sollen. Für diesen Zweck gibt es die kleinen Icons am unteren rechten Bildschirmrand. Die Abbildung 3. 7 zeigt diese mit kurzen Benennungen ihrer Funktionen. Einige davon haben wir bereits im letzten Kapitel benutzt. Aktivieren Sie die Aufnahme von Parameterwerten, vergewissern Sie sich, dass der Zeitschieber auf dem Bild o steht, aktivieren Sie das Biege — Objekt und klicken Sie einmal auf das Aufnahme-lcon. Sie finden dies links von den Key-Frame-lcons in Form einer kleinen roten Kugel.
Komplette Hierarchie
Bewegen ——' Skalieren—!
Point Level Animation
l— Parameter -Rotieren
Abbildung 3. 7: Key-Frame-lcons
Verschieben Sie den Zeitschieber auf Bild 15, offnen Sie den Dialog des BlEGE-OBJEKTS durch einen Doppelklick auf dessen Symbol im OBJEKTE-Fenster und verandern Sie die Einstellungen dort entsprechend Abbildung 3. 8. Schließen Sie den Dialog über die OK-Schaltfläche und nehmen Sie wiederum ein PARAMETER-Key-Frame für das BIEGE-OBJEKT auf.
Wenn Sie jetzt mit gehaltener Maustaste den Zeitschieber langsam zwischen Bild o und Bild 15 hin- und herbewegen, können Sie die Krümmung des Zylinders beobachten. Aus der geraden Haltung m Bild o biegt der Zylinder sich langsam immer mehr, bis er in Bild 15 um 180° verbogen erscheint. Dass dabei das obere Ende des Zylinders in Bild 15 nicht exakt horizontal liegt, rührt daher, dass das BIEGE-OBJEKT den ZYLINDER um ein kurzes Stück überragt.
Abbildung 3. 8: Gebogener Zylinder
Darum werden wir uns gleich noch kümmern. Werfen wir zuvor in Abbildung 3. 9 noch einen Blick auf die Zeitleiste, die Sie ebenfalls schon aus Kapitel 2 kennen. Sie erkennen dort, dass durch die Aufnahme der Key-Frames automatisch eine Sequenz entstanden ist. Damit ist der graue Balken gemeint, auf dem die KeyFrames liegen. Vor der Sequenz steht der Name des Key-Frame-Typs. in unserem Fall sind es PARAMETER-Key-Frames. Es ist also nicht möglich, beliebige Key-Frames auf einer Sequenz zu mischen. Jede Art hat eine eigene Sequenz mit eigener Benennung. Sie werden dies spätestens bemerken, wenn wir jetzt GRÖSSE-Key-Frames für den Zylinder erzeugen.
Abbildung 3. 9: Animation der Biegung über Key-Frames
Bewegen Sie dazu den Zeitschieber wieder auf Bild o zurück, aktivieren Sie den Zy-
linder im OBJEKTE-Fenster und schalten Sie auf die Aufnahme von GRÖSSE-Key-Frames um. Alle anderen auf die rote Aufnahmekugel. Verschieben Sie dann den Zeitschieberauf Bild 15 und wiederholen Sie die Aufnahme eines GRÖSSE-Key-Frames. Wie Sie in Abbildung 3. 10 erkennen können, ist hinter dem Zylinder eine weitere Sequenz mit der Benennung Größe aufgetaucht. Auf dieser Sequenz finden sich nun die beiden neuen Key-Frames, die Sie soeben aufgenommen haben. Ebenfalls eingeblendet in der Abbildung 3. 10 sehen Sie als Erinnerung die aktivierte OBJEKT-BEARBEITEN-Betriebsart.
Abbildung 3. 10: Key-Frames für die Größe des Zylinders Die Aufnahme von GRÖSSE-Key-Frames ist heikel, da in diesen Key-Frames nicht die Abmessungen eines Objekts gespeichert werden, sondern die Längen der Koordinatenachsen. Grundsätzlich gibt es zwei Arten, ein Objekt zu skalieren, also dessen Größe zu
verändern. Bislang haben wir dafür das SKALIEREN-Werkzeug im MODELL — BEARB von dessen lokalem Ursprungentferntoderauf diesen zu bewegt. Die lokalen Koordinatenachsen bleiben davon unberührt.
Die zweite Möglichkeit besteht ebenfalls in der Benutzung des SKALIEREN — Werk-zeu sen verlängert oder verkürzt. Die Punkte des Objekts bleiben an Ort und Stelle, werden jedoch durch die verzerrten Achsen an anderen Positionen eingezeichnet. Das Ergebnis ist optisch also völlig identisch. Der große Unterschied besteht darin, dass sich nur die Veränderung der Achsenlängen in Form von Key-Frames animieren lässt. Will man die Größe eines
Objekts also über die Zeit animieren, muss die Skalierung des Objekts im OBJEKTE — B Fälle, wegen denen ich Sie um Aufmerksamkeit in Bezug auf die verwendete Betriebsart gebeten habe. ) Bei der Aufnahme der ersten beiden GRÖSSE-Key-Frames war es nicht so tragisch, falls Sie sich noch in der MODELL — BEARBEITEN — Betriebsart befunden haben, da die Größe des Zylinders noch nicht verändert wurde. Achten Sie jedoch zukünftig darauf.
Abbildung 3. 11: Verlängerung des Zylinders mit entsprechendem Key-Frame
Schalten Sie also nun in den OBJEKT — BEARBEITEN — Modus und aktivieren Sie das SKALIEREN-Werkzeug mit Begrenzung auf die Y-Achse für den Zylinder. Bewegen Sie den Zeitschieber auf Bild 20 und skalieren Sie den Zylinder solange, bis dessen oberes Ende die nächste Treppenstufe erreicht. Wie Sie Abbildung 3. 11 entnehmen können, ist dies in unserem Beispiel bei einer Y-Größe von 2. 3 m der Fall. Nehmen Sie hier wieder ein GRÖßE-Key-Frame für den Zylinder auf. Wie Sie erkennen können, ergibt sich nun, da der Zylinder das BIEGE-OBJEKT voltständig durchläuft, tatsächlich eine Krümmung von 180°, und beide Enden des Zylinders verlaufen absolut parallel.
Abbildung 3. 12: Der verlängerte Zylinder mit deaktiviertem Deformator
Im nächsten logischen Schritt muss sich das Zylinderende von der obersten Stufe lösen und der Zylinder auf der zweiten Stufe wieder zur ursprünglichen Größe zusammenschrumpfen. Hier begegnet uns ein Problem, denn das Skalieren hat seinen Bezugspunkt im lokalen Koordinatensystem. Da wir dies zu Beginn an das untere Ende des Zylinders verschoben haben, lässt sich der Zylinder nur von diesem Punkt aus skalieren. Verändern wir jetzt also die Größe des Zylinders, so wird sich dessen oberes Ende wieder von der zweiten Stufe der Treppe lösen und nach oben wandern. Es kommt also zu einer simplen Umkehrung der bisherigen Bewegung.
Wollen wir dies umgehen, muss der Zylinder gleichzeitig mit der verkürzenden Skalierung nach oben bewegt werden. Diese Verschiebung nach oben, die durch das BIEGE-OBJEKT gleichzeitig einen Versatz nach rechts und eine Umkehrung der Bewegung um 180° bedeutet, muss dabei so mit der Rücknahme der Skalierung gekoppelt sein, dass der Kontakt zur zweiten Stufe nicht verloren geht. Sie ahnen es wahrscheinlich bereits, dass hier wieder eine Lösung in Form einer einfachen Expression auf uns wartet. Bevor wir diese entwickeln können, müssen wir jedoch eine Formel erarbeiten, welche die Länge in Bezug zur Positionsänderung stellt. Ein guter Anhaltspunkt dafür ist die Position des Zylinderteils, das auf der zweiten Stufe haften bleiben soll. An diese Position in Relation zum Zylinder kommen wir, wenn wir die Deformatoren in der Szene kurzzeitig deaktivieren. Dafür ist ein einmaliges Anklicken der Deformatoren-Drawing-Pipeline auf der linken Interface — Seite ausreichend (siehe Abbildung 3. 12). Das Biege — Objekt verliert sofort seinen Einfluss auf den Zylinder, und wir können den Zylinder in seiner tatsächlichen Form betrachten. Der Zylinder ist durch die Skalierung in Bild 20 exakt 2. 3-mal länger als noch zu Beginn der Animation. Der obere Teil des Zylinders liegt nach dieser Skalierung exakt auf der zweiten Treppenstufe auf, wenn wir den Biege-Deformator wieder einschalten. Dies bedeutet, dass wir den nun oberen Rand des Zylinders festhalten müssen, während das untere Ende solange an dieses heranrückt, bis die ursprüngliche Länge wieder hergestellt ist. Um das obere Ende des Zylinders mit einer Expression festhalten zu können, müssen wir zuerst feststellen, wo dies im Raum liegt. Wechseln wir dazu einmal in den PUNKTE-BEARBEITEN-Modus und klicken einen beliebigen Punkt auf der oberen Deckfläche des Zylinders an. Werfen Sie einen Blick in das STRUKTUR-Fenster und suchen Sie dort die hell unterlegten Punktkoordinaten. Uns interessiert hier nur die Y-Koordinate, also die vertikale Position. Wir lesen dort einen Wert von 200. Kann dies stimmen? Der Zylinder war doch bereits zu Beginn 200 Einheiten hoch. Nun ist er um einiges länger. Dieser Unterschied hängt mit der bereits angesprochenen Skalierung der Objektachsen zusammen. Die Punkte bleiben an Ort und Stelle, erscheinen jedoch durch die verzerrten Achsen durchaus an ganz anderem Ort. Um die tatsächliche Position zu erfahren, müssen wir den Y-Wert der Position mit dem Skalierungsfaktor der entsprechenden Achse multiplizieren. In unserem Fall ergibt dies 2. 3 x 200, also 460. Die tatsächliche Höhe des Punkte beträgt also 460 m, und nicht nur 200 m. Da wir jedoch auch den Ursprung des lokalen Koordinatensystems verschoben haben, kommt ein weiterer Faktor hinzu. Wir müssen die Position des Objekts im Raum noch zu dieser Punktkoordinate hinzuzählen. Bei einer Y-Position des Objekts von 100 m ergibt sich daher ein endgültiger Wert von 360 m als Y-Wert für den oberen Zylinderrand.
2. 3 * 200 = 460 460-100 = 360
Abbildung 3. 13: Umrechnung von Objekt- in Welt — Koordinaten
Dies hätten wir auch einfacher erfahren können. Diesen Zwecken dient die Umschaltmöglichkeit zwischen OBJEKT- und WELT-System im KOORDINATEN-MANAGER. Selektieren Sie wieder einen Punkt auf der oberen Deckfläche des Zylinders und wechseln Sie im KOORDINATEN-MANAGER auf das WELT-System. Tatsächlich bekommen Sie dort nun den von uns berechneten Wert 360 m angezeigt. Trotzdem ist es für Sie von Nutzen zu wissen, wie dieser Wert zustande gekommen ist (siehe Abbildung 3. 13). 2. 3 * 200 = 460 460-100 = 360
Abbildung 3. 14: Expression für die automatische Anpassung der Größe bei Positionsveränderung
Vergeuden wir jetzt keine weitere Zeit und beschäftigen uns mit der Expression Rufen Sie eine neue COFFEE-EXPRESSION für den Zylinder auf und tippen Sie dort die Programmzellen aus Abbildung 3 14 ein Wie gewohnt stelle ich Ihnen die Befehlszeilen hier noch einmal detaillierter vor var Pos = op >GetPosition(), Der v a r Befehl sollte Ihnen bekannt vorkommen Damit werden Variablen reser viert oder auch gleich mit Werten gefüllt In diesem Fall sorgt op >GetPosition(), dafür, dass die Position des Zylinders, der sich hinter der Abkürzung op verbirgt, m der Variable Pos gesichert wird In den nächsten beiden Zeilen wird zuerst die Variable Ze t mit der Zeit gefüllt, an der zum Zeitpunkt des Aufrufs der Expression der Zeitschieber steht Danach er halt die Variable Bild die Bildnummer, die sich aus der eingestellten Zeit ergibt Diese etwas umständliche Abfrage ist notig, da wir m CINEMA 40 die Anzahl der Bilder pro Sekunde Animation frei einstellen können Die eingestellte Anzahl der Bilder pro Sekunde fließt über den Befehl doc >GetFps() m die Berechnung mit ein Sie können diese beiden Zeilen also exakt so auch m Ihre eigenen Expressions übernehmen, falls Sie irgendwo die aktuelle Bildnummer m der Animation benötigen var Zeit = doc >GetTime(), var Bild = Zeit->GetFrame(doc > G e t F p s ( ) ) ; Wenn Sie schon einmal mit Basic programmiert haben, kommt Ihnen sicherlich die kommende Programmzeile bekannt vor: if (Bild > 20) { } Mit einer so genannten if Abfrage kann man Programmabschnitte von Bedingungen abhangig machen Die Befehlszeilen, die nur dann ausgeführt werden sollen, wenn die Bedingung zutrifft, stehen m geschweiften Klammern In diesem Fall lautet die Bedingung „Fuhre die folgenden Befehle nur aus, wenn der Wert der Variablen Bild großer als 20 ist" Das heißt, dass die m den geschweiften Klammern stehenden Befehle nur dann ausgeführt werden, wenn die Animation weiter als Bild 20 fortgeschritten ist Ist diese Bedingung nicht erfüllt, werden die eingeklammerten Befehle einfach übersprungen und daher nicht ausgeführt In unserer Expression steht nur ein Befehl m den Klammern op > S e t S c a l e ( v e c t o r ( 1 , (360 Pos y ) / 2 0 0 D),
op > kennen Sie bereits Damit weisen wir dem Objekt, hinter dem die COFFEE — EXPRESSSION im OB Befehl die Große des Objekts Wie die Position oder der Winkel eines Objekts, so ist auch die Große ein Vektor, hier nämlich X Große, Y Große und Z-Größe
Bislang haben wir immer alle drei Komponenten eines Vektors m einer Variablen gespeichert Ein Beispiel dafür ist die Pos Variable m dieser Expression Obwohl wir nur das Wort Pos mit dem GetPosition() Befehl definiert haben, so enthalt die Variable Pos doch drei Werte, nämlich die X , die Y- und die Z Koordinate der Position Will man an einzelne Bestandteile eines solchen Vektors herankommen, so hangt man an die Vektor Variable einfach ein x, y oder z hinten an Mochte man also die Y Koordinate der Position erfahren, so steht diese m der Variable Pos y Das funktioniert m der anderen Richtung so, dass wir drei Werte über den vector () Befehl wieder zu einem Vektor zusammenfassen können Wir können also z B schreiben var Wert = vector (l, 128, 19) Dann enthalt Wert 2 bei einer Abfrage automatisch den Zahlenwert 19, da dies der Z-Anteil des Wert Vektors i st Kehren wir zu der Befehlszeile zurück Wie Sie dort m dem vector() Befehl er kennen können, sind der X und der Z Anteil des Vektors mit dem Wert i besetzt Dies bedeutet m unserem Fall, dass der Zylinder weder m dessen X- noch m dessen Z Richtung skaliert wird Die Große bleibt dort m jedem Fall konstant, so wie wir den Zylinder modelliert haben Der Y-Anteil des Vektors ist jedoch mit einer kurzen Formel definiert, die wie folgt lautet (360 Pos y ) / 2 0 0 Diese Beziehung zwischen den Werten für die Bestimmung der Hohe des Zylinders ergab sich aus der Berechnung, die wir m Abbildung 3 13 nachvollzogen haben Dort hieß es 200 (Y-Koordinate der oberen Punkte) x 2 3 (Y Große beim Erreichen der 2 Treppenstufe)-100 {Start Y Position des Zylinders) = 360 (Welt Y-Koordinate der oberen Punkte des Zylinders) Lost man diese Beziehung nach der Y Große auf, so erhalt man obige Formel Die Große wird durch die Variable Pos y laufend so angepasst, dass der obere Rand des Zylinders an Ort und Stelle verbleibt. Nach dem Kompilieren und Ausfuhren der Expression können Sie den EXPRESSION-EDITOR wieder schließen Setzen Sie zum Zeitpunkt 20 B ein POSITION Key Frame für den Zylinder, und verschieben Sie das zweite GRÖSSE Key Frame des Zylinders auf Bild 9 (siehe Abbildung 3 15) Das Verschieben von Key Frames können Sie dabei durch einfaches Anklicken und Verschieben mit dem Mauszeiger vollziehen Diese Verschiebung des GROSSE-Key Frames sorgt dafür, dass der Zylinder bereits an Lange zunimmt, noch wahrend die Biegung durch das BIEGE OBJEKT stattfindet Das hinzugekommene POSITION Key Frame halt die Lage des Zylinders bis zu diesem Zeitpunkt fest Da also keine anderen POSITION Key Frames vor dem Zeitpunkt 20 B existieren, wird die dort gespeicherte Position automatisch auch für die Zeit zwischen Bild o und Bild 20 übernommen
Abbildung 3. 15: Hinzugefugter Positions-Key-Frame
Verschieben Sie nun den Zeitschieber zum Bild 27 und bewegen Sie den Zylinder aufwärts entlang der Y-Achse. Sie sollten den Biege-Deformator dafür wieder aktiviert haben, um die Wirkung im ganzen Ausmaß zu sehen. Dank unserer Expression bleibt der Zylinder mit dem ehemals oberem Ende auf der zweiten Treppenstufe fixiert, während das untere Ende durch das BIEGE-OBJEKT wandert und der Zylinder schließlich wieder seine ursprungliche Form annimmt. Behalten Sie bei der Bewegung die Werte im KOORDINATEN-MANAGER im Auge. Dort sollten Sie bei der Position stoppen, bei der der Zylinder wieder eine Y-Größe von i eingenommen hat. Der Zylinder ist dann wieder auf die Startgroße geschrumpft. Wie Sie in Abbildung 3. 16 sehen, ist dies bei einer Y-Position von 160 m der Fall. Dort können Sie auch sehr gut erkennen, wie das BIEGE-OBJEKT nicht nur die Richtung, sondern auch die Position verändert hat. Durch die vier rechtwinkligen Ecken symbolhaft angezeigt, sehen Sie die tatsächliche Position des Zylinders. Setzen Sie in Bild 27 ein POSITION — Key — Frame für den Zylinder, um diesen Abschnitt der Animation zu fixieren.
Abbildung 3. 16: Positionsveränderung, bis die ursprüngliche Lange wiederhergestellt ist
Da wir jetzt die erste Stufe wortwörtlich genommen haben, wollen wir den Zylinder noch eine weitere Stufe hinabschicken. Dafür benötigen wir ein neues BIEGE-OBJEKT, da sich der Zylinder jetzt am ehemals unteren Ende biegen muss.
Rufen Sie also wieder ein BIEGE-OBJEKT ab und übertragen Sie die Einstellungen aus Abbildung 3. 17. Größe und Modus entsprechen dabei komplett dem ersten BIEGEOBJEKT. Es soll schließlich auch ebenso arbeiten. Damit auch dieses BIEGE-OBJEKT auf den Zylinder wirken kann, müssen Sie es in die gleiche Gruppe einordnen. Versuchen Sie es zuerst mit der Anordnung, die die Abbildung 3. 17 zeigt, also zuerst das alte dann das neue BIEGE-OBJEKT.
Abbildung 3. 17- Zweites Biege — Objekt für eine weitere Bewegungsphase des Zylinders
Abbildung 3. 18: Relative Lage des zweiten Biege-Objekts
Drehen Sie das neue BIEGE-OBJEKT um 180° um dessen Z-Achse und verschieben Sie es auf eine Hohe von 230 m. Diese Einstellungen können Sie natürlich auch direkt per Zahleneingabe im KOORDINATEN-MANAGER übernehmen (siehe Abbildung 3. 18). Wie Sie in der Abbildung sehen können, liegt bei ausgeschalteten Deformatoren das untere Ende des Zylinders komplett im neuen BIEGE-OBJEKT. Wenn Sie nun die Deformatoren wieder aktivieren und den orangen Anfasser des neuen BIEGE-OBJEKTS in einem Ansichtsfenster verschieben, passiert etwas Merkwürdiges. Der Zylinder scheint um einen entfernten Punkt zu rotieren. Es findet also nicht der gewünschte Knick des nun oberen Bereichs statt. Dies liegt daran, dass Deformationen der Reihe nach ausgeführt werden. Zuerst wird also die alte Deformation ausgeführt, da diese im NULL-OBJEKT als erste Deformation auftaucht. Erst danach findet die Biegung des neuen BIEGE-OBJEKTS statt. Durch die falsche Reihenfolge wurde der Zylinder also aus dem Wirkungskreis des folgenden Deformators „herausgebogen". Drehen Sie deshalb die Reihenfolge im NULL-OBJEKT um. Zuerst muss das neue BIEGE-OBJEKT eingeordnet sein, dann das alte, jetzt funktioniert alles nach Plan, denn das neue BIEGE-OBJEKT ist zu Beginn der Animation ja noch in neutraler Stellung und überführt den Zylinder, ohne ihn zu biegen m den Wirkungskreis des alten Deformators hinein. Wenn der Zeitpunkt für die Biegung des neuen BIEGE-OBJEKTS gekommen ist, ist der Zylinder schon längst aus dessen Wirkungsbereich entlassen. Abbildung 3. 19 zeigt also die korrekte Einordnung der Deformatoren.
Abbildung 3. 19: Neue Key-Frames für den Zylinder und das zweite Biege-Objekts Setzen Sie im Bild 27 ein PARAMETER-Key-Frame für das neue BIEGE-OBJEKT und wechseln Sie zu Bild 37. Setzen Sie dort ebenfalls ein PARAMETER-Key-Frame für das BIEGEOBJEKT. Diesmal jedoch mit einer 180°-Krümmung in Richtung o°. Da das neue BIEGE-OBJEKT um 180° um die Z-Achse verdreht ist, wird die 0°-Richtung ebenfalls um 180° gedreht und die Krümmung erfolgt in exakt der anderen Richtung als dies beim ersten BIEGE-OBJEKT der Fall war. Da der Zylinder jedoch ebenfalls durch das erste BIEGE-OBJEKT um 180° gedreht wurde, gleicht sich dies wieder aus, und die Krümmung erfolgt wieder in die richtige Richtung, nämlich der dritten Stufe entgegen.
Diese Zusammenhänge werden recht schnell deutlich, wenn Sie das zweite BIEGEOBJEKT über dessen Anfasserpunkt interaktiv verändern. Sie erkennen dann, dass ein Verschieben nach rechts eine Krümmung nach links auslöst. Da sich die Position des Zylinders während dieses zweiten Biege — Manövers
noch nicht verandern soll, nehmen Sie ebenfalls in Bild 37 ein weiteres POSITION — Key — Frame für
Abbildung 3. 20- Korrektur der Einordnung des zweiten Biege-Objekts Das Schöne an unserer Expression ist nun, dass sie uns weiterhin behilflich ist. Ziehen Sie den Zylinder langsam entlang der Y-Achse nach unten und Sie bemerken, wie sich dessen oberes Ende der dritten Stufe zuneigt, ohne den Halt des Zylinders auf Stufe 2 zu gefährden. Diese Bewegung ist genau das, was wir brauchen. Verschieben Sie den Zeitschieberauf Bild 45 und ziehen Sieden Zylinder auf eine Position herunter, so dass dessen Ende gerade die dritte Stufe erreicht. Dies sollte exakt bei der Position -100 m der Fall sein. Die Lange nimmt dadurch wieder den Faktor 2. 3 an (siehe Abbildung 3. 21). Halten Sie dies in einem Positions-Key-Frame für den Zylinder fest (siehe Abbildung 3. 22).
Abbildung 3. 22: Key-Frame für die Position des Zylinders setzen
So hilfreich wie die COFFEE-EXPRESSION bislang war, so störend wird sie nun, denn das bislang fixierte Ende des Zylinders muss sich nun von der zweiten Stufe lösen. Dies stellt uns aber auch vor keine größeren Probleme, denn wir haben die Expression ja bereits einmal zuvor auf einen Bereich begrenzt. Durch die if-Abfrage wird die COFFEE-EXPRESSION erst ab Bild 21 aktiv. Dort müssen wir also auch die Deaktivierung vornehmen: if (Bild>20 U Bild FindObject („Biege-Obj"); op -> SetMg (bieger -> GetMg()); Die erste Zeile speichert die Daten des Objekts Biege-Obj in die Variable bieger. Die zweite Zeile sucht aus der Variablen bieger die globale Matrix heraus, die Position, Große und Winkel enthalt, und überträgt diese auf das op-Objekt. Sie werden sich vielleicht fragen, was das Biege-Obj nun ist, da bislang kein Objekt diesen Namen trägt. Damit diese Technik funktionieren kann, müssen wir die Namenderalten BIEGE — OBJEKTE beim Zylinder verändern. Ansonsten kann die Expression nicht feststellen, welches BIEGE-OBJEKT wir meinen. Expressions gehen nämlich nur nach dem vergebenen Namen vor. Der vergebene Name ist natürlich völlig willkürlich gewählt. Hauptsache die Namen unterscheiden sich von denen der Biege — Objekte bei der Helix, damit es dort nicht zu Verwechslungen kommen kann.
Ergänzen Sie also die in Abbildung 3. 34 abgebildeten Expressions für die beiden BIEGE — OBJEKTE der HELIX. Achten Sie darauf, dass die BIEGE — OBJEKTE auch tatsächlich die korrekte Position übernehmen.
Abbildung 3. 35: Die Spirale folgt jetzt den Deformationen des Zylinders.
Im Ansichtsfenster sehen wir jetzt, dass sich die Spirale nun ebenso wie zuvor der Zylinder verformt {siehe Abbildung 3. 35). Es bleibt nun noch die Deaktivierung der beiden alten BIEGE — OBJEKTE. Klicken Sie dazu einmal auf die grünen Haken hinter den Deformatoren. Damit lassen sich einzelne Deformatoren ein- und ausschalten, ohne gleich alle Deformatoren in einer Szene über die Drawing-Pipeline ausschalten zu müssen. Zudem sollten Sie die Zylindergruppe über rote Punkte dahinter unsichtbar machen. Mit der Spirale haben wir ja jetzt ein sehr viel! ansprechenderes Objekt vor uns.
Abbildung 3. 36: Ausblenden und Deaktivieren der Zylinder-Gruppe führt zum gewünschten Ergebnis.
Damit sind wir am Ziel, denn die Spirale folgt Jetzt exakt der Bewegung und Verformung des Zylinders. Ohne Expressions wäre diese Aufgabe nur mit erheblichem Mehraufwand und selbst dann wahrscheinlich nicht so exakt machbar gewesen. Speichern Sie die Szene für die spätere Berechnung auf Ihrer Festplatte ab. Alle Arbeitsschritte, die mit der Texturierung und der Berechnung zu tun haben, werden konzentriert in einem späteren Kapitel behandelt.
3. 2
Bewegungsabläufe automatisieren
Bislang haben uns Expressions dabei geholfen, Objekte automatisch auszurichten oder diese zu positionieren. In diesem Beispiel werden wir lernen, dass mit Expressions noch weit mehr möglich ist.
Wir werden nicht nur Punkte damit steuern, sonderauch noch einen Morphing -Algorithmus entwickeln, der üb Morph-Sequenz hinausgeht. Dies hört sich komplizierter an, als es tatsächlich ist. Ich werde mir dennoch besondere Mühe geben, Ihnen die Mathematik hinter diesem Vorgang zu erläutern, da sich diese Methode auch für viele andere Aufgaben eignet. Wie bereits gesagt, ist dies ansonsten so mit den eingebauten Möglichkeiten von CINEMA 40 nicht möglich. Wir beginnen mit dem Bau einer kleinen Maschine, die hauptsächlich aus drei Zylindern und einem Seil besteht. Damit das Seil umgelenkt werden kann, kommen noch ein paar Ring — Objekte hinzu. Beginnen Sie damit, drei ZYLINDER aus den Grundobjekten aufzurufen und für diese die Einstellungen und Positionen aus Abbildung 3. 37 zu übernehmen. Sie sollten danach drei ineinander verschachtelte Zylinder erkennen können, wobei der jeweils kleinere Zylinder aus dem größeren herausragt. Als Führungen für das noch zu modellierende Seil — Objekt benutze ich einfache RING-Objekte, die Sie ebenfalls im OBJEKTE-Menü finden. Wir benötigen davon vier Exemplare gleicher Größe. Einziger Unterschied zwischen den Ringen ist dabei, dass einige die +Y- und einige die +X — Richtung benutzen (siehe Abbildung 3. 38). Dies sorgt dafür, dass zwei Ringe waagerecht und zwei senkrecht stehen. Man hätte dies natürlich auch durch nachträgliches Drehen der Objekte erreichen können. Übernehmen Sie ebenfalls die entsprechenden Positionen, wie sie Abbildung 3-38 zeigt.
Abbildung 3. 37: Drei Zylinder konfektionieren und positionieren
Abbildung 3. 38: Vier Ringe konfektionieren und positionieren
Das Gerät soll noch eine Art Ausleger bekommen, auf dem zwei Würfel befestigt sind. Einer der Würfel soll beweglich auf dem Ausleger gleiten können, der andere als Anschlag dienen. Wie das funktionieren kann, zeige ich später. Übernehmen Sie vorerst die Daten aus Abbildung 3. 39 für den Zylinder und die beiden Würfel.
Abbildung 3. 39. - Zylinder und Würfel hinzufugen
Damit ist das Gerat komplett und sollte sich wie in Abbildung 3. 40 präsentieren. Bevor wir die Objekte nun nach Baugruppen sortieren und hierarchisch ordnen, fügen wir noch einen Spline hinzu, der das erwähnte Zugseil darstellen soll.
Abbildung 3. 40: Das Gerat mit seinen mechanischen Baugruppen
Wahlen Sie dazu aus den Splines den AKIMA-Spline aus und beginnen Sie in der XYAnsicht - unten am Boden des untersten Zylinders beginnend - insgesamt acht Spline-Punkte zu erzeugen. Sie müssen Sie dafür im PUNKTE-BEARBEITEN-Modus befinden. Positionieren Sie die Punkte ungefähr so, wie es die Abbildung 3. 41 zeigt. Die Punkte 2, 5, 6 und 7 liegen dabei genau in den Offnungen der Ring-Objekte. Der erste Punkt, bzw. der Punkt mit der Nummer o, sollte innerhalb aber nahe der Außenwand des größten Zylinders liegen. Die Punkte i, 3 und 4 beulen den Spline seitlich leicht aus.
Abbildung 3. 41: Einen Akima-Spline als Seilzug hinzufugen
Da dieses Gerät auch bewegt werden soll, müssen die Objekte zu sinnvollen Gruppen zusammengefasst werden. Die Hauptgruppen, an denen sich dabei alles zu ori-
entieren hat, sind die drei Zylinder. Benennen Sie diese entsprechend ihrer Position mit Basis, Mitte und Oben.
Gruppieren Sie dann den Ring auf dem Ausleger mit dem darunter liegenden Würfel- Diese Objekte bilden eine Einheit, die sich auch so bewegen lassen soll. Ebenso verfahren Sie mit dem Auslegerzylinder und dem zweiten Würfel. Diese beiden Gruppen ordnen Sie dem Oben — Zylinder ebenso unter wie die beiden Ringe, die oben und seitlich an dem Oben — Zylinder befestigt sein sollen. Der Mitte-Zylinder bleibt für sich allein, da keine anderen Objekte direkt mit ihm verbunden sind. Der Basis-Zylinder bekommt nur den einen seitlichen Ring untergeordnet. Um den Seilzug zu modellieren, rufen Sie einen KREIS — Spline auf, geben diesem einen Radius von 5 m und ordnen Kreis und Seilzug — Spline in einem schon bekannten SWEEP-NURBS. Das Seil bekommt dadurch eine Dicke von 10 m und wird damit bei der Berechnung später auch dargestellt, was bei Splines allein nicht der Fall ist. Übernehmen Sie bitte meine Benennung der Objekte aus Abbildung 3. 42. Sie wissen ja, dass Expressions Objekte nach deren Namen auffinden. So ist hier sichergestellt, dass Sie die jetzt besprochenen Expressions auch ebenso übernehmen können.
Abbildung 3. 42- Den Seilzug — Spline mit einem Kreis-Spline in einem Sweep-NURBS verbinden und die Baugruppen hierarchisch ordnen.
Sinn der jetzt folgenden kurzen Expressions ist es, die Bewegungsmöglichkeiten der beiden oberen Zylinder zu begrenzen, aber auch voneinander abhangig zu machen. Beim Verschieben des Oben — Zylinders soll dieser nicht nur senkrecht nach
oben oder unten wandern, sondern automatisch den Mitte-Zylinder mitziehen, falls eine größere Lange ansonsten nicht mehr erreicht werden könnte. Beginnen wir mit der Expression für den Oben — Zylinder aus Abbildung 3. 43. Rufen Sie eine COFFEE-EXPRESSION für den Oben — Zylinder im OBJEKTE-Fenster ab und übernehmen Sie den Text aus der Abbildung, der mit dem Wort „Oben" gekennzeichnet ist. Hier sollte Ihnen fast alles bekannt vorkommen. Beginnen wir mit einer zeilenweisen Besprechung: var opglobal, pos; opglobal = op -> GetMg(); pos = opglobal -> GetV0(); Hier werden über die var-Befehl die beiden von mir gewählten Worte opglobal und pos als Variablen reserviert und dann mit Werten gefüllt. Zuerst bekommt die Variable opglobal die globalen Werte des op-Objekts, also des Objekts hinter dem die Expression steht, und dann erhalt die pos-Variable den Positionsvektor des op-Objekts, der sich ja im V0 — Fach verbirgt. Lassen Sie sich in der Abbildung nicht von den Zeilen irritieren, die von zwei Schrägstrichen eingeleitet werden. Dies sind so genannte Kommentare, die nichts mit der Funktion der Expression zu tun haben. Man kann solche Zeilen bei längeren Expressions einfügen, um sich selbst eine Hilfestellung zu geben, was in den folgenden Abschnitten berechnet oder ausgelost wird. Dies erleichtert das Zurechtfinden in Expressions erheblich. Gewöhnen Sie sich dies auch an, wenn Sie Expressions z. B. an Dritte weitergeben mochten. Derjenige hat es dann viel leichter, die Funktionsweise der Expression zu verstehen. CINEMA 40 selbst überspringt beim Ausfuhren der Expression diese Zeilen.
if (pos. y < 80) pos. y = 80; if (pos. y > 720) p o s . y = 720;
Hier begegnen uns zwei if — Abfragen, die wir auch schon im vorherigen Beispiel benutzt haben. In der Klammer steht jeweils eine Bedingung. Wenn diese Bedingung erfüllt ist, wird der Befehl ausgeführt, der in geschweiften Klammern unter dem if — Befehl folgt. So haben wir es z Hier sehen Sie eine verkürzte Schreibweise, die dadurch möglich wird, dass nur ein Befehl auszufuhren ist, wenn die Bedingung zutrifft. In solchen Fallen kann der Befehl oder die Aktion direkt hinter die Klammer der Bedingung geschrieben werden. Die erste if-Abfrage überprüft, ob die Y-Position kleiner als So ist. Ist dies der
Fall wird der Befehl hinter der Klammer ausgeführt. Dieser besagt, dass die Y-Position gleich So ist. Diese Konstell So unterschreiten kann. Ganz ähnlich funktioniert die zweite if — Befehlszeile. Dort wird jedoch der obere Bewegungsfretraum begrenzt, denn jede Position über 720 führt zu einer Zurückstufungauf den Wert 720. So einfach wie diese Zeilen anmuten, so mächtig sind Sie auch; Sie können durch geschicktes Begrenzen der Bewegungsfreiheit z. B. den Fuß einer Figur daran
hindern, durch den Boden zu treten, oder mechanische Scharniere automatisieren. Die gleiche Methode funktioniert nicht nur mit Positionswerten, sondern auch mit der Größe oder der Richtung eines Objekts. Wir haben jetzt den Y — Positionswert ggf. zurechtgestutzt und müssen diesen wieder in das V0 — Fach zurückschreiben: opglobal -> SetV0 (vector ( 0 , pos. y, 0 ) ) ; Da wir nur den Y-Wert des Positionsvektors verändert haben, müssen wir diesen mit dem X- und dem Z-Wert wieder zu einem Vektor zusammenfügen. Wir haben da-
für bereits den vector ()-Befehl kennengelernt. Wollten wir die alten X- und Z — Werte wieder überneh pos. z). Wir haben hier jedoch die Möglichkeit, noch eine andere Beschränkung einzubauen, nämlich die Festlegung auf eine Koordinate. Indem wir hier den X- und den Z-Wert der Position mit der Zahl o vorgeben, lässt sich dadurch der Zylinder nicht mehr nach links oder rechts, bzw. nach vorne oder hinten verschieben. Dies geht in diesem Fall, da der Zylinder direkt im Ursprung, also auf der Position 0, 0, 0 generiert und nur nach oben verschoben wurde. Ansonsten müsste man hier die entsprechenden X- und Z — Koordinaten eintragen, an denen sich das Objekt befinden soll. Jetzt bleibt uns nur noch, die neuen Werte komplett an das op-Objekt zu übergeben:
op -> SetMg(opglobal); Damit sind wir für den Oben — Zylinder schon fertig. Eine ganz ähnliche Expression schreiben wir uns jetzt für den Mitte-Zylinder: var master = doc -> FindObject („Oben"); var mglobal, opglobal, mpos, pos; opglobal = op -> G e t M g ( ) ; mglobal = master -> G e t M g ( ) ; mpos = mglobal ->GetV0(); Die erste Zeile läutet die kleine Veränderung ein, die wir für dieses Objekt berücksichtigen müssen. Das sich der Mitte-Zylinder automatisch mitbewegen soll, wenn der Oben — Zylinder eine bestimmte Höhe überschreitet, müssen wir die Position des Oben — Zylinders mit einbeziehen. Wir übertragen daher zuerst in die Variable master die Daten des Oben-Zylinders mit dem doc -> FindObject(„Oben")-Befehl und speichern dann die globale Matrix mit master -> GetMg() in mglobal und schließlich daraus den Positionsvektor mit mglobal -> GetV0() in mpos ab. Die globale Matrix des Mitte-Zylinders wird über opglobal -> GetMg() gesichert.
pos = mpos. y - 40;
Abbildung 3. 43: Bewegungsfreiheit der Zylinder begrenzen
Hier kommt der eigentliche Trick dieser Expression, denn wir weisen der pos-Variable einfach die Y-Koordinate des Oben-Zylinders abzüglich eines Offsets von 40 zu. Dies führt normalerweise dazu, dass sich der Mitte-Zylinder immer 40 m unter dem Oden-Zylinder befindet. Das hätten wir auch mit einem Unterordnen des MitteZylinders unter den Oben — Zylinder erzielen können. Ergänzt wird dies jetzt jedoch durch eine eigene Bewegungsfreiheit des MitteZylinders: if (pos < 40} pos = 40; if ( p o s > 370) pos = 370;
Wie in der Expression zuvor wird hier die Bewegungsfreiheit mit zwei if-Abfrage eingeschränkt. Der Mitte-Zylinder kann somit weder eine Position unter 40 m noch
über 370 m einnehmen. Besonders die Begrenzung nach oben ist hier entscheidend, da dies die Regel durchbricht, dass der Mitte-Zylinder immer 40 m unter dem
Oben-Zylinder liegt. Ab einer Hohe von 370 m bleibt er hangen und folgt dem Oben-Zylinder erst wieder n der Mitte-Zylinder an die Anfangsposition zurückgeführt. Die Begrenzung nach unten hätte man sich hier sogar noch sparen können, da der Oben-Zylinder bereits nach unten begrenzt ist. opglobal -> SetV0 vector ( 0 , pos, 0) ); op -> SetMg ( o p g l o b a l ) ; Hier wird der Positionsvektor wieder mit den Werten (o, pos, o) gefüllt, um auch beim mittleren Zylinder ein seitliches Ausweichen oder eine Bewegung in die Tiefe zu verhindern. Schließlich folgt die Übertragung auf das op-Objekt. Werfen wir einen Blick auf unsere Szene und testen wir unsere Expressions einmal (siehe Abbildung 3. 44). Aktivieren Sie den Oben-Zylinder und verschieben Sie diesen in eine beliebige Richtung. Sie werden sehen, dass sich der Zylinder nur nach oben oder unten verschieben lässt. Ab einer gewissen Höhe trennt sich dann der mittlere Zylinder von der Bewegung des Oben-Zylinders ab und bleibt stehen. Erst bei der Abwartsbewegung des Oben-Zylinders bewegt sich dieser wieder von der Stelle.
Die Ringe und der Ausleger folgen automatisch mit, da diese direkt dem Oben-Zylinder untergeord Sweep-NURBS? Das Objekt lässt sich nicht unmittelbar nur einem der Zylinder zuordnen. Es kommt hinzu, dass sich der Spline der Position der Zylinder anpassen müsste. So kann es jedenfalls nicht bleiben, wie die Abbildung 3. 44 zeigt. Der Spline verharrt völlig unbeweglich und hat daher keinen Bezug mehr zu den Ringen und den Zylindern.
Abbildung 3. 44: Resultierender Bewegungsablauf bei Auf-/Abbewegung des obersten Zylinders
Es gilt jetzt also einerseits Punkte des Splines an den Ringen fest zu halten und andererseits eine glaubhafte Streckung der jetzt noch „schlaffen" Bereiche des Splines bei Bewegung des obersten Zylinders umzusetzen. Werfen wir zuerst einen Blick auf den Status quo, also die Punktkoordinaten des Splines in der unteren Stellung der Apparatur {siehe Abbildung 3. 45).
Abbildung 3. 45: Punkt-Koordinaten des Splines m der Ausgangsstellung
Wechseln Sie dazu in den PUNKTE-BEARBEITEN-Modus, aktivieren Sie den Seilzug — Spline im SWE durch einen Doppelklick auf einzelne Werte direkte Zahleneingaben vornehmen. Damit wir eine vergleichbare Ausgangslage haben, übernehmen Sie bitte die Werte aus Abbildung 3. 45 für Ihren Spline. Es steht Ihnen naturlich frei, die Spline-Punkte an andere Positionen zu setzen. Sie müssten dann nur die später beschriebene Expression entsprechend verandern. Nehmen Sie sich ein Blatt Papier zur Hand und notieren Sie die Positionen der Punkte i, 3 und 4. Dies sind die Punkte, die die „schlaffen" Bereiche des Splines definieren. Wenn Sie meine Werte übernehmen möchten, können Sie auf diese Notiz natürlich verzichten. Im nächsten Schritt wechseln Sie in den MODELL-BEARBEITEN-Modus zurück und verschieben den Oben-Zylinder auf eine Höhe, von der Sie glauben, dort müsse das Seil gespannt sei. Lesen Sie bei dieser Höhe die Y-Koordinate des senkrechten Ringes oben auf dem Oben-Zylinder ab. Ich erhalte dafür einen Wert von 665 m (siehe Abbildung 3. 46). Die Wahl dieses Objekts in der Oben-Gruppe war völlig willkürlich. Sie hätten auch den Oden-Zylinder selbst oder ein anderes Objekt der Gruppe ablesen können. Spater wichtig ist nur die numerische Differenz zwischen dieser Position und der Startposition des abgelesenen Objekts in der untersten Stellung.
Wechseln Sie jetzt ohne das Objekt weiter zu verändern, wieder in den PUNKTE — Modus und verschie entsteht. Meine Werte dazu entnehmen Sie der Abbildung 3. 47.
Abbildung 3, 46: Festlegung einer Grenzhöhe
Abbildung 3. 47: Zielpositionen der Punkte i, 3 und 4 bei Erreichen der Grenzhöhe
Was ist nun der Sinn dieser Schritte? Wir haben jetzt zwei Stadien eines Objekts definiert, in diesem Fall des Splines. Eine Überführung von Stadium i in das Stadium 2 eines Objekts nennt man Morphing. Dabei wird jeder Punkt des Objekts von seiner Ausgangsstellung in die Zielstellung gebracht. CINEMA 40 kennt für diese Zwecke z. B. PLA, also die Point Level Animation. Bei dieser und alten übrigen eingebauten Morphing — Methoden handelt es sich jedoch um Key — Frame — basierte Funktionen. Dies bedeutet, wir müssen uns entscheiden, zu welchen Zeitpunkt weiches Stadium erreicht werden soll. Ein Innehalten in einem derartigen Morphing ist ebenfalls nicht möglich. Dazu müssten Zwischenstadien generiert werden, die z. B. den Spline in einer halb gespannten Position darstellen. Dies alles kann uns nicht gefallen, denn dadurch geht die Interaktivität unserer Maschine verloren. Ich möchte die Maschine mit dem Mauszeiger „live" bewegen können, ohne Key-Frames zu setzen.
3. 2. 1 Wie funktioniert Morphing? Damit dies funktionieren kann, werfen wir einen kurzen Blick darauf, wie Morphing funktioniert (siehe Abbildung 3. 48):
Abbildung 3. 48: Grundlagen des Morphens von Punkt- Koordinaten
Beginnen wir mit dem linken Teil der Abbildung. Sie veranschaulicht die wichtigsten Parameter für das Morphen eines Punktes in einem Objekt. Die Ausgangsposition des Punktes nennen wir Position*. Vom lokalen Ursprung des Objektes aus, zu dem der Punkt gehört, führt ein so genannter Ortsvektor zu Position i und damit zu unserem Punkt dort. Diesen Ortsvektor nenne ich Vector i. Wir kennen zudem die Position 2, zu der der Punkt in Position i wandern soll. Position 2 ist über den Ortsvektor Vector2 mit dem Ursprung verbunden. Der Weg zwischen Position i und Position 2 ergibt sich aus der Rechnung Vector 2 minus Vector i. Dazu muss man wissen, dass die Addition und die Subtraktion von Vektoren durch Parallelverschiebung und einfaches Aneinanderlegen der Vektoren bildlich vollzogen werden kann. Das Ergebnis dieser Rechnung ist der graue Vektor, der von Position i zu Position 2 führt. Dies ist ein so genannter Richtungsvektor, Wie der Name schon sagt, definiert ein Richtungsvektor in welche Richtung und wie weit ein Weg beschriften werden soll. Den Startpunkt für den „Weg" kennt er jedoch nicht. Dafür ist der Ortsvektor da. Wir müssen also zuerst mit einem Ortsvektor zu einem Punkt gebracht werden, von dem aus der Richtungsvektor dann zum Ziel führt. Diesen Zusammenhang macht die rechte Seite der Abbildung 3. 48 deutlich. So kann man die Position 2 auch erreichen, wenn man mit dem Ortsvektor Vector i zu Position i „reist" und von dort den Richtungsvektor Vector 2 - Vector i zu Position 2 nimmt. Multipliziert man nun den Richtungsvektor mit einem Wert zwischen o und i kann man zu einem beliebigen Punkt auf der Strecke Position 1/Position 2 gelangen. Diesen Werte nenne ich hier in der Abbildung x. Dieser Faktor ermöglicht es
uns nun, jede Koordinate zwischen den beiden Positionen zu berechnen, die auf einer gerade Verbindungslinie liegt.
Wenn es uns jetzt noch gelingt, diesen Faktor x an die Bewegung des Oben-Zylinder zu knüpfen, habe i zu Position 2 zu bewegen. Bei einer derartigen Steuerungsmöglichkeit redet man auch von gewichtetem Morphing. Prinzipiell lassen sich nach diesem Schema auch mehrere verschiedene Zielpositionen mit verschiedenen x — Faktoren mischen. Interessant kann dies bei Gesichtsanimationen sein. Dazu jedoch später mehr. Stürzen wir uns also in die COFFEE-EXPRESSION für den Spline im SWEEP-NURBS (siehe Abbildung 3. 49). Wenn Sie bislang alle Punkt- und Objekt-Koordinaten aus meinen Abbildungen übernommen haben, können Sie die Expression aus der Abbildung exakt so übernehmen. Ich habe in der Abbildung, die diesmal doch etwas längere Expression bildlich in der Mitte getrennt und nebeneinander gruppiert, damit die Schrift im Druck nicht zu klein wird. Sie schreiben natürlich wie gewohnt alle Befehle untereinander.
Abbildung 3. 4$: COFFEE-Expression für den Spline var var var var
RingB = doc -> FindObject ( „ R i n g - B a s i s " ) ; RingO = doc -> FindObject ( „ R i n g - O b e n " ) ; RingO2 = doc -> FindObject („Ring-Oben2"); Gleiter = doc -> FindObject ( „ R i n g - b e w e g l i c h " ) ;
In den ersten Zeilen speichern wir die Daten der vier Ring-Objekte in Variablen ab. Wir benötigen diese Daten, um später die entsprechenden Splinepunkte exakt der Bewegung der Ringe nachführen zu können. Dabei werden ihre Positionen einfach übernommen. var Bglobal, O g l o b a l , O 2 g l o b a l . G g l o b a l ; var Faktor, posB, posO, posO2, posG, Punkt;
Hier passiert eigentlich nichts, außer dass wir uns einige Worte als Variablen reservieren. Bglobal = RingB -> G e t M g ( ) ; posB = Bglobal -> GetVBO; Ich spare mir hier die Aufzählung aller vier Befehlsblöcke, denn der Inhalt ist immer gleich: „Speichere zuerst die globale Matrix in einer Variable ab und sichere dann in einer zweiten Variable den Vektor mit den Positionsdaten". Punkt = op -> G e t P o i n t s ( ) ; Hier begegnet uns etwas Neues. Mit dem op -> GetPoints()-Befehl holen wir die Positionsdaten aller Punkte des op-Objekts auf einmal ab. Es handelt sich dabei um ein so genanntes Array, also ein Datenfeld. Um die Daten eines Array — Elements abzufragen, muss man die Nummer des gewünschten Elements angeben. Mehr dazu gleich. Faktor = (posO2. y-288. 631) / (665-288. 631); Hier definieren wir unseren x-Faktor, also den Multiplikator, der festlegt, wie weit wir die Distanz zwischen Start- und Endpunkt des Morphings gehen wollen. Die Zahl 665 sollte Ihnen bekannt vorkommen. Dies ist die Position des Oben2 — Rings, ab der der Spline gespannt sein soll. Hat Oben2 diesen Wert erreicht, müssen alle Splinepunkte also in Position2 sein. Den etwas krummen Wert 288. 631 habe ich aus der untersten Y-Position des Oben2 — Rings abgelesen, also wenn das Gerät vollständig eingefahren ist. Die Differenz zwischen den beiden Werten gibt also die zu überbrückende Distanz für den Ring an. Wenn posO2. y die momentane Position des Rings ist und (655-288. 631) die maximale Strecke darstellt, dann erhalten wir mit (posO2. y - 288. 631) / ( 6 6 5 288. 631) eine einfache Formel, die uns mit Werten zwischen o und i anzeigt, wieviel der Strecke zurückgelegt wurde. Weiter geht es mit der beliebten if-Abfrage: if (posO2. y > 665) { posG. x = 6 7 5 - (posO2. y - 6 6 5 ) ;
Punkt [1] = vector (-123. 977, -152. 993, -5. 478); Punkt [3] = vector (-120. 033, 229. 832, 2. 691); Punkt [4] = vector (-115. 967, 481. 203, -0. 663); } Wenn also die Position des Oben2-Rings über der von uns festgelegten Grenze von 665 liegt, werden die in geschweiften Klammern stehenden Befehle ausgeführt. Damit die Maschine einen realistischen Arbeitsablauf darstellt, muss der Seilzug seine Länge behalten (es sei denn, er besteht aus elastischem Materia!)- Wenn er also die Länge behalten soll, so muss er - nachdem der Spielraum der Seillänge durch die Streckung vollständig verbraucht wurde - den am Ende des Seils liegenden Ring samt Würfel auf dem Ausleger näher zum Oben-Zylinder ziehen. Es
müsste also eine Bewegung entlang der X-Achse stattfinden. Bei mir beträgt die XKoordinate des Ring — beweglich — Objekts, wie ich ihn genannt habe, in der entspannten Position 675 m. Ich habe es mir jetzt einfach gemacht und einfach festgelegt, dass ein Meter mehr an Höhe des Oben2-Rings zu einem Meter weniger bei der X-Koordinate des Gleiter-Rings führt. Nichts anderes steht in der Formel für posG. x. In den drei Zeilen danach weisen wir den Punkten i, 3 und 4 die Punktkoordinaten zu, die wir selbst so eingestellt haben. Hier sehen Sie auch, wie man auf die bereits erwähnten Elemente eines Arrays zugreift. Man hängt an die Array — Variable die Nummer des gewünschten Elements in eckigen Klammern an. Punkt [1] enthält also hier den Positionsvektor des Punktes mit der Nummer i im STRUKTUR-Fenster. Dieser gesamte if — Komplex sorgt also dafür, dass -wenn der Ring Oben2 die YKoordinate 665 m überschreitet —, die Spline-Punkte i, 3 und 4 in ihrer Endposition liegen und gleichzeitig der Gleiter-Ring samt dem untergeordneten Würfel näher an den Oben2-Zylinder heranrückt. Was mit dem Spline passieren soll, wenn der Oben2-Ring unter der Koordinate 665 m bleibt, muss noch geklärt werden. Die Expression fährt daher wie folgt fort:
eise { posG. x = 675; Punkt [l]. x = -172. 173 + ( - 1 2 3 . 977 + 172. 173) * Faktor; Punkt [l]. y = -128. 895 + (-152. 993 + 128. 895) * Faktor; Punkt [1]. z = -5. 478;
} Gleich zu Beginn wieder ein neuer Befehl: else leitet einen in geschweiften Klammern stehenden Befehlsblock ein, der nur ausgeführt wird, wenn die direkt darüber stehende if-Bedingung nicht erfüllt wurde. Das bedeutet, nur wenn posO2. y nicht größer als 665 ist, werden die Befehle in den else — Klammern ausgeführt. Dies ist der Bereich, in dem das Morphing des Splines stattfinden muss, also die Verformung vom schlaffen in ein gespanntes Seil. Zuerst wird die X-Position des Gleiter-Rings auf 675 fest eingestellt. Dies sorgt dafür, dass der Gleiter direkt vor dem Stopperwürfel sitzt, solange das Seil noch nicht gespannt ist. Danach folgen die Morphing — Rechnungen für die drei Spline-Punkte. Da sich das Prinzip wiederholt, habe ich hier nur den Punkt i als Listing aufgeführt. Sie sehen hier, wie nacheinander für die X-, die Y- und die Z — Komponente des Punktes die in Abbildung 3. 48 rechts ermittelte Formel mit Werten gefüllt wird. Dieses Schema wird nur für die Z-Koordinate durchbrochen, da diese für Start- und Endposition exakt gleich ist. Wir können hier also einen festen Wert eintragen, bzw. könnten die Zeile sogar komplett weglassen.
Ebenso gehen wir für die Punkte 3 und 4 vor. Sie setzen einfach nur die notierten Koordinaten für Start- und Endpunkt in die Formel ein. Punkt Punkt Punkt Punkt
[2] [5] [6] [7]
= = = =
posB; posO; posO2; posG;
Bislang haben wir uns nur um die Punkte i, 3 und 4 gekümmert. Die hier dokumentierten Zeilen sorgen jetzt nach den if- und den else — Befehlen dafür, dass die Punkte 2, 5, 6 und 7 exakt auf den Positionen der Ring — Objekte bleiben. Dies ist besonders bei Punkt 7 interessant, der an den beweglichen Ring gekoppelt wird. Das Spline-Ende wird sich also durch die Gleiterbewegung ebenfalls verschieben, als wären beide Objekte tatsächlich verbunden. Da diese Zeile außerhalb der if- und der else — Befehle steht, werden sie in jedem Fall ausgeführt. Dies macht ja auch Sinn, da das Seil immer durch die Ringe laufen soll, egal in welcher Position der Oben2-Zylinder bzw. der Ring-Oben2 gerade ist. Gglobal -> SetV0 ( p o s G ) ; Gleiter -> Setg ( G g l o b a l ) ; op -> SetPoints (Punkt); Wir müssen die Werte nun wieder an die Objekte übergeben, damit diese auch auf unsere Berechnungen reagieren können. Die beiden ersten hier dokumentierten Zeilen sorgen für die Positionsveränderung des beweglichen Rings samt untergeordnetem Würfel. Das Gegenstück zum GetPoints()-Befehl ist der hier gezeigte S e t P o i n t s ( ) - B e fehl, der das Punkt — Array wieder zurückschreibt. Damit sind alle modifizierten Daten wieder den Objekten zugewiesen. Bei Veränderungen der Punktpositionen gibt es noch den folgenden Befehl, den man anhängen sollte. Er informiert CINEMA 4D davon, dass eine Veränderung an dem Objekt vorgenommen wurde und veranlasst dadurch ein Neuzeichnen in den Ansichtsfenstern. Besonders wichtig wird dieser Befehl auch, wenn man Punkte eines Objekts löscht oder hinzufügt. Es gibt nämlich einige Tags, die von einer derartigen Veränderung in Kenntnis gebracht werden müssen, damit es nicht zu Problemen kommt. op -> Message (MSG_UPDATE); Sicherlich ein langes Programm, aber ich denke der Aufwand hat sich gelohnt. Wenn Sie die Expression kompiliert und ausgeführt haben schließen Sie den Expression Editor und bewegen Sie den Oben2-Zylinder langsam auf und ab. Es sollte sich jetzt eine voll funktionsfähige kleine Maschine von Ihnen wie magisch bewegen lassen (siehe Abbildung 3. 50). Das faszinierende an dieser Art der Animation ist die Möglichkeit der Interaktivität. Sie können jederzeit innehalten, z. B. das Objekt drehen und dann mit der Bewegung fortfahren. Diese komplexe Animation lässt sich jetzt mit nur zwei Key-Frames
animieren und berechnen, einem für die untere und einem für die obere Position des Oben2-Zylinders. Vielleicht auch eine interessante Angelegenheit für Kundenpräsentationen von Objekten. Denken Sie z. B. an ein Auto, bei dem durch das Bewegen eines NULL-OBJEKTS das Faltdach zusammenklappt oder das Licht angeschaltet wird. Der Nachteil ist ganz klar der relativ lange Zeitaufwand für die Programmierung und - bei komplexeren Objekten und Szenen - ein eher träger Bildschirmaufbau. Zudem können Sie nur in den Darstellungsqualitäten des Editors arbeiten. Die volle Raytracing-Funktionalität mit Spiegelungen, Schatten und Transparenzen wird erst beim Berechnen des Bildes oder Films sichtbar. Dies ist jedoch weit entfernt von einer Interaktivität, wie wir sie hier beobachten können.
Abbildung 5. 50: Automatisierte Bewegungssequenz für das Gerät Ganz fertig sind wir mit diesem Gerät noch nicht, denn eigentlich hatte so der bewegliche Ring oben auf dem Ausleger keinen Grund, in die Ausgangsstellung zurückzukehren, wenn der Oben-Zylinder nach unten bewegt wird. Dagegen würde eine Feder helfen, die den Gleiter wieder nach rechts an den Anschlag zieht. Diese Feder müsste am jetzt noch offenen Ende des Auslegers befestigt sein. Duplizieren Sie also den Stopper-Würfel auf dem Ausleger-Zylinder und ziehen Sie diesen nach rechts. Der Ausleger sollte auch etwas länger sein, damit die Feder noch Platz hat. Verlängern Sie dazu einfach den Auslegerzylinder und platzieren Sie den duplizierten Stopperam Ende. Rufen Sie einen neuen Zylinder auf, den Sie wie in Abbildung 3. 51 konfigurieren. Die Einstellungen bewirken, dass der Zylinder nur halb modelliert wird. Es entsteht eine glatte Schnittkante, an der die Feder befestigt sein könnte. Platzieren Sie diesen Zylinder im Stopper-Würfe l am Ende der Stange.
Abbildung 3. 51: Ein halber Zylinder als Anker für die Feder
Schließlich brauchen wir noch die Feder selbst. Solch ein Objekt haben wir schon im letzten Beispiel umgesetzt. Sie wissen also bereits, dass ein KREIS-Spline mit einem HELIX-Spline in einem SWEEP-NURBS zu dem gewünschten Ergebnis führt (siehe Abbildung 3. 52). Übernehmen Sie von dort die Parameter und platzieren Sie die Feder zwischen den Stoppern auf dem Ausleger.
Abbildung 3. 52: Helix und Kreis zu einer Feder zusammenfügen
Damit sich die Feder entsprechend der Bewegung des Seilzugs streckt und zusammenzieht, benötigen wir eine zusätzliche Expression für den HELIX-Spline. Wir könnten dort die Länge des Splines verändern, um die Längenänderung der Feder zu steuern. Da wir dies jedoch schon im ersten Beispiel praktiziert haben, verwende ich hier eine andere Methode, bei der wir direkt die Werte in einem parametrischen Objekt verändern können, also die Werte, die Sie m diesem Fall im HELIX-Dialog eingetragen haben. Wenn Sie nämlich wissen, wie dies funktioniert, können Sie nach dem gleichen Schema z. B. auch die Radien eines Würfels oder die Helligkeit einer Lampe über eine Expression steuern. Tippen Sie also die Expression aus Abbildung 3. 53 für den HELIX-Spline der Feder ab. Wie immer gehe ich kurz auf die einzelnen Zeilen ein, da hier neue Befehle vorkommen. var RingO2 = doc -> FindObject („Ring-Oben2"); if (!RingO2) return; Die erste Zeile sollte Ihnen vom Aufbau her bekannt vorkommen. Wir definieren dort das Wort RingO2 als Variable und weisen dieser die Daten des Objekts RingOben2 zu. Die folgende if-Abfrage haben wir bislang so nicht benutzt. In der Klammer steht jedoch wieder eine Bedingung. In diesem Fall lesen wir: „Wenn die Variable RingO2 nicht mit Werten gefüllt ist, dann... ". Das Ausrufezeichen vor der Variable bedeutet nämlich „nicht". Es handelt sich hier um eine etwas verkürzte Schreibweise, da kein Vergleich der Variable mit einem Zahlenwert vorliegt. Trotzdem ist dies eine legitime Bedingung. Der Befehl, der ausgeführt wird, wenn die Variable keine Werte enthält, ist return. Er sorgt dafür, dass die Expression beendet, bzw. nicht weiter ausgeführt wird. Bei dieser if-Abfrage handelt es sich also um eine Sicherheitsabfrage, um Komplikationen im Programm zu vermeiden, wenn eine wichtige Variable nicht mit Werten gefüllt werden konnte. Dies kann hier eigentlich nur der Fall sein, wenn der F i n d O b j e c t ( ) - B e f e h l kein Objekt mit dem entsprechenden Namen finden konnte. Die Variable bleibt dann unbelegt. var Werte = op -> G e t C o n t a i n e r ( ) ; if ( I W e r t e ) return; Die Variablendeklaration von hoehe und posO2 überspringe ich gleich, da dieser Befehl bereits mehrfach benutzt und langsam bekannt sein sollte. Hier begegnet uns jedoch etwas Neues, nämlich der GetContainer()-Befehl. Ein Container enthält alle Parameter eines Objekts, also bei einer Lichtquelle z. B. deren Farbe, Helligkeit und die Art des Schattenwurfs - also alle Werte, die sich im entsprechenden Dialog des Objekts auch im OBJEKTE-Fenster einstellen lassen, in unserem Fall erhalt die Variable Werte hier alle Daten der Helix. Auch hier folgt wieder zur Sicherheit eine if-Abfrage, ob auch tatsachlich die entsprechenden Daten gefunden und übergeben werden konnten. Hatten wir den parametrischen HELIX-Spline also in ein Spline-Objekt konvertiert, so konnte der
Container nicht mit Werten gefüllt werden und wurde daher einen Abbruch der Ex-pression — Ausführung pro Es folgen bereits bekannte Zeilen, in denen die Position des Ring-Oben2-Objekts in der Variable posO2 gespeichert werden. hoehe = 250. 0; if (posO2. y > 665) hoehe = 250 + (posO2. y - 6 6 5 ) ; Hier wird die Variable hoehe zuerst mit einem Wert von 250 gefüllt. Dies entspricht der Ausgangshöhe der HELIX, also der Länge in der entspannten Position. Danach folgt eine Abfrage, ob die Y-Position des Ring-Oben2-Objekts den Wert 665 übersteigt. Dies war ja der von uns selbst gesetzte Grenzwert für die Höhe, ab dem der Seilzug auf dem Ausleger eine Verkürzung erfahrt. Dies ist also auch der Zeitpunkt an dem die Feder die Lange verändern muss, um den Anschluss nicht zu verlieren. Da die Variable hoehe für die HÖHE im HELIX-Dialog stehen soll, muss diese Variable also dann angepasst werden. Für die entsprechende Wertberechnung greife ich auf die gleiche Formel wie schon für den beweglichen Ring zurück. Jeder Meter mehr an Höhe über 665 m führt zu einem Meter mehr im Wert der Variablen hoehe. Dieser hoehe — Wert - egal ob er nun noch bei 250. o liegt, oder durch die Erfüllung der if-Bedingung neu berechnet wurde -, muss nun in den HELIX-Container eingetragen werden. Dies bewirkt der Set — Data — Befehl. Werte -> SetData (PRIM_HELIX_HEIGHT, hoehe); op -> SetContainer ( W e r t e ) ; Container können so viele verschiedenen Parameter enthalten, dass wir dem Befehl mit auf den Weggeben müssen, wohin der Wert abgespeichert werden soll. Für diesen Zweck gibt es festgelegte Benennungen für jedes Parameter-basierte Objekt, die Sie dem so genannten SDK für die COFFEE- Programmiersprache entnehmen können. Eine aktuelle HTML — Version des SDKs finden Sie auf der CD zu diesem Buch.
Dort können Sie auch nachschlagen, dass die Benennung für die Höhe einer Helix mit PRIM_HELIX_HEIGH Wenn Sie mehrere Werte eines Objekts gleichzeitig in einer COFFEE-EXPRESSION oder einem COFFEE-PLUGIN vorgeben möchten, können Sie auch mehrere dieser SetData — Zeilen untereinander schreiben und jeweils dem Container des Objekts zuweisen. Hier kommen wir jedoch nur mit dem Höhe-Wert aus. Ist der Container nun mit den neuen Werten gefüllt, muss er dem Objekt wieder übergeben werden. Dies geschieht mit dem SetContainer-Befehl. op -> Message (MSG_UPDATE): In dieser abschließenden Befehlszeile teilen wir CINEMA 40 mit, dass wir das opObjekt bezuglich der Form verändert haben und erwirken damit einen Aktualisierung eventuell abhangiger Tags und der Ansichtsfenster.
Abbildung 3. 53: COFFEE-Expression für die automatische Anpassung der Federlänge
Lassen Sie die Expression -wie mittlerweite gewohnt - kompilieren und ausführen. Die Feder sollte sich jetzt wie in Abbildung 3. 54 automatisch mit dem Seilzug verändern. Die Maschine ist damit komplett.
Abbildung 3. 54: Bewegungsphasen der Feder
3.3Delta—Expression Ais Abschluss dieses Kapitels über COFFEE-EXPRESSIONS möchte ich Ihnen eine so genannte DELTA — EXPRESSION vorführen. Mit Delta sind Expressions und Plugins betitelt, die auf bereits vergangene Daten eines Objekts bezug nehmen. Dies kann die Position, die Größe oder z. B. auch die Farbe sein. Wir haben dabei jegliche Freiheit,
da wir selbst beliebige Werte so speichern können, dass eine Expression zu einem späteren Zeitpunkt wieder auf diese Daten zugreifen kann. Wozu könnte man dies benutzen? Stellen Sie sich ein Auto mit einer langen Antenne vor. Das Auto beschleunigt, bremst ab, fährt in eine Kurve usw. Dabei wird die Antenne keineswegs starr dem Auto folgen, sondern anfangen zu schwingen und zu pendeln. Dies hängt mit der Trägheit jedes massebehafteten Objekts zusammen. Trägheit könnte man nämlich auch so umschreiben, dass dies eine Kraft ist, die den Zustand eines Objekts bewahren möchte. Im Falle der Antenne heißt dies also, dass die Antenne beim Beschleunigen des Autos eigentlich lieber in ihrer letzten Position bleiben möchte. Sie folgt daher der Beschleunigung nur mit einer Verzögerung. Wir merken dies selbst, wenn wir beim Beschleunigen des Autos mehr oder minder stark in den Sitz gepresst, bzw. beim Bremsen nach vorn in den Gurt gedrückt werden. Um nun aber wieder auf Expressions zurückzukommen, so heißt das, dass wir das Antenne — Objekt für eine gewisse Zeitspanne auf der vorherigen Position festhalten müssen, bevor wir diesem erlauben dürfen, dem Auto-Objekt zu folgen. Damit dies funktionieren kann, müssen wir also dem Auto-Objekt einen gewissen Vorlaufgewähren. Ich habe Ihnen eine entsprechende Expression geschrieben, die ich Ihnen hier detailliert vorsteilen möchte. Dieser Effekt lässt sich recht häufig verwenden, wenn es um die Animation von Objekten aus mehreren elastischen Teilen geht. uiain (doc, op) {
var T = doc -> GetTime(); var sec = T -> GetSecond(); var J. pos, rot, vec, rotv, RDZeit, DZeit, RDX, DX, RDY, DY, RDZ, DZ;
var var var var
Delay = 10; damp = 0; Rdamp = 0; speed = 1;
var rspeed = 1; var scale = 6; var rscale = 6; var OFFSETX, OFFSETY, OFFSETZ; var ROFFSETX, ROFFSETY, ROFFSETZ; OFFSETX = 0. 0; OFFSETY = 250. 0; OFFSETZ = 0. 0; ROFFSETX = 0. 0; ROFFSETY = 0. 0; ROFFSETZ = 0. 0; var follow = doc -> FindObject ("Follow"); var bc = op -> GetContainer();
if (sec = 0. 0) { for (j = 1; j < Delay+1; j ++) {
bc->SetData (j. op->GetPosition());
bc->SetData (j+200, op->GetRotation()); bc->SetData (98, sec); // Zeitpunkt ohne Rotationsveränderung bc->SetData (99, vector (0, 0, 0)); // Rotationsveränderung bc->SetData (100, vector (0, 0, 0)); // Distanzvektor
bc->SetData (101, sec); // Zeitpunkt des Stillstehens
} } vec = scale * bc -> GetVector (100); rotv = rscale * bc -> GetVector (99); pos = bc -> GetVector (1); rot = bc -> GetVector (201); // Rotation if (rot != bc •> GetVector (202)) { bc -> SetData (98, sec); bc -> SetData (99, bc -> GetVector (202) - rot); follow -> SetRotation (vector (rot. x +• ROFFSETX, rot. y + ROFFSETY, rot. z + ROFFSETZ)); } if (rot == bc -> GetVector (202)) { RDZeit = sec • bc- > GetFloat(98); RDX = sin (rspeed * RDZeit * PI) * (rotv. x) *1 / ((Rdamp + 1) * RDZeit + 1); RDY = sin (rspeed * RDZeit * PI) * (rotv. y) *1 / ((Rdamp + 1) * RDZeit + 1); RDZ = sin (rspeed * RDZeit * PI) * (rotv. z) *1 / ((Rdamp + 1) * RDZeit + 1); follow -> SetRotation (vector(rot. x + ROFFSETX + RDX, rot. y + ROFFSETY + RDY, rot. z + ROFFSETZ + RDZ)); } // Position if (pos != bc -> GetVector (2)) { bc -> SetData (101, sec); bc -> SetData (100, bc -> GetVector (2) - pos); follow -> SetPosition (vector (pos. x + OFFSETX, pos. y + OFFSETY, pos. z + OFFSETZ)); }
if (pos = bc -> GetVector(2)) {
DZeit = sec - bc -> GetFloat DX = sin (speed * DZeit * PI) DZeit + 1); DY = sin (speed * DZeit * PI) DZeit + 1); DZ = sin {speed * DZeit * PI) DZeit + 1); follow -> SetPosition (vector OFFSETY + DY, pos, z + OFFSETZ
(181); * (vec. x) *1 / ((damp + 1) * * (vec. y) *1 / ((damp + 1) * * (vec. z) -l / ((damp + 1) * (pos. x + OFFSETX + DX, pos. y + + DZ));
] / / Delta-Werte verschieben
for (j = 1; j < Delay; j++) {
bc -> SetData (j, bc -> GetVector (j+D); bc -> SetData (j+200, bc -> GetVector (j+201));
} // Neue Werte speichern bc -> SetData (Delay. op -> GetPosition()); bc -> SetData (Delay+200, op -> GetRotation()); op -> SetContainer (bc);
} Listing 5. 1: Delta — COFFEE — Expression für Rotation und Position
Nahezu alle in diesem Listing benutzten Befehle sind ihnen mittlerweile bekannt. Ich reiße daher die Funktionen der einzelnen Befehlsgruppen nur noch an: var var var var var
T = doc -> G e t T i m e ( ) ; sec = T -> GetSecond; j, pos, rot, vec, rotv, RDZeit, DZeit. RDX, D X , RDY, DY, RDZ, DZ; Delay = 10; damp = 0;
var Rdamp = 0; var speed = 1; var rspeed = 1; var scale = 6; var rscale = 6; var OFFSETX. OFFSETY, OFFSETZ; var ROFFSETX, ROFFSETY, ROFFSETZ; OFFSETX = 0. 0; OFFSETY = 250. 0; OFFSETZ = 0. 0; ROFFSETX = 0. 0; ROFFSETY = 0. 0; ROFFSETZ = 0. 0;
Hier werden zuerst alle benötigten Variablen reserviert. T erhält die Daten der zeitlichen Position innerhalb der Animation, sec die entsprechende Umrechnung in die Einheit Sekunden.
Der Wert von delay legt fest, wie viele Bilder das Objekt einem anderen Objekt „hinterherhinken" soll. Damp und Rdamp beziffern die zusatzliche Starke der Dämpfung der Schwingungen für die Position und die Rotation. Die Schwingungen werden zwar später automatisch entsprechend der verstrichenen Zeit gedämpft, über diese beiden Werte kann die Dämpfung jedoch erhöht werden. Für diese und die noch folgenden Variablen gilt, dass ich ein vorgestelltes r für die Werte benutze, die für die Rotation von Bedeutung sind. speed und rspeed steuern die Schnelligkeit des Nachschwingens. Je höher der Wert, desto steifer wirkt die Verbindung zwischen den Objekten, scale und r s c a l e skalieren die Amplitude des Nachschwingens. Damit kann man ein stärkeres Nachschwingen erzwingen, als es die Bewegung des Hauptobjekts eigentlich generieren wurde. Es folgen die OFFSET-Werte für alle drei Achsen jeweils für die Position und die Rotation. Über diese Werte steuern Sie die Lage des folgenden Objekts zu der des Hauptobjekts. Die hier eingestellten Werte sorgen also dafür, dass das folgende Objekt in der Ausgangsposition 250 m über dem Hauptobjekt liegt und alle Rotationswerte bei o liegen (ROFFSET-Werte steuern die Ausgangslage der Rotation). var f o l l o w = doc -> FindObject ( " F o l l o w " ) ; var bc = op -> GetContainer(); Die Variable follow wird milden Werten des Objekts gefüllt, das dem Hauptobjekt mit der Expression folgen soll. In meiner Szene habe ich dieses Objekt Follow genannt. Danach folgt der eigentlich wichtigste Teil dieser Expression. Wir rufen einen Container für das Hauptobjektauf, dem wir die Variable bc geben. Ein Container ist uns bereits im Beispiel zuvor begegnet, wo wir Werte der HELIX über einen Container verändern konnten. Dieser Container hier hat jedoch keinen festgelegten Inhalt mit feststehenden Benennungen für einzelne Werte. Wir können den Inhalt selbst festlegen.
if (sec == 0. 0) { for (j = 1; j < Delay+1; j ++) { bc->SetData (j, op->GetPosition()); b c - > S e t D a t a (j+200, op->GetRotation()); bc->SetData (98, s e c ) ; / / Zeitpunkt ohne Rotationsveränderung bc->SetData (99, vector (0, 0, 0 ) ) ; // Rotationsveränderung bc->SetData (100, vector (0, 0, 0 ) ) ; / / Distanzvektor b c - > S e t D a t a (101, s e c ) ; // Zeitpunkt des Stillstehens } } Um eine definierte Ausgangsposition für die spatere Berechnung der Schwingungen zu haben, muss der Container nun mit Werten gefüllt werden. Sinnvoll ist dafür immer der erste mögliche Zeitpunkt in einer Animation, also der Zeitpunkt o. Dies
drückt die if-Abfrage aus. Interessant ist hier die Bedingung sec==o. o. Das doppelte Gleichheitszeichen liest sich wie folgt: „Wenn die Variable sec identisch mit Null, dann... ". Befinden wir uns also am Beginn der Animation, werden die nachfolgend in ge-
schweiften Klammern stehenden Zeilen ausgeführt. Diese beginnen mit einer for — Schleife. Eine for-Schleife w Gruppe von Befehlen mehrmals hintereinander ausführen möchte. Dies mag zuerst unlogisch klingen. Der große Vorteil dabei ist, dass die for-Schleife mit einer Variablen funktioniert, die im Laufe der Zeit ihren Wert verändern kann. Die forSchleife enthalt zudem eine Abbruchbedingung, mit der die Wertentwicklung dieser auch Zählvariable genannten Variable laufend überwacht werden kann. Schließlich können wir noch eine Schrittweite für die Zählvariable definieren. In diesem Beispiel ist die Zahlvariable j und diese hat zu Beginn den Wert1 (j=1). Nach jedem Durchlauf wird j um den Wert i erhöht (j ++). Diese Schreibweise ist die verkürzte Version der Formel j=j+1. Die Zählvariable hat also zuerst den Wert i und wird dann nach jedem Durchlauf um i erhöht. Wann endet nun diese Schleife? Dafür sorgt die Abbruchbedingung, die hier lautet j < Delay + 1. Solange j also kleiner als der Wert der Variablen Delay plus i bleibt, wird die Zahlvariable um i erhöht und die eingeklammerten Befehle werden ausgeführt. Die Befehle innerhalb der for-Schleife, die ja wegen der übergeordneten if-Abfrage nur dann ablauft, wenn sec==0 ist, sorgen jetzt für die Befüllung des Containers. Dieses Füllen des Containers funktioniert mit dem bc->SetData()-Befehl. In der SetData — Klammer wird zuerst die Nummer oder der Name eingetragen, unter der der Wert später wieder auffindbar sein soll. Dann folgt ein Komma und der eigentliche Wert, der unter der Nummer gespeichert werden soll. Beim ersten Schleifendurchlauf lesen wir also in der ersten Befehlszeile: „Speichere im Container unter der Nummer1 den Positionsvektor des op-Objekts ab". Da sich die Zahlvariable j laufend verändert, wird beim nächsten Durchlauf der Schleife der Positionsvektor nicht wieder unter der Nummer i abgespeichert, sondern unter Nummer 2. Der Wert wird also nicht überschrieben, sondern es kommt zu einer zeitlichen Abfolge von Werten. Wenn wir also einen Delay von 10 eingestellt haben, so werden 10 Positionsvektoren des op-Objekts gespeichert. Hier haben alle Einträge von i bis 10 dann noch den gleichen Wert, da sie zum gleichen Zeitpunkt aufgenommen wurden, aber später im Programm wird sich dies ändern. An Platz 5 steht dann exakt die Position, die das op-Objekt vor 5 Bildern innehatte. In der folgenden Zeile werden dagegen die Containerplatze 201 bis 210 mit den Rotationsvektoren gefüllt. Die Speicherplätze 98 bis 101 erhalten hier Nullvektoren oder den Wert o. o. Da hier nur diese vier Containerplatze belegt werden, hatten diese Zeilen nicht in der for-Schleife stehen müssen. Es hatte ausgereicht, diese Zeilen unter die forSchleife, aber noch innerhalb der if- Klammern anzubringen. Aber so funktioniert es natürlich auch.
Die zukünftige Bedeutung der Werte in den Plätzen 98 bis 101 habe ich als Kommentar hinter den Zeilen angefügt. Dies wird im Verlauf des Programms noch deutlicherwerden. vec = s c a l e * bc -> GetVector (100); rotv = rscale * bc -> GetVector ( 9 9 ) ; pos = bc -> GetVector (1); rot = bc -> GetVector (201); Die Variable vec bekommt hier den Richtungsvektor zwischen den letzten beiden Positionen, multipliziert mit dem Skalierungswert s c a l e , zugewiesen. Was ein Richtungsvektor ist, können Sie in dem Abschnitt mit dem Seilzug-Morphing des letzten Beispiels nachlesen. Da nicht nur Postionen, sondern auch Winkel als Vektoren geschrieben werden können, verwende ich die gleiche Formel auch für rotv, also die entsprechend skalierte Änderung der Rotationsvektoren. pos und rot bekommen jeweils die letzten noch gespeicherten Positionen im Container zugewiesen, also die Werte, die das op-Objekt vor der mit delay bestimmten Zeit innehatte. if (rot != bc -> GetVector (202)) { bc -> SetData (98. s e c ) ; bc -> SetData (99, bc -> GetVector (262) - rot): follow -> SetRotation (vector (rot. x + ROFFSETX, rot. y + ROFFSETY. rot. z + R O F F S E T Z ) } ;
}
Wenn dieser Rotationsvektor rot mit dem vorherigen nicht übereinstimmt, muss das op-Objekt noch in Bewegung sein. Ein Nachschwingen ist also nicht notig, sondern nur das Übernehmen der Rotation. Dies ist verkürzt die Botschaft dieser Zeilen. Sowohl die gespeicherte Zeit in Fach 98, wie auch die Veränderung der Winkel in Fach 99 werden auf den aktuellen Stand gebracht. Schließlich wird für das follow-Objekt noch der Rotationswert eingestellt, wobei auch der Winkel-Offset mit einfließt. if (rot == bc -> GetVector ( 2 0 2 ) ) { RDZeit = sec - bc- > GetFloat(98); RDX = sin (rspeed * RDZeit * PI) * (rotv. x ) *1 / {(Rdamp + 1) * RDZeit + 1);
RDY = sin (rspeed * RDZeit * PI) * (rotv. y) *1 / ((Rdamp + 1) * RDZeit + 1); RDZ = sin (rspeed * RDZeit * PI) * (rotv. z) -l / ((Rdamp + 1) * RDZeit + 1); follow -> SetRotation (vector(rot. x + ROFFSETX + RDX, rot. y + ROFFSETY + RDY, rot. z + ROFFSETZ + RDZ)); l
Wenn nun aber der rot-Vektor nicht mit dem Vektor danach in Fach 202 übereinstimmt, so bedeutet dies, dass zu diesem Zeitpunkt keine Rotation des op-Objekts stattgefunden hat. Dann werden diese Zeilen ausgeführt und zuerst einmal für die Variable R D Z e i t die Differenz zwischen der aktuellen Zeit und der letzten Zeit einer Rotationsveränderung berechnet. Dieser Wert entspricht dann der Zeit, die das opObjekt schon insgesamt stillsteht. Die Werte RDX, RDY und RDZ berechnen im Prinzip eine einfache Sinusschwingung, die jedoch durch das Multiplizieren mit l / ((Rdamp +1 ) * RDZeit + 1)laufend abgeschwächt wird. Dadurch, dass bei längerem Stillstehen des op-Objekts die Zeitdifferenz zwischen der aktuellen Zeit und der letzten Veränderung immer größer wird, reduziert sich dieser Faktor laufend und dämpft damit die Schwingung im Laufe der Zeit ab. Hinzu kommt die Verstärkungsmöglichkeit der Dämpfung durch einen Rdamp-Wert großer o. Diese gedampfte Sinusschwingung wird dann einfach zu dem vorhandenen Rotationswert addiert und mit follow->SetRotation() auf das follow-Objekt übertragen. Solange also das op-Objekt in Ruhe verweilt, bekommt das follow-Objekt eine zeitlich gedampfte Sinusschwingung mit der maximalen Amplitude der letzten Winkeländerung multipliziert mit dem rscale-Wert verpasst. if (pos != bc -> GetVector ( 2 ) ) t bc -> SetData (101. sec);
bc -> SetData (100, bc -> GetVector (2) - pos); follow -> SetPosition (vector (pos. x + OFFSETX, pos. y + OFFSETY, pos. z + OFFSETZ));
) if (pos == bc -> G e t V e c t o r ( 2 ) } { DZeit = sec • bc -> GetFloat (101); DK = sin (speed * DZeit * PI) * (vec. x) *1 / ((damp + 1) *
DZeit + 1); DY = sin (speed - DZeit * PI) * (vec. y) *1 / ((damp + 1) * DZeit + 1); DZ = sin (speed - DZeit * PI) * (vec. z) *1 / ((damp + 1) * DZeit + 1); f o l l o w -> SetPosition (vector (pos. x + OFFSETX + DX, pos. y + OFFSETY + DY, pos, z + OFFSETZ + D Z ) ) ; )
Exakt das Gleiche passiert hier für die Position s werte des follow-Objekts. Die erste if-Abfrage überprüft, ob das op-Objekt weiterhin in Bewegung ist. Wenn ja, wird dessen Bewegung einfach für das follow-Objekt übernommen und die Felder 101 und 100 werden aktualisiert. Auf diese Werte muss zugegriffen werden, wenn plötzlich ein Stillstand des op-Objekts eintritt. Wir können dann aus dem Wert in Feld 101 ablesen, wann die letzte Bewegung stattgefunden hat und aus Feld 100 erfahren wir, wie groß die Veränderung dieser Bewegung war.
Beide Werte sind essentiell für die zweite if-Abfrage, die dann abgearbeitet wird, wenn das Objekt zwischen den abgespeicherten Werten in Feld i und 2 keine Bewegung mehr zeigt. Es kommt dann zu der bereits bekannten Sinus-Berechnung, die uns eine schöne gedämpfte Schwingung mit dem letzten Bewegungsvektor als Amplitude um die letzte Position liefert. Diese Werte werden dann mit dem SetPosition( )-Befehl auf das follow-Objekt übertragen. for (j = 1; j < Delay; j++) { bc -> SetData (j, bc -> GetVector (j+D); bc -> SetData (j+200. bc -> GetVector (j+281)); l Damit haben wir es fast geschafft. Funktionieren kann es allerdings erst, wenn wir laufend die aktuelle Position und Rotation des op-Objekts abspeichern und die zuvor gespeicherten Werte um eine zeitliche Position im Container verschieben. Dieses Verschieben erledigt hier die for-Schleife, die von i bis zu Delay-1 läuft. Setzt man für j Zahlenwerte ein, so ergeben die beiden Befehlszeilen in der Schleife sehne!! einen Sinn. Der Wert von Fach i wird gefüllt mit dem Wert von Fach 2, der von Fach 2 mit dem Wert von Fach 3 und so weiter. Die Werte rücken also alle ein Fach auf, und der letzte Wert in Fach i fällt weg. Das gleiche passiert um 200 verschoben für die Rotationswerte. So rutscht der Wert aus Fach 202 in das Fach 201 usw. Jetzt müssen wir nur noch die beiden Fächer Delay und Delay+200 mit den aktuellen Werten füllen. Damit haben wir die Container-Fächer auf den aktuellen Stand gebracht. bc -> SetData (Delay. op •> G e t P o s i t i o n ( ) ) ; bc -> SetData (Delay+200, op -> G e t R o t a t i o n ( ) ) ; op -> SetContainer (bc); Jetzt gilt es nur noch, diese mühsam erworbenen Daten in dem Container so zu speichern, dass beim nächsten Aufruf der Expression alle Daten noch da sind. Dies erledigt die Setzte Zeile der Expression mit dem SetContainer()-Befehl. Alle Werte im bc-Container werden dann so gesichert, dass sie für die Berechnung des nächsten Bildes wieder zur Verfügung stehen. Dies ist sehr wichtig, da wir in den Berechnungen auf bereits vergangene Positionen und Winkel zugreifen müssen, eben auf Delta-Werte zur aktuellen Position. Da sich der Effekt nur in der Animation zeigt, lässt sich ein Beispiel kaum in Bilder für das Buch bannen. Ich bitte Sie daher, die Szenen auf der CD zu diesem Kapitel zu betrachten. Ich denke, der Programmieraufwand lohnt sich, da der Effekt sehr vielseitig einsetzbar ist und auch ansonsten in CINEMA 40 nicht integriert ist. Ein kleiner Wehrmutstropfen bleibt jedoch bei den meisten Delta-Plugins übrig, denn sie kooperieren oft nicht mit dem Netzwerk-Renderer von CINEMA 40. Dies hängt damit zusammen, dass die Werte für den Container zeitlich linear gesammelt werden. Der Netzwerk-Renderer springt jedoch - je nach Leistung der integrierten
Rechner - fast beliebig von Bild zu Bild in einer Animation. Die Containerwerte verlieren dadurch ihre Kontinuität und können nicht mehr zu den erwünschten Ergebnissen führen. Ein Ausweg wäre die Speicherung der Positionen und Rotationen in einer Datei auf der Festplatte. Dies ist auch in Expressions durchaus möglich. Ich empfehle daher, die Arbeit mit dem COFFEE-SDK, das alle verfügbaren Befehle und kleinere Beispiele enthält. Da es aber noch genügend andere interessante Betätigungsfelder in CINEMA 4D gibt, möchte ich das Expression-Kapitel hiermit schließen. Ich hoffe, Sie konnten Ideen für eigene Expressions sammeln oder die Scheu vor der Programmierung verlieren, falls Sie zuvor noch nichts mit diesem Thema zu tun hatten. Als Ausweg und schnelle Lösung gibt es aber auch eine ständig anwachsende Zahl von Expressions und Plugins im Netz. Ein guter Startpunkt für eine Suche danach ist die MAXON-Homepage. Weitere Quellen und Plugins finden Sie auf der CD zu diesem Buch.
4
Organisches Modellieren
Wenden wir uns in diesem Kapitel etwas von den eher technischen Einsatzgebieten von CINEMA 4D ab Sehr oft lese ich in 3D-Foren von 30 Begeisterten, die nach Hilfe bei der Modellierung von menschlichen Köpfen suchen Dabei fehlen nicht die technischen Vor aussetzungen bei der Arbeit m CINEMA 40, sondern anatomische Kenntnisse oder künstlerisches Fertigkeiten Spätestens seit Version 6 und dem Einzug von HyperNURBS in CINEMA 40 ver suchen sich immer mehr an der Darstellung von so genannten Characters, also von kunstlichen Figuren mit fantastischem oder realistischem Ursprung
Ich mochte daher m diesem Kapitel ausführlicher erläutern, wie man an die Planung und Realisierung eines s Damit sich der Aufwand für diesen komplexen Workshop lohnt, habe ich ihn auf die kommenden drei Kapitel verteilt, wobei jedes Kapitel einen anderen Schwerpunktabdeckt In diesem Kapitel arbeiten wir uns von der ersten Skizze bis zum fertigen Modell eines menschlichen Kopfes vor Im nächsten Kapitel erganzen wir den Kopf durch einen Robotertorso und lernen dabei etwas über die Modellierung technischer Bau teile Am Schluss des kommenden Kapitels kommt dann noch ein Raum hinzu und wir gruppieren die Objekte zu einer Szene Im sechsten Kapitel nutzen wir dann das erweiterte Materialsystem von CINEMA 4D V7, um die Szene möglichst realistisch und ohne den Einsatz von Bildtexturen zu texturieren Dort beschäftigen wir uns dann auch mit den Radiosity- und Gl Berechnungsmethoden, um die Szene perfekt zu berechnen Jedes Kapitel ist m sich abgeschlossen Sie können also durchaus ein Kapitel überspringen und mit den Szenen und Objektdaten von der CD ROM an beliebiger Stelle einsteigen
4. 1 Herstellen von 3D-tauglichen Vorlagen Die Aufgabenstellung für dieses Kapitel ist die Modellierung eines weiblichen Kopfes, den wir zunächst skizzenhaft entwerfen wollen Diese Herangehensweise ist unbedingt zu empfehlen, da man durch vorhandenes Skizzen oder Bildmaterial bei der Modellierung viel Zeit sparen kann Zudem lasst sich damit der Gesichtsaus druck schon frühzeitig planen und bleibt nicht - wie beim freien Modellieren - dem Zufall überlassen
Wir beginnen mit einem Blatt Papier oder mit einem leeren Dokument in einem Bildbearbeitungs- oder Malprogramm Ihrer Wahl. Wir benötigen dabei nur die grundlegendsten Funktionen. Wir starten mit einer Skizze der seitlichen Schädelansicht und wählen dazu ein Seitenverhältnis von 8 zu 6, also z. B. ein leeres Dokument in Photoshop mit den Abmessungen 800 x 600 Pixel. Wir benötigen zudem 4 Hilfslinien. Eine senkrechte Linie begrenzt links ein quadratisches Feld von 600 x 600 Pixel, eine waagerechte Linie teilt dieses Quadrat exakt in der Mitte. Eine zweite senkrechte Linie teilt das Quadrat gleichmäßig senkrecht, und eine zweite horizontale Linie halbiert die untere Hälfte des Quadrats (siehe Abbildung 4. 1).
Abbildung 4. 1: Hilfslinien für die seitliche Kopfansicht Die linke Hälfte des Quadrats wird beginnend bei einem Viertel der Höhe bis zur oberen Mitte mit einem Halbkreis gefüllt. Dies wird der Hinterkopf. Auf der rechten Seite des Quadrats zieht sich ein gestreckter Halbkreis vom Scheitel bis ganz nach unten. Diese Linie flankiert die Stirn und das Gesicht. Das Ohr wird grob zwischen der mittleren und unteren horizontalen Linie eingezeichnet, wobei der obere Rand des Ohrs über die Mittellinie hinausragt. Schließlich verbindet eine weich geschwungene Linie den Mittelpunkt des Quadrats mit dem Kinn (siehe Abbildung 4. 2). Eine neue Hilfslinie teilt das untere Viertel des Quadrats erneut gleichmäßig horizontal. Dort wo diese neue Hilfslinie die Gesichtspartie durchschneidet, beginnt eine geschwungene Linie, die bis zum Mittelpunkt des Quadrats reicht. Diese Linie definiert die Wangen, sowie später die Position der Lippen.
Abbildung 4. 2: Grundform des seitlichen Kopfes einzeichnen
Die Nase beginnt auf der horizontalen Mittellinie, markiert ca. ein Drittel Wegstrecke vor der nächsten horizontalen Hilfslinie darunter die Nasenspitze und endet dann an der Halbierung der Quadrathälfte (siehe Abbildung 4. 3). Die Nasenspitze sollte dabei über dem unteren Ansatzpunkt der Nase liegen (Stupsnase).
Abbildung 4. 3: Nase und Wange einzeichnen
Die horizontal Halbierende des Quadrats markiert gleichzeitig die Höhe der Augen. Die Augen liegen also exakt auf der Hälfte des Kopfes. Wie tief die Augen im Kopf liegen, ist Ermessenssache (siehe Abbildung 4. 4).
Abbildung 4. 4: Das Auge platzieren
Zeichnen Sie nun eine Gerade von der Nasenspitze bis zu der Stelle, an der die Wangenlinie mit der Gesichtslinie zusammentrifft. Diese Linie gibt die maximale Auswölbung der Lippen an. Die Oberlippe steht daher weiter ab als die Unterlippe. Die Unterlippe wird begrenzt von der Wangelinie, wobei der Mundwinkel ungefähr unter dem Auge liegt (siehe Abbildung 4. 5). Eine Gerade von der Nasenwurzel direkt vor den Augen bis zum Mundwinkel markiert die Lage der Nasenflügel. Korrigieren Sie den Verlauf der Nasenspitze bis zur Oberlippe durch eine sanft geschwungene Linie. Über dem Auge sollte noch die Braue ergänzt werden. Diese sollte ein gutes Stuck über dem Auge liegen, da sie auch den Augenwutst markiert (siehe Abbildung 4. 6).
Abbildung 4. 5: Die Lippen einzeichnen
Abbildung 4. 6: Nasenflügel und Augenbraue ergänzen
Sie können nun alle Hilfslinien entfernen und die Konturen nochmals auf Stimmigkeit überprüfen. Wölben Sie zudem das Kinn etwas nach vorne, damit unter der Unterlippe eine kleine Kuhle entsteht (siehe Abbildung 4. 7).
Abbildung 4. 7: Hilfslinien entfernen und Konturen nachzeichnen
Diese Skizze soll uns als Referenz für die Seite genügen. Wir benötigen als Nächstes ein ähnliches Konzept für die Skizze einer frontalen Ansicht. Damit beide Ansichten spater exakt zueinander passen, verwenden Sie bitte wieder die gleichen Abmessungen für die Höhe, also 600 Pixel. Wählen Sie die Arbeitsfläche etwas größer, also vielleicht 650 Pixel, damit für das Zeichnen mehr Spielraum vorhanden ist. Die Breite ist ebenfalls mit 650 Pixeln gut gewählt, damit seitlich für die Ohren genügend Platz bleibt. Halbieren sie die 600 x 600 Pixel-Fläche mit zwei Hilfslinien horizontal und vertikal, und trennen Sie unten die überflüssigen 50 Pixel mit einer weiteren Linie optisch ab. Zeichnen Sie eine ovale Form in das Quadrat, wobei diese unten etwas spitzer zuläuft. Lassen Sie jeweils seitlich ca. 100 Pixel frei (siehe Abbildung 4. 8). Messen Sie den Kopfdurchmesser auf der Mittellinie ab und teilen Sie diese Entfernung in 5 gleiche Abschnitte auf. Ich habe dies in Abbildung 4. 9 mit vertikalen Linien angedeutet. Diese Hilfslinien beruhen darauf, dass ein Kopf ungefähr 5 Augen breit ist. Wir können also von der Kopfbreite auf die Lage und Breite der Augen schließen.
Abbildung 4. 8: Hilfslinien für frontale Kopfansicht und Umrisslinie
Abbildung 4. 9. - Fünf gleichmäßige Unterteilungen der Kopfbreite
Wie in der seitlichen Ansicht, liegen die Augen nämlich exakt in der Mitte des Kopfes und daher genau auf der halbierenden Horizontalen. Zeichen Sie also dort links und rechts der Mitte zwei ovale Platzhalter für die Augen ein (siehe Abbildung 4. 10).
Abbildung 4 10: Einzeichnen der Augen Nehmen Sie sich einen Zirkel zur Hand und messen Sie die Distanz zwischen den äußeren Ecken der Augen ab. Schlagen Sie dann mit diesem eingestellten Wert Kreise um die äußeren Augen — Winkel. Markieren Sie die Stelle, in der sich diese Kreise mit der senkrechten Mittellinie kreuzen. Durch diesen Kunstgriff haben wir ein gleichschenkliges Dreieck konstruiert. Das heißt, jede Seite des Dreiecks ist exakt gleich lang. In einem Malprogramm können Sie dies z. B. so konstruieren, dass Sie auf einer leeren Ebene eine Linie vom linken Augenwinkel des linken Auges zum rechten Augenwinkel des rechten Auges ziehen und diese Linie dann um 60° drehen. Verschieben Sie diese gedrehte Linie dann so, dass der obere Punkt in dem entsprechenden Augenwinkel landet. Markieren Sie schließlich die Stelle, auf der die gedrehte Linie die senkrechte Hilfslinie berührt (siehe Abbildung 4. 11).
Abbildung 4. u: Hilfslinien für Nase und Mund
Gehen Sie ein Drittel der Strecke zwischen diesem Punkt und der horizontal Haibierenden hinauf und markieren Sie die Stelle. Dort endet die Nase. Schlagen Sie einen großzügigen Bogen von der horizontalen Mittellinie durch den durch das Dreieck ermittelten Punkt. Diese Linie markiert die Wangenlinie, die uns bei der Konstruktion des Mundes helfen wird. Bedenken Sie, dass diese Linie an den Seiten des Kopfes nicht bereits an der Mittellinie sichtbar sein wird. Wie man in der seitlichen Ansicht sehen konnte, beginnt diese Linie bereits an den Ohren und lauft daher u m den halben Kopf herum (siehe Abbildung 4. 12). Skizzieren Sie - unten von der Wangenlinie begrenzt - die Lippen, wobei die Unterlippe etwas voluminöser sein sollte als die Oberlippe. Platzieren Sie die Mundwinkel unter der Mitte der Augen. Skizzieren Sie grob die Ohren, die auf Hohe der Augen beginnen und auf Hohe der Nasenmarkierung enden. Zeichnen Sie die Augenbrauen ein, wobei der äußere Rand leicht nach oben gerichtet sein sollte. Sie beginnen über den inneren Augenwinkeln und gehen außen über die Augenbreite hinaus. Zeichnen Sie zwischen der Nasenwurzel, also der Stelle zwischen den Augen auf der senkrechten Mittellinie und den Mundwinkeln ein Dreieck. Auf der Hohe der Nase gibt dieses Dreieck die Breite der Nasenflügel vor (siehe Abbildung 4. 13).
Abbildung 4. 12: Wangen, Nase und Mund einzeichnen
Abbildung 4. 13 Nasenbreite bestimmen
Versuchen Sie nicht, die Nase komplett mit Linien einzugrenzen. Eine angedeutete seitliche Linie und die Lage der Nasenlocher reichen vollkommen. Wie Sie in Abbildung 4. 14 erkennen können, habe ich die äußeren Augenwinkel leicht nach oben gezogen, und die Wangen entlang der Wangenlinie nach außen verstärkt. Sie können dann alle Hilfslinien loschen und beide Skizzen entweder einscannen oder z. B. als TIFF- oder JPEG — Bilddaten auf Ihrer Festplatte sichern. Die hier abgedruckten Skizzen von mir sind ansonsten auch auf der CD zu finden.
Abbildung 4. 14: Hilfslinien entfernen und Konturen nachzeichnen
Bei den hier vorgestellten Beziehungen und Regeln zum Zeichnen eines menschlichen Kopfes handelt es sich nur um Faustregeln. Um der Figur charakteristische und unverwechselbare Zuge zu verleihen, sind kleine aber dennoch beabsichtigte Durchbrechungen dieser Regeln notig. So verändert z. B. die Breite und Lange der Nase das Erscheinungsbild ebenso dramatisch, wie die Dicke der Lippen oder die Lage und Neigung der Augen. Verstehen Sie daher die vorangegangene Anleitung nur als Gerüst und fugen sie selbst nach Belieben Veränderungen hinzu. Seien Sie jedoch maßvoll, da ansonsten ein zu unrealistischer Eindruck entstehen kann. Oftmals generieren schon kleinste Veränderungen große optische Unterschiede.
4. 2 Vorbereitungen für die Modellierung Trotz der stark verbesserten Modellierungswerkzeuge von CINEMA 40 seit Version 6 gibt es noch einige kleinere Spezialgebiete, für die es keine Standardwerkzeuge gibt. Ich habe daher bereits schon vor einiger Zeit drei recht nützliche Plugins geschrieben, die kostenlos über meine Internetseite www. vonkoenigsmarck. de bezogen werden können. Naturlich liegen diese Plugins auch auf dieser Buch — CD — ROM für Sie bereit. Da ich von vielen CINEMA — Benutzern weiß, dass diese Plugins bereits zur Standardbestückung gehören, möchte ich in diesem Workshop vermehrt mit ihnen arbeiten. Sie werden schnell erkennen, warum sich diese Plugins so großer Beliebtheit erfreuen.
4. 2. 1 EdgeExtrude, EdgeBevel und Cutter Zuvor sollten Sie die drei Plugins mit den dazugehörenden Icon — Dateien in den Plugin-Ordner von CINEMA4D legen. Nur dann können sie ordnungsgemäß registriert werden. Jedes dieser Plugins hat ein eigenes Symbol, um die Integration in das vorhandene Layout zu vereinfachen. Gegebenenfalls können Sie naturlich auch Tastaturkürzel vergeben. Rufen Sie dazu im FENSTER-Menü den Punkt PALETTEN BEARBEITEN im LAYOUT-Unterpunkt auf und wählen Sie die PLUGINS im Aufklappmenü aus. Erzeugen Sie durch Rechtsklick oder [#]-Klick irgendwo in das Layout eine neue Befehlspalette aus dem Menü aus und ziehen Sie die Symbole der Plugins Cutter, EdgeBevel und EdgeExtrude in die leere Palette (siehe Abbildung 4. 15). Durch erneuten Rechtsklick, bzw. [#]-Klick in die Befehlspalette wählen Sie BEFEHLS-GRUPPE ERZEUGEN aus.
Abbildung 4. 15. - Zusammenstellen einer neuen Befehlsgruppe
Die Icons kollabieren dadurch zu einem einzigen Symbol mit einem kleinen schwarzen Pfeil am unteren Rand. Ziehen Sie dieses Icon der Gruppe dann in Ihr CINEMA4D-Layout an eine beliebige Stelle, dort wo Sie gerne den Zugriff auf diese Befehle hätten (siehe Abbildung 4. 16). Beenden Sie das Bearbeiten des Layouts und der Paletten durch Schließen des BEFEHLE-Fensters. Sind Sie mit dem Inhalt und der Lage der neuen Befehlsgruppe m Ihrem Layout zufrieden, sollten Sie das Layout so als Startlayout oder unter einem neuen Namen sichern. Ansonsten ist das hinzugefugte Befehls-Menü beim nächsten Start von CINEMA4D nicht mehr dort. Wenn Sie Ihr Layout nicht verändern möchten, können Sie die drei Plugins auch über das PLUG-INS-Menü starten. Die Wahl per Icon ist jedoch schneller.
Abbildung 4 16: Integrieren der Befehlsgruppe in das Layout
Die Funktionsweise der Plugins ist schnell erklärt. Ich beginne mit EDGEEXTRUDE. Wie die Übersetzung des Namens schon verheißt, extrudiert das Plugin Ecken, also Verbindungen zwischen Punkten (siehe Abbildung 4. 17). Über die Werte kann man die Entfernung und Richtung steuern, in der die extrudierten Punkte und Kanten generiert werden sollen. Die CROSS-EXTRUDE-Option erzeugt zusatzlich Querverbindungen, falls dies möglich ist. Werden also die vier Eckpunkte eines viereckigen Polygons selektiert und mit der CROSS-EXTRUDE-Option extrudiert, so entstehen nicht nur vier neue Polygone, die senkrecht auf den Rändern des Polygons stehen, sondern auch vier X-förmig angeordnete Polygone, die sich exakt in der Mitte des Polygons treffen. Weiterhin gibt es diverse Optionen für die Bestimmung der Verschiebungsrichtung in Bezug auf das Ausgangsobjekt. Dies wird uns hier jedoch nicht beschäftigen. Wir werden das Plugin nur wie folgt benutzen: Selektieren von Punkten, Starten des Plugins, Klicken auf CREATE, ohne die Werte zu verändern und schließlich das Verschieben der neu entstandenen Punkte z. B. mit dem normalen BEWEGEN-Werkzeug. Dies lasst uns den größtmöglichen Freiraum, um selbst die Lage der neuen Punkte zu steuern. Da der EDGEEXTRUDE — Dialog zudem modal ist und daher immer geöffnet bleiben kann, genügt ein Klick auf die CREATE — Fläche, um die Aktion auszulosen.
Abbildung 4. 37; Edge-Extrude-Dialog
Das zweite Plugin habe ich EDGEBEVEL genannt. Es vermag die bereits beschriebenen Kanten von Polygonen abzuschrägen, also Fasen zu erzeugen. Dies kann in Bereichen mit vielen Dreiecken nicht immer zum Erfolg führen, erleichtert jedoch das nachträgliche Hinzufügen von Punkten in ein Modell. Um die Funktionsweise zu testen, rufen Sie einen normalen Würfel auf, konvertieren Sie diesen, wechseln Sie in den PUNKTE-BEARBEITEN-Modus und wählen Sie z. B. die vier Punkte der oberen Fläche aus. Starten Sie das Plugin und tragen Sie z. B. einen EDGEBEVEL — OFFSET von 15 ein. Belassen Sie alle übrigen Werte und klicken Sie auf CREATE. Um die selektierten Punkte herum werden neue Punkte und Flächen erzeugt. Wenn Sie dies an einer anderen Stelle im Objekt wiederholen und eine EDGE-TYPE von z. B. +45° einstellen, so bleibt die entstehende Region nicht so bestehen, sondern wird zwischen den neu generierten Punkten abgeschrägt. Ob dies nach außen oder innen passiert, hängt von der Richtung der Normalen auf den Polygonen ab. Wurde die Fase also in der falschen Richtung erzeugt, widerrufen Sie den letzten Befehl und verändern Sie den EDGE-TYPE auf -45°. Wenn Sie den EDGE-TYPE auf FREE einstellen, können Sie im Feld darunter selbst einen Abstandswert für den EDGE-OFFSET eingeben. Wenn Sie damit etwas herumgespielt haben, werden Sie schnell die Möglichkeiten aber auch die Grenzen kennenlernen. Bei niedrig aufgelösten Objekten wird es kaum Probleme geben, bei Objekten mit vielen Unterteilungen und Dreiecken kann es zu falschen oder unerwünschten Ergebnissen kommen. Wichtig ist dabei noch zu wissen, dass nach häufigem Gebrauch manchmal die Normalen neu ausgerichtet werden müssen. Dafür gibt es eine eigene Funktion im STRUKTUR-Menü.
Abbildung 4. 18: Edge-Bevel-Diaiog
Das dritte Plugin, der CUTTER, kommt ganz ohne Dialog aus. Das Plugin schneidet benachbarte selektierte Polygone entzwei. Der Vorteil gegenüber dem MESSERWerkzeug von CINEMA ist, dass mit dem CUTTER auch um Ecken herum Schnitte gezogen werden können, und dass notwendige Verbindungspolygone nur innerhalb der selektierten Flächen erzeugt werden. Alle nicht selektierten Flächen bleiben unberührt. Als kleines Bonbon erhält der CUTTER zudem bereits vorhandene UV-Koordinaten. Bereist zugewiesene und fixierte Texturen müssen nach der CUTTER-Benutzung also nicht neu platziert und angepasst werden. Die typische Benutzung des CUTTERS sieht so aus, dass Sie die Flächen an Ihrem Objekt selektieren, innerhalb der Sie neue Punkte benotigen. Es folgt der Aufruf des CUTTER — Plugins im PLUG-INSMenü oder per Icon. Danach ist das Ergebnis ohne weitere Arbeitsschritte sofort im Editor sichtbar.
4. 2. 2 Die Skizzen als Vorlagen nutzen Bevor wir mit der Modellierung beginnen können, müssen wir zuerst die erstellten Skizzen in CINEMA4D laden und im Editor platzieren. Rufen Sie dazu ein neues Material im MATERIALIEN-Fenster auf und deaktivieren Sie alle Kanäle bis auf den LEUCHTEN — Kanal. Laden Sie dort über den BILD... -Schalter das Bild mit der frontalen Ansicht des Kopfes ein. Wurde das Bild geladen, erscheint eine verkleinerte Kopie davon in dem Vorschaufenster und entsprechend verzerrt auch auf der Materialkugel oben links im
Schließen Sie das MATERIAL-BEARBEITEN-Fenster und erzeugen Sie ein zweites MaMATERIA terial mit den gleichen Einstellungen, wobei Sie nun die seitliche Kopfansicht einlesen (siehe Abbildung 4. 19).
Abbildung 4. 19: Zwei Materialien mit den Bildvorlagen konfigurieren
Rufen Sie aus dem OBJEKTE- oder dem GRUNDOBJEKTE-lcon-Menü eine EBENE ab und tragen Sie in den durch Doppelklick geöffneten Dialog die Werte aus Abbildung 4. 20 ein. Diese Werte sind keinesfalls willkürlich gewählt, sondern entsprechen exakt den Abmessungen der seitlichen Kopfansicht. Diese soll nämlich in Original-
große auf die Ebene gelegt werden. Daher sollten die Maße auch übereinstimmen. Sind Ihnen die Maße eines Bildes entfallen, so können Sie diese jederzeit im MATERIAL-BEARBEITEN-Fenster ablesen. Die Größe wird unter dem Vorschaubild des eingeladenen Bildes angezeigt (siehe Einkreisungen in Abbildung 4. 19)
Abbildung 4. 20: Bildvorlagen auf Objekten anordnen Sie können den EBENE-Dialog wieder schließen und das Material mit der seitlichen Ansicht direkt aus dem MATERIALIEN-Fenster auf das EBENE-Objekt im OBJEKTE-Fenster ziehen (Drag & Drop). Es öffnet sich ein TEXTUR-Dialog wie in Abbildung 4. 20, den Sie direkt über die OK-Taste wieder schließen können. Das standardmäßig ausgewählte UVW-MAPPING sorgt automatisch dafür, dass das Material plan auf der Oberfläche landet. Es kann höchstens vorkommen, dass das Material spiegelverkehrt oder auf dem Kopf stehend erscheint. Dies kann dann im TEXTUR-Menü im OBJEKTEFenster durch horizontales oder vertikales Spiegeln der Textur korrigiert werden. In unserem Fall reicht es jedoch aus, die Einstellungen aus Abbildung 4. 21 für die Ebene zu übernehmen. Diese sorgen für die nötigen Drehungen und eine seitliche Verschiebung um 400 Einheiten. Die Vorlage soll schließlich nicht in der Mitte der Szene stehen, sondern etwas abseits, um die spätere Arbeit nicht zu erschweren.
Abbildung 4. 21: Vorlagen im Raum ausrichten
Nun benötigen wir noch eine zweite Ebene für die frontale Vorlage. Auch diese sollte mit den Abmessungen des Bildes übereinstimmen. Wie Abbildung 4. 22 zeigt, muss die Ebene also 650 x 650 Einheiten groß sein. Beachten Sie auch immer die Richtungen der Ebenen. Verschieben Sie die Ebene über den KOORDINATEN-MANAGER auf eine Z-Position von +400 Einheiten und ziehen Sie auch auf diese Ebene das passende Material, also das Material mit der frontalen Vorlage. Sie können den TEXTUR-Dialog wieder bestätigen, ohne die Werte zu verändern.
Abbildung 4. 22: Frontale Vorlage ausrichten
Abbildung 4. 23: Die beiden Vorlagen im Raum
Das Resultat dieser Aktionen ist eine Szene wie in Abbildung 4. 23. Die Ebenen zeigen die Bildvorlagen und stehen exakt rechtwinklig zueinander. In dem Raum dazwischen entsteht nun der Kopf. Sind bei Ihnen nicht in allen Fenstern die Vorlagen zu erkennen, vergewissern Sie sich, dass zumindest QUICK SHADING und die Darstellung von Texturen in den entsprechenden Ansichtsfenstern aktiviert ist. Beides steuern Sie im DARSTELLUNG — Menü jedes Ansichtsfensters. Alle senkrecht zu den Ebenen liegenden Ansichten können jedoch prinzipiell keine Bildvorlagen zeigen (siehe Abbildung 4. 23 oben rechts).
4. 3 Die Modellierung des Kopfes Beginnen möchte ich mit dem Auge. Dieses stellt ein eigenes Objekt dar, damit es später auch unabhängig von der Kopf-Geometrie bewegt werden kann.
4. 3. 1 Das Auge Rufen Sie dazu ein KUGEL-Grundobjekt auf und platzieren Sie es so hinter der frontalen Bildvorlage, dass nur ein Teil durch diese hindurchragt und somit in der frontalen Ansicht sichtbar ist (siehe Abbildung 4-24). Verschieben Sie die Kugel so entlang der X- und Y-Achsen, dass die sichtbaren Kugelflachen mit den gezeichneten Pupillen übereinstimmen. Machen Sie dabei auch von dem orangen Anfasser der Kugel Gebrauch, um die Kugel auf eine passende Größe zu bringen. Die Kugel sollte als Ganzes das in der Bildvorlage sichtbare Auge seitlich überragen. Natürlich ist hier etwas Augenmaß im wahrsten Sinne des Wortes gefragt. Ich habe mich für einen Radius von 70 m entschieden, wie Sie Abbildung 4. 25 entnehmen können.
Abbildung 4. 24: Eine Kugel als Auge einsetzen
Noch wichtiger als die passende Größe ist jedoch die exakte Platzierung der Kugel, die Sie mit der bereits beschriebenen Methode an dem die frontale Vorlage durchbrechenden Kugelabschnitt ermessen können. Der sichtbare Anteil der Kugel sollte die komplette Pupille in der Bildvorlage abdecken.
Abbildung 4. 25: Große und Auflösung der Kugel bestimmen
Sind Sie mit den X- und den Y — Koordinaten des Auges zufrieden, verschieben Sie es entlang der Z-Achse in der seitlichen Ansicht so weit nach vorne, bis es dort die korrekte Position einnimmt (siehe Abbildung 4. 26). Bitte lassen Sie sich in der Abbildung nicht von der schwarzen Farbe der Kugel irritieren. Diese habe ich nur wegen des größeren Farbkontrastes zu der vorwiegend weißen Bildvorlage gewählt.
Abbildung 4. 26: Die endgültige Lage des Auges
Sie können als Nächstes die Konvertierung in ein Polygon-Objekt einleiten, da wir nun auf die Punkte und Polygone der Kugel zugreifen müssen. Zuvor drehen Sie die Kugel jedoch noch um 90° um die X-Achse. Dies hat den Sinn, die Polregion des Kugel-Objekts in den Bereich zu drehen, in dem die Pupille und die Iris liegen. Die kreisförmige Punkteverteilung dort vereinfacht die Modellierung der runden Pupille und der Iris (siehe Abbildung 4. 27).
Abbildung 4. 27: Das konvertierte und rotierte Auge
Wechseln Sie in den PUNKTE-BEARBEITEN-Modus und selektieren Sie einen Punkt des ersten Punktkreises vom Kugelpol aus gesehen. Fall Sie eine andere Kugelunterteilung als ich gewählt haben, sollten Sie die frontale Vorlagenebene kurzfristig entlang der Z-Achse zum Auge hin verschieben, bis nur noch der Pupillenteil der Kugel aus dem Bild ragt {siehe Abbildung 4. 28 links). Sie können dann den entsprechenden Punktkreis schnell identifizieren, der am ehesten die äußere Begrenzung der Pupille darstellen soll. Stellen Sie im KOORDINATEN-MANAGER entweder die Weit-Z-Koordinate oder die lokale Y-Koordinate des selektierten Punktes fest. Markieren und kopieren Sie den entsprechenden Wert im KOORDINATEN-MANAGER. Selektieren Sie dann den vorderen Po! der Kugel, also den Punkt, der von vorne gesehen innerhalb der Ins liegt. Übertragen Sie auf diesen Punkt den soeben kopierten Wert. Der Punkt rutscht damit auf die gleiche Höhe wie der umgebende Punktkreis. Die Kugel wird dadurch vorne abgeflacht (siehe Abbildung 4. 28). Die in der Abbildung rechts eingezeichnete helle Linie soll die Abflachung der Kugel verdeutlichen. Haben Sie eine andere Kugelunterteilung gewählt, sind ggf. noch andere Punktkreise zwischen dem Pol und der äußeren Pupillengrenze vorhanden. Deren Punkte sollten dann auch in dieser Ebene liegen. Markieren Sie dazu den entsprechenden Punktkreis und übertragen Sie erneut den abgelesenen oder kopierten Koordinatenwert. Das Ergebnis sollte in jedem Fall eine Abflachung des Bereichs der Kugel sein, in dem die Pupille liegen soll.
Abbildung 4. 28: Abflachung der Pupille Für die nächsten Aktionen benötigen wir mehr Punkte innerhalb der Pupille. Mit CINEMA-4D-eigenen Werkzeugen lässt sich dies leider nicht vollbringen, deshalb
kommt nun das CUTTER — Plugin zum Zuge. Selektieren Sie im P gone des abgeflachten Bereichs (siehe Abbildung 4. 29 links). Rufen Sie per Icon oder im PLUG-INS-Menü den CUTTER auf. Fast augenblicklich sollten Sie das Resultat erkennen können (Abbildung 4. 29 rechts). Es ist ein kreisförmiger Schnitt entstanden, der uns die gewünschten Punkte innerhalb der Pupille erzeugt.
Abbildung 4. 2$: Selektive Unterteilung der Pupille
Diese neuen Punkte sind auch gleichzeitig selektiert, was Sie im PUNKTE-BEARBEITENModus erkennen können. Benutzen Sie das SKALIEREN-Werkzeug, um die neue Punktgruppe derart zu verkleinern, dass wir Sie als Irisbegrenzung benutzen können. Wie Sie in Abbildung 4. 30 ablesen können, habe ich die Gruppengröße mit 16 x 16 Einheiten angegeben. Die Iris hat dadurch einen Durchmesser von 8 Einheiten.
Abbildung 4. 30- Große der Iris definieren
Selektieren Sie nun den Pol selbst und verschieben Sie diesen entlang der lokalen Y-Achse auf den Mittelpunkt des Auge zu. Es entsteht ein Trichter, der später das Schwarz der Iris darstellen soll. Sie können es sich auch einfach machen und gleich den Wert o für die Y-Koordinate eingeben. Der Polpunkt landet dann exakt im Mittelpunkt der Kugel (siehe Abbildung 4. 31).
Abbildung 4. 31: Die Iris formen
Die Grundform ist damit hergestellt. Um auch in eventuellen Nahaufnahmen noch gut auszusehen, möchte ich noch ein paar Details hinzufügen. Ich beginne mit der Selektion der Punkte des äußeren Pupillenrands (siehe Abbildung 4. 32). Rufen Sie das EDGEBEVEL — Plugin auf und tragen Sie einen EDGEBEVEL — OFFSET von 3 ein (siehe Abbildung 4. 32). Bestätigen Sie über die CREATE — Schaltfläche. Um den selektierten Punktkreis herum haben sich zwei neue Punktkreise gebildet. Beide Kreise sind dabei die eingestellten 3 Einheiten von dem selektierten Punktkreis entfernt. Dies macht eigentlich noch keinen Sinn, da die Punkte allein noch keine neue Schattierungsqualität in das Objekt bringen.
Abbildung 4. 32: Die äußere Begrenzung der Pupille hervorheben
Dies werden wir jetzt ändern. Die ursprüngliche Selektion ist auch nach der Aktion noch erhalten und wir können diesen mittleren Punktkreis daher gleich weiter manipulieren. Geben Sie dazu einen Y-Wert von z. B. 69 m im KOORDINATEN-MANAGER ein (siehe Abbildung 4. 33). Der Punktring wird dadurch leicht nach vorne aus der Ebene herausgehoben. Es entsteht ein kreisförmiger Wall um die Iris herum, der eine andere Schattierung hervorrufen wird. Ein kleiner Wulst um die Iris ist entstanden. Es steht Ihnen naturlich frei, eventuell noch geringere Y — Werte zu versuchen, falls Ihnen der Effekt zu stark erscheint.
Abbildung 4. 33: Den mittleren Punktkreis neu platzieren
Etwas Ahnliches habe ich mit der Irisbegrenzung vor. Selektieren Sie daher den IrisPunktkreis und benutzen Sie abermals das EdgeBevel Plugin. Diesmal wähle ich einen Offset von 2 (siehe Abbildung 4. 34)
Abbildung 4. 34: Die Begrenzung der Ins verstarken
Abbildung 4, 35, - Proberendering der frontalen Kugelansicht
Der weiterhin selektierte Punktkreis sollte nun ebenfalls auf eine andere Höhe gebracht werden. Ich habe wieder die 69 m benutzt. Die Abbildung 4. 35 zeigt das berechnete Resultat unserer Aktionen. Die Iris hat eine erkennbare Struktur bekommen, die spater im Zusammenspiel mit einer Textur mehr Lebendigkeit in das Objekt
bringen kann. Es steht Ihnen natürlich auch hier frei, die Offsets und Höhen der Verschiebungen selbst zu bestimmen. Beachten Sie nur, dass Sie den Effekt nicht übertreiben dürfen. Das Auge wird schließlich noch von einem zweiten Objekt und den Augenlidern bedeckt. Zu starke Ausbuchtungen wurden zu störenden Schatten, sichtbaren Abständen oder gar zu Überschneidungen zwischen den Objekten führen. Das innere Auge ist somit fertig modelliert. Wir können uns jetzt etwas von unnötigen Punkten und Flachen lösen, die im fertigen Objekt keine Rolle mehr spielen. Wählen Sie dazu die RAHMENSELEKTION aus und vergewissern Sie sich im Fenster AKTIVES WERKZEUG, dass auch verdeckte Elemente ausgewählt werden. Ziehen Sie im PUNKTE-BEARBEITEN-Modus m der seitlichen Ansicht einen Rahmen um den hinteren Teil der Kugel. Achten Sie darauf, nicht auch den verschobenen Pol mit zu selektieren. Dieser muss erhalten bleiben. Der Selektionsrahmen könnte also so wie in Abbildung 4. 36 aussehen. Durch Betätigen der [Entf]-/[