259 105 27MB
English Pages 463
design publishing imaging
Arndt von Koenigsmarck
EinWorkshop für Profis
auch zu MAXON BODYPAINT 3D
ADDISONWESLEY
MAXON CINEMA 4D 7
Arndt von Koenigsmarck
MAXON CINEMA 4D 7 Ein Workshop für Profis
ADDISONWESLEY An imprint of Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam
Die Deutsche BibliothekCIPEinheitsaufnahme 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 PEMaterial.
10 9 8 7 6 5 4 3 2 1
04 03 02 01 ISBN 3-8273-1890-4
© 2001 by ADDISONWESLEY Verlag, ein Imprint der Pearson Education Deutschland GmbH MartinKollarStraße 1012, D81829 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. mediaservice. tv) Kösel, Kempten (www. KoeselBuch. de)
Inhaltsverzeichni Einleitung
9
l CINEMA 4D 7
13
1. 1 Das Interface................................................................................. 13 Die Betriebsarten............................................................................. 13 Werkzeuge und Funktionen............................................................. 15 Eigene IconPaletten integrieren...................................................... 16 Die wichtigsten Befehle und Funktionen.......................................... 17 Die verschiedenen Fenster von CINEMA 4D..................................... 24 1. 2 Ein Arbeitsbeispiel........................................................................... 28 Die BooleMethode...........................................,.............................. 28 Die SplineMethode......................................................................... 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 COFFEEExpressions....................................................................... 118 2. 6 KeyFrames.................................................................................... 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 DeltaExpression............................................................................ 178
4
Organisches Modellieren ENTWURF UND MODELLIERUNG EINES MENSCHLICHEN KOPFES
189
4. 1 Herstellen von 3Dtauglichen 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
Mechanische Modellierung MODELLIERUNG EINES MENSCHLICHEN TORSOS
257
5. 1 Der Torso...................................................................................... 257 Der Kehlkopf................................................................................. 257 HydraulikHalterung...................................................................... 264 HydraulikZylinder......................................................................... 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 RadiosityEinstellungen ermitteln.................................................. 313 Die Stärke...................................................................................... 313 Die Genauigkeit............................................................................. 314 PrepassGröß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 ShaderTrees....................................................... 345 Holz............................................................................................... 345 Die Unterschiede der IlluminationsModelle.................................. 350 Das Brettermaterial platzieren....................................................... 352 Störungen hinzufügen................................................................... 354 Verwittertes Metall........................................................................ 357 Normale metallische Oberflächen.................................................. 366 Mit dem FresnelShader arbeiten.................................................. 367 Stein und Mörtel............................................................................ 372 Matte Effekte mit SLA simulieren................................................... 386
7
Tipps und Tricks 395 Compositing und MultiPasses...................................................... 395 Ein kleines MultiPassBeispiel...................................................... 406 Ein CompositingBeispiel................................................................ 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 Neu erungen und Techniken, die es zu beherrschen gilt, will man das Potenzial der Soft ware 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 geschrie ben, 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 COFFEEProgrammierung und die verschiedenen Mo dellierungsmethoden wünschen. Ich habe dem mit einem nochmals gesteigerten Umfang an ExpressionBeispielen 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 er wartet. Ich beginne im ersten Kapitel mit einem stichwortartigen Abriss über das Inter face 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 ver schiedenen Techniken, um eine derartige Aufgabe zu meistern. Hier wird besonders deutlich, welche Fehler auftreten können und welche Vor oder Nachteile die gezeigten Techniken haben. Im zweiten Kapitel führen wir die Modellierung des Kolbens mit den Polygon Werkzeugen fort und nutzen alle Möglichkeiten der HyperNURBSModellierung. Am Ende steht eine Kurbelwelle samt Pleuel und Kolben, die für die Animation vorberei tet ist. Wie ein derartiges Modell mit Hilfe von verschiedenen Expressions animiert wer den kann, zeigt der letzte Teil dieses Kapitels.
Das dritte Kapitel ist in Gänze der Erstellung eigener COFFEEExpressions gewid met. Es werden drei konkrete Beispiele vorgestellt, die ohne den Einsatz von Ex pressions niemals zu realisieren gewesen waren. Das abgedeckte Spektrum reicht dabei von Morphing bis zu DeltaExpressions. 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 Fo ren lese ich sehr oft. In diesem Kapitel wird daher von der Erstellung realistischer Skizzen bis hin zur HyperNURBSModellierung der komplette Arbeitsablauf der Planung und Umsetzung eines KopfObjektes 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 Caustic Effekten, sowie mit dem Umgang der neu integrierten SLAShader. Besonders die Ermittlung der richtigen RadiosityParameter ist essentiell für moderate Renderzei ten und das erwünschte Ergebnis. SchrittfürSchrittAnleitungen zeigen daher ei nen exemplarischen Weg für die Ermittlung der optimalen Einstellungen. Zudem wird im zweiten Teil des Kapitels der Umgang mit SLAShadern und ShaderTrees 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 erzeu gen. 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 „MAXONFamilie". 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 BuchCD (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 stel len (www.noctuagraphics.de). Vielen Dank auch an Klaus Baulmann von BAULMANN PRODUKT ENTWICKLUNG für die Bereitstellung eines hochauflösenden 3DScans (www.digitalforms.de). Dieser hat die Arbeit mit dem PolygonReduzierer an einem realistischen Objekt erst möglich gemacht.
Viele Freunde und „Mitstreiter" in der C4DCommunity haben auch wieder kosten freie Plugins und Demos für die BuchCD 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 C4DTREFF und C4D FORUM sowie an Ricky, Ulf und Bernd von VREEL 3D ENTERTAINMENT oHG, an Jay und Mike von MEDIENBUNKER oHG, an nEO vom C4DTREFF und natürlich an meine Familie. Letztlich ein freundlicher Gruß auch an die Mitarbeiter von ADDISONWESLEY, 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.vonkoenigs marck.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 indi viduelle 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 3DProgrammen oder von al teren CINEMA4DProgrammversionen 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 zu mindest vom optischen Erscheinungsbild her hat sich CINEMA 4D nicht verändert. Bitte sehen Sie mir nach, wenn ich nicht jeden Menüeintrag detailliert be schreibe. Da dieses Buch als vertiefendes Übungsbuch konzipiert ist, mochte ich Sie in diesen Fallen auf das Handbuch verweisen. Ich mochte mich aus Platzgrün den 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 et was 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 XLVersion neue Icons und Menüs hinzukom men. Ich beschränke mich hier vorerst auf die XLVersion und gehe dann zu einem spateren Zeitpunkt auf die BODYPAINT3DMenü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 Betriebs art 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 PUNKTE BEARBEITENBetriebsart 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 Betriebs arten, die Sie als Icons auf der linken Interfaceseite ebenso finden wie auch als Menüeintrage im WERKZEUGEMenü. 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 GRUNDOBJEKTEKONVERTIERTENSchaltfläche, die eben falls 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 Manipu lation vor, die Vorteile dieser Objektgruppe gehen jedoch unwiederbringlich verlo ren. Dazu zählt z. B. die Veränderbarkeit von Radien an Grundobjekten oder die Ma nipulationsmöglichkeiten von Unterobjekten eines BooleGrundobjekts. Wie Sie an dem Beispiel des BooleGrundobjekts sehen, sind nicht nur eigentli che Grundobjekte, wie z. B. ein Würfel, eine Kugel oder auch SplineGrundformen wie das Zahnrad oder der Kreis von einer derartigen Umwandlung betroffen, son dern auch alle Arten von NURBSObjekten und andere interaktive Modellierungs hilfen, wie das Symmetrieobjekt,
Die vier unteren Icons in Abbildung 1.1 aktivieren bzw. deaktivieren die so genann ten DrawingPipelines von CINEMA 4D. Die DrawingPipelines unterscheiden dabei zwischen Partikeleffekten, Expressions, Deformatoren und Animationen. Die Deak tivierung umgeht die Berechnung der entsprechenden Effekte in den Ansichts fenstern. 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 DrawingPipelines 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 COFFEEExpressions ü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
XAchse ein/aus YAchse ein/aus ZAchse ein/aus
Bewegen/Skalieren/Rotleren Objekt /WeltSystem 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 kon kretisieren Sie zu der ausgewählten Bewegungs, Skalierungs oder RotationsBe triebsart 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 WeltSystem 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 Parame ter stellen Sie in den RenderOptionen ein. Hier verbergen sich die massivsten Un terschiede zu der Vorgängerversion, weshalb hierauf auch an anderer Stelle noch gezielter eingegangen wird. Am linken Rand der IconLeiste lösen die beiden gekrümmten Pfeile eine Zu rücknahme der letzten Aktionen, bzw. ein Wiederherstellen fälschlich zurückge nommener Aktionen aus. Die Tasten lassen sich mehrfach betätigen, falls z. B. meh rere Schritte verworfen werden sollen. Die maximale Anzahl der Aktionen, die über
diese lcons gesteuert werden können, lässt sich in den Voreinstellungen des Pro gramms vorgeben. Je höher die Zahl, desto mehr Speicherplatz wird für die gespei cherten Aktionen von CINEMA 4D belegt. Der Standardwert beträgt 20 gespei cherte Aktionen und sollte normalerweise auch ausreichend sein. Das lcon mit dem blauen Mauszeiger beherbergt die verschiedenen Selektions methoden. Sie haben die Wahl zwischen Rechteck, Polygon, Freihand oder Maus zeigerSelektion. Für alle Methoden gilt, dass Sie konkretisierende Einstellungs möglichkeiten dazu in dem separaten Fenster AKTIVES WERKZEUG finden, das stan dardmäßig am rechten unteren Bildrand zusammen mit dem Koordinatenfenster gruppiert ist. Hier geben Sie dann z. B. den gewünschten Radius um den Mauszei ger herum vor, der noch ausgewählt werden soll, oder ob Selektionen nur für sicht bare 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 Lupenlcon dagegen steuert die Zoomfunktion in den Editorfenstern. Durch Anklicken oder Aufziehen eines Rahmens um das gewünschte Objekt lässt sich die ses 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 ZoomEffekt 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 ModellingFunktionen. Da hier einige nur über Menüs erreichbar sind, an dere jedoch auch als Icon vorliegen, führe ich kurz vor, wie sich beliebige Funktio nen selbst in lconMenüs organisieren und in das Layout integrieren lassen. Ansonsten erschöpft sich hiermit abgesehen von der kombinierten CINEMA 4D / BODYPAINT 3DVariante die Anzahl der sichtbaren Icons. Aufgrund der mo dularen 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 IconPaletten integrieren Dazu ruft man im FENSTERMenü unter dem Eintrag LAYOUT den Punkt PALETTEN BEAR BEITEN auf. Alle Icons werden jetzt dunkel umrandet dargestellt und können durch einfaches Verschieben mit gehaltener linker Maustaste, auch „Drag & Drop" ge nannt, 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 an wählen zu können, so ruft man zuerst eine neue, leere Palette auf. Dazu klicken Sie mit der rechten Maustaste, bzw. auf MacintoshComputern mit gehaltener [#] Taste, in einen leeren Bereich des Layouts. In dem aufklappenden Submenü wäh len Sie den Punkt NEUE BEFEHLSPALETTE 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 IconFenster und wählen den Befehl BE FEHLSGRUPPE 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 IconAuswahlfenster (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 er scheint, muss es nun noch über die entsprechende Funktion im FENSTERMenü z. B. als StartLayout gesichert werden.
1.1.4 Die wichtigsten Befehle und Funktionen Nachfolgend habe ich Ihnen nach dem gleichen Schema die wichtigsten Werkzeuge aus dem STRUKTURMenü in IconGruppen zusammengestellt. Wir werden noch re gen 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, ABTREN NEN, 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 be schriebenen Werkzeuge funktionieren nur im POLYGONEBEARBEITENModus. Zudem besitzen viele Werkzeuge zusätzliche Einsteilmöglichkeiten in dem bereits erwähn ten 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üngli chen 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 ARRAYFunktion vervielfältigt ein aktives Objekt mit diversen Variablen und ZufallsOptionen. Die BEVELFunktion extrudiert selektierte Flächen, verschiebt diese also mit zu sätzlich erstellten Seitenflächen und skaliert die Flächen dabei gleichzeitig. Es ent steht dadurch eine abgerundete Kante. Zu beachten ist dabei jedoch, dass das Ob jekt um den Wert der Extrudierung an Größe gewinnt. Das BRÜCKETOOL verbindet selektierte Flachen innerhalb eines Objekts mitein ander. Dazu werden erst die Flächen selektiert, dann das BRÜCKETOOL aktiviert und schließlich muss mit gehaltener Maustaste eine Verbindungslinie zwischen den zu verbindenden Polygonen gezogen werden. Die selektierten Flächen werden auto matisch gelöscht und die Ränder der entstehenden Löcher mit Polygonen verbun den. Das Werkzeug kann sowohl mit einzelnen Polygonen als auch mit Polygon gruppen umgehen. Als zweite Variante dieser Funktion bietet sich das Erstellen von Polygonen an, da das BRÜCKETOOL auch Punkte verbinden kann. Das EXTRUDIEREN zieht Polygone oder ganze Gruppen davon aus einem Objekt heraus. Dabei werden die Eckpunkte der selektierten Polygone oder Polygongrup pen dupliziert und mit dem extrudierten Teil verbunden. Mit diesem Werkzeug las sen 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 SMOOTHSHIFTFunktion arbeitet ähnlich dem EXTRUDIEREN, behält jedoch auf je den 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 vorzugeben den 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 Bewegungs arten. 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 weg bewegt 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 MESSERWerkzeug erzeugt entlang einer Schnittführung neue Punkte und Polygone. Der Schnitt kann auch auf eine Selektion von Polygonen beschränkt wer den. 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 Magne ten 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 PolygonZahlen 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 OBJEKTEFenster, 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 zusam men mit den Grundobjekten im OBJEKTEMenü abrufen können. Sie haben hier die Wahl zwischen AKIMASPLINES, BSPLINES, BEZIERSPLINES, FREIHANDSPLINES, mit FOR MELN erzeugten, LINEAREN oder KUBISCHEN SPLINES. Nachdem Sie in den PUNKTEBEARBEITENModus gewechselt und eine Splinelnter polation ausgewählt haben, können Sie durch Einfachklicken in ein Editorfenster Splinepfade erzeugen. Kücken und gleichzeitiges Ziehen der Maus bildet bei BEZIER SPLINES 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 TangentenEnden unabhängig voneinander bewegt werden können. Die an deren Interpolationsarten stellen zwar keine Tangenten zur Verfügung, jede Spline art kann jedoch auch nachträglich noch in jede andere umgewandelt werden. Auch hier bringt Sie ein Doppelklick auf das SplineSymbol im OBJEKTEFenster zu einem kleinen Dialog, der Ihnen diese und andere Möglichkeiten bietet.
Abbildung 1.9: Szene-Objekte
Das Umfeld Ihrer Objekte bestimmen Sie über SZENEOBJEKTE, die Sie ebenfalls im OBJEKTEMenü finden (siehe Abbildung 1.9). Hier finden sich u. a. Kameras und Lichtquellen mit automatischer Ausrichtung, ein HINTERGRUND und ein VORDERGRUNDOBJEKT für die automatisierte Einblendung z. B. von Bildmotiven oder Copyrightvermerken in ein Bild oder eine Animation; ein UMGEBUNGSOBJEKT, mit dem sich Nebel und ambientes Licht in die Szene integrieren lassen, und ein STAGEOBJEKT, mit dem in e iner Animation z. B. zwischen verschiede nen Kameras umgeschaltet werden kann. Ein Großteil dieser Objekte lässt sich bereits aus dem vorhandenen Lichtquel lenlcon im Layout abrufen, ohne in das Menü wechseln zu müssen.
Abbildung 1.10: NURBS-Objekte
Besonders für die Modellierung organischer Formen sind NURBSObjekte sehr hilf reich, 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 verschiede nen NURBSObjekte sind in Abbildung 1.10 als Symbole zusammengefasst. Neben den auch in anderen Programmen üblichen LOFT, SWEEP, LATHE und EX TRUDENURBS findet sich in CINEMA 4D auch das sehr leistungsstarke Hyper NURBSObjekt, das in Verbindung mit niedrig aufgelösten PolygonObjekte n schnell organisch geglättete Objekte erzeugen kann. Mit letzteren werden wir ei nen Großteil der kommenden Workshops bestreiten, da sie sich sehr flexibel ein setzen lassen. Die übrigen NURBSObjekte sind aber nicht minder hilfreich, wenn es um orga nische Ü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 Explo dieren oder Schmelzen von Objekten, gehören dazu. Schließlich finden sich hier auch die für die Animation von Figuren nötigen Bo nes wieder. Die Philosophie von CINEMA 4D macht es hierbei möglich, Deformatio nen beliebig zu verschachteln und zu mischen. Dabei bleibt das Objekt unverän dert, 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 BOOLEOBJEKT, das DUPLIZIEREN mit INSTANZENOPTION, METABALLS und das SYMMETRIEOBJEKT (von links nach rechts). Anders als bei ähnlich benannten Werkzeugen anderer Hersteller oder älterer CINEMA4DVersionen können die Ergebnisse jederzeit modifiziert werden. Dies macht besonders das BOOLEOBJEKT und das SYMMETRIEOBJEKT zu wertvollen Hilfen bei der komplexen Modellierung. So können Schnittmengen beliebiger Objekte je derzeit 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 anneh men kann. Wie m der Abbildung 1.13 zu sehen, steht eine ganze Reihe zusatzlicher Manipu latoren für Partikelstrome zur Verfugung, die von WIND über TURBULENZ bis hin zu REFLEKTOROBJEKTEN mit optionaler Strahlteilung reicht. Besonders in Verbindung mit dem separat erhältlichen Programm Pyrocluster der Firma Cebas lassen sich realis tisches Feuer, Rauch und Explosionen erzeugen. Wirksam unterstützen lässt sich dies zudem durch das neue ExplosionsPlugin von CINEMA 4D, das in Version 7 Ein gang 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 aus gewählter Betriebsart auf Punkte, Polygone oder ganze Objekte auswirken kön nen. Neben einer LIVESELEKTION mit mehreren Optionen gibt es neben der RAHMEN SELEKTION noch eine POLYGON und eine FREIHANDSELEKTION. Erstellte Selektionen können mit so genannten Wichtungen belegt werden, auf die dann Deformatoren, wie z. B. Bones, wirken können. Punkt oder Polygon Selektionen 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 ei ner Voraussetzung für professionelle Texturierung und Animation.
Abbildung 1.15: Sound-Objekte
Seit Version 6 sind auch SoundObjekte in CINEMA 4D XL integriert (siehe Abbil dung 1.15). Mit ihnen lassen sich Töne bestimmten Objekten zuordnen und Tonda ten 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 Sound Daten ist mit CINEMA 4D möglich. Die Möglichkeiten gehen bis zur Erstellung von SurroundSoundDaten für Ihre Animationen. Töne und SoundDaten 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 abge mixten SoundDaten 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 ei nes aktiven Fensters, nur des aktiven Objekts, eines Bildausschnitts, einer Bild oder Animationsberechnung mit nachfolgender Sicherung, wobei alle eingestellten Para meter 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 über arbeitete 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 realis tische 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 Abbil dung 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 Bewegun gen auf die selektierte Achse begrenzt werden. Orangefarbene Anfasser an para metrischen 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 Zoom Funktion vergrößern oder verkleinern, oder um die Objekte rotieren. Letztere Funktion kann nur in perspektivischen Ansichten funktionieren, da die übrigen An sichten auf die XY, ZY oder XZEbene 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 BEARBEITENMenü jeder Ansicht können selektierte Objektteile oder ganze Objekte fensterfüllend dargestellt werden, ohne auf die ZoomFunktion oder die Lupe zurückgreifen zu müssen.
Abbildung 1.18: Objekte-, Struktur- und Browser-Fenster
Neben den Ansichten sind die OBJEKTE, STRUKTUR und BROWSERFenster sehr wichtig für die Arbeit in CINEMA 4D (siehe Abbildung 1.18). Im OBJEKTEFenster werden alle Elemente einer Szene verwaltet. Hier können Hierarchien angelegt sowie Namen und Eigenschaften vergeben werden. Wie be reits weiter oben beschrieben, können zusatzliche Optionen vorwiegend von pa rametrischen 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 beschriebe nen roten Einrahmung des aktiven Objekts in den Ansichtsfenstern, wird das aktive Objekt im OBJEKTEFenster zusätzlich in roter Farbe geschrieben. Sie haben hier daher immer eine gute Kontrolle, ob tatsachlich das richtige Objekt ausgewählt wurde. Im STRUKTURFenster haben Sie die numerische Kontrolle über Punkt und UVW Koordinaten oder PolygonEckpunkte. Da hier die Informationen eines kompletten Objekts gleichzeitig dargestellt werden können, wird dieses Fenster zu einem wert vollen Arbeitsmittel bei der Manipulation größerer Punkt oder Polygongruppen.
Im BROWSERFenster schließlich können Sie Ihre Projekte organisieren oder vorhan dene Materialien und Szenen ordnen, über verkleinerte Abbildungen von Materia lien, Modellen und Szenen lassen sich auch größere Datenbestände verwalten. Derart zusammengestellte Kataloge lassen sich verwalten und sichern, um jeder zeit auf einzelne Elemente daraus zurückgreifen zu können. Der Browser kann also z. B. als Bilderkatalog für Texturen und Materialien be nutzt werden, um thematisch geordnete Oberflächen schnell nach der geeigneten Textur zu durchsuchen. Im KOORDINATENMANAGER haben Sie jederzeit die Kontrolle über exakte Koordina ten eines selektierten Objekts, Punkts oder Polygons. Hier lassen sich die aktuellen Positionen und Abmessungen abfragen. Außerdem erlauben die Zahlenfelder di rekte Eingaben. Objekte können so numerisch exakt positioniert werden. Die be nutzten Einheiten lassen sich in den PROGRAMMVOREINSTELLUNGEN 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 Selekti onsmethoden oder den ModellingWerkzeugen darauf hingewiesen.
Abbildung 1.19: Koordinaten-Manager, Aktives-WerkzeugFenster und Snap-Einstellungen Hier können Sie also z. B. das MESSERTOOL 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 in teraktiv in den Ansichten durch Mausbewegung. Das dritte Fenster mit der Aufschrift SNAPEINSTELLUNGEN ist besonders beim maßgenauen Konstruieren wichtig. Hier können Sie Arbeitsebenen, Raster und Fangpunkte aktivieren, um neue Punkte und Splines an bereits vorhandenen Ele menten in der Szene einrasten zu lassen. Radien und Bezugskoordinaten lassen sich hier vorgeben. Beim freien Modellieren sollten die SnapFunktionen deakti viert werden, um ein unbeschränktes Setzen von Punkten und Objekten zu gewähr leisten.
Abbildung 1.20: Das Materialien-Fenster
Schließlich wird der Bildschirm am unteren Rand vom MATERIALIENFenster begrenzt, das die gleiche Funktionalität wie der aus älteren Versionen bekannte Materialma nager besitzt. In diesem Fenster erzeugen und verwalten Sie Materialien, die Sie dann per Drag & Drop auf die Modelle im OBJEKTEFenster ziehen und somit zuweisen können. Ein Doppelklick auf die Materialkugeln öffnet ein Einstellungsfenster für die Ma terialeigenschaften; ein Doppelklick auf die Materialbezeichnung eröffnet die Mög lichkeit, sie abzuändern. Da CINEMA 4D sowohl volumetrische wie auch kanalbasierte Materialien unter stützt, kann ein Doppelklick auf eine Materialkugel unterschiedliche Dialoge öff nen. So gibt es z. B. für die mittlerweile in Version 7 integrierten SLAShader des Herstellers bhodilNUT komplett eigene Dialoge. Trotzdem erscheinen diese Materi alien im MATERIALIENFenster wie ein normales CINEMA4DMaterial. 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 Kol ben, 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 SplineWerkzeuge in Aktion er leben, sowie etwas über die Planung von Projekten erfahren. Um dabei auch etwas Ihre Sinne für die richtige Wahl von Modellierungsmetho den zu schärfen, werde ich das Beispiel mit drei Modellierungsvariationen begin nen, die alle mehr oder weniger zum gleichen Ergebnis führen. Trotz ähnlicher Er gebnisse 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 be nutzten Werkzeuge und Objekte ausführlich in Funktion und Anwendung zu be schreiben, 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 Poten zial des Programms auszuschöpfen ist jedoch die Kenntnis aller Werkzeuge und Techniken notwendig. Und wie wichtig die richtige Wahl der Werkzeuge und Metho den 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 He rausforderungen 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 BooleMethode
Werfen wir zuerst einen Blick auf die komplette Szene (Abbildung 1.21). Sie erken nen 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 verschiede nen 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 „BooleMethode", wie ich sie einmal nennen möchte, bei der man zwar recht schnell die Form annähern, jedoch dann vor unlösbare Prob leme 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 OBJEKTEMenü, bzw. aus dem IconMenü 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 WeltKoordinatensys tems. 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 OBJEKTE Fenster 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öglichkei ten 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 je derzeit 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 voll stä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 GRUNDOBJEKTEKONVERTIERENlcon, 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 PUNKTEBEARBEITEN Modus, 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 OPTIMIERENBefehl im STRUKTURMenü.
Abbildung 1. 26: Selektieren der inneren Polygonkreise
Im nächsten Schritt wollen wir den Zylinder innen aushohlen, damit nur ein rohr f ö r m i g e s Objekt übrig und wählen Sie die LIVESELEKTION 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ög lichkeiten zu diesem Werkzeug im Fenster AKTIVES WERKZEUG. Deaktivieren Sie dort NUR SICHTBARE ELEMENTE SELEKTIEREN. Dies garantiert, dass auch Elemente ausge wä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 XZ Ansicht, also der Ansicht, in der Sie den Zylinder direkt von oben sehen, und über streichen 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ätz lich 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, de ren 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 Poly gonkreis ausgewählt wurde, sondern auch der entsprechende Polygonkreis im Bo den 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
VESWERKZEUGFenster möglich. Hatten wir dort den Haken belassen, waren tatsach lich nur die angeklickten Polygone auf dem oberen Deckel des Zylinders ausge wä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 die sem Symbol rotieren Sie um das aktive Objekt herum. Es findet also eine Kamera bewegung 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ü DAR STELLUNG 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 Verbin dungslinien in der Abbildung irritieren. Diese erzeugen wir erst im nächsten Schritt. Sie sollten jedoch grundsätzlich einen ähnlichen Blickwinkel auf den Zylinder ha ben.
Wählen Sie jetzt im STRUKTURMenü das BRÜCKEWerkzeug aus. Mit diesem Werk zeug 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 un ten in Richtung des zweiten selektierten Polygonkreises. Sie sollten eine Linie er kennen 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 Verbindungs polygone zwischen den beiden Polygonkreisen. Dabei werden die Polygonkreise gelöscht. An deren Stelle ist durch das BRÜCKEWerkzeug 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 Darstel lungsart im Menü DARSTELLUNG wieder auf QUICKSHADING umschalten. Vielleicht be nutzen Sie wieder das ROTIERENSymbol 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 FENSTERSymbol 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 PUNKTEBEARBEITENModus durch einfaches Anklicken des Sym bols und wählen Sie erneut das LIVESELEKTIONWerkzeug 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 Po lygonen 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 verges sen 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 un ten ausgewählt. Wählen Sie in der waagerechten lconleiste das SKALIERENWerk zeug aus und deselektieren Sie die YAchse durch Ausschalten des Ylcons, 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 KOORDINATENMANAGER werfen, können Sie dort die Veränderungen auch numerisch verfolgen. Stellen Sie einen X und Z Wert 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 KOORDINATENMANAGER eintragen. Nach Anklicken der ANWENDENSchaltflä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 di rekte Eingabe im KOORDINATENMANAGER, können Sie alle Werte bezüglich Position, Größe und Winkel eines aktiven Objekts, selektierter Punkte, Polygone oder Textu ren verändern.
Abbildung 1.31: Zylinder mit verringerter Wanddicke
Im nächsten Schritt soll die Oberkante des Zylinders die geschwungene Form be kommen, die einen Kolben auszeichnet. Dazu müssten Teile des Zylinders wegge schnitten werden. Eine Negativform erzeugen Zuerst müssen wir definieren, weiche Form die Schnittführung haben soll Dazu eig nen sich besonders gut SPLINES, die Sie entweder im OBJEKTEMenü oder in dem ho rizontalen IconMenü finden. Wählen Sie dort das BEZIERSpline, das als einzige SplineArt a uch Tangenten zur exakten Kurvensteuerung anbietet. Um Splines erzeugen zu können, müssen Sie sich weiterhin im PUNKTEBEARBEI TENModus befinden. Schatten Sie die Darstellungsart im Ansichtsfenster mit der frontalen Ansicht, also der XYAnsicht, 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 SplinePunkt ohne Tangente. Alle fünf Punkte sollten Tangenten be sitzen. Haben Sie aus Versehen Punkte ohne Tangenten erzeugt, ist dies auch kein Pro blem. Bei BEZIERSplines lassen sich Punkte auch nachträglich noch mit Tangenten ausstatten. In einem solchen Fall selektieren Sie die entsprechenden Punkte z. B. mit der bekannten LIVESELEKTION 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 BEZIERSpline also weiche Kurvenab schnitte mit geraden Strecken kombinieren. Haben Sie alle Punkte gesetzt, kontrollieren Sie deren Lage im STRUKTURFenster (siehe Abbildung 1.32). Ein doppeltes Anklicken eines Zahlenfeldes macht dies edi tierbar. Sie können also die exakten Positionen gleich dort eintragen und aus der Abbildung übernehmen. Sie werden zudem feststellen, dass im STRUKTURFenster 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 PunktPositionen entsprechend übernommen haben, versuchen Sie durch Verlängern, Verkürzen oder Verdrehen der einzelnen Tangenten einen Kur venverlauf 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 WeltKoordinatensystems er zeugt werden, wurde auch der Spline mitten im Zylinder erzeugt. Der nächste Ar beitsschritt 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 MODELL BEARBEITENBetriebsart umschalten. Die SplinePunkte werden daraufhin ausge blendet und nur die Kurve bleibt sichtbar. Schalten Sie dann m der horizontalen lconleiste m den VERSCHIEBENModus und schalten Sie alle Achsen bis auf die ZAchse aus (siehe Abbildung 1.34). Bewegun gen können nun nur noch entlang der ZAchse des aktiven Objektes erfolgen. Kli cken 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 KOORDINATENMANAGER im Auge und stellen Sie per Mausbewegung oder durch direkte Zahleneingabe eine ZPosition von 280 m ein. Die SplineKurve sollte sich dann ein gutes Stück vor dem Zylinder befinden.
Abbildung 1.34: Verschiebung des Splines vor den Zylinder
Um aus der SplineKurve jetzt ein massives Objekt zu erzeugen, verwenden wir ein
EXTRUDENURBS. Rufen Sie dieses N URBSObjekt d urch Auswählen aus dem IconMenü auf. Das lcon ähnelt da Klicken Sie im OBJEKTEFenster auf das Wort Spline-Objekt und ziehen Sie dies mit gehaltener Maustaste auf das Wort Extrude-NURBS. Durch derartige Drag & DropAktionen können Sie Objekte zu Gruppen zusammenfassen oder hierarchi sche Beziehungen herstellen. Vor dem EXTRUDENURBS wird dann ein kleines Pluszeichen erscheinen, das im mer dann vor einem Objekt erscheint, wenn weitere Objekte darunter eingeordnet wurden. Ein Klick auf dieses Pluszeichen „klappt" wie ein Filemanager dann die Hie rarchie 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 OBJEKTEFenster 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, son dern macht viele NURBS, Generatoren oder Deformatoren erst funktionsfähig. In diesem Fall haben wir dem EXTRUDENURBS das Spline durch die Unterordnung zu gewiesen. Sie sollten daher in den Ansichten eine Veränderung beobachten kön nen, denn das EXTRUDENURBS sorgt für die Verschiebung von Splines in eine be stimmte Richtung. Um die Lange und Richtung der Verschiebung einstellen zu können, klicken Sie doppelt auf das kastenförmige kleine Symbol des EXTRUDENURBS im OBJEKTEFens ter. Ein Dialog wie in Abbildung 1.35 sollte sich offnen. Übernehmen Sie die Zahlen werte aus der Abbildung und bestätigen Sie die Veränderungen über die OKSchalt fläche.
Abbildung 1.36: Der extrudierte Spline im Zylinder
Die Einstellungen sorgen dafür, dass die SplineFlä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 SplineTangenten noch immer verandern. Das EXTRUDENURBS wird sich simultan anpassen und den Veränderungen folgen. Da das Wegschneiden von Objektteilen nur mit vollständig geschlossenen Ob jekten funktioniert, muss unser ExtrudeNURBS noch etwas weiterentwickelt wer den. Wechseln Sie dazu in den PUNKTEBEARBEITENModus und klicken Sie das Spline Objekt im OBJEKTEFenster einmal an. Sie sollten nun wieder die SplinePunkte 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 STRUKTURMenü 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 STRUKTURFenster. Das rötliche Ende ist also der Schluss des Splines und repräsentiert den letzten Punkt in der STRUKTURListe. 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 SplineEnde in der XYAnsicht rechts liegen. Dort werden wir jetzt zwei neue Punkte anfügen, die diesmal nicht ex akt auf bestimmten Positionen liegen müssen. Sie sollten ungefähr so wie in Abbil dung 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 EX TRUDENURBS die Form anpasst. Sind die beiden Punkte entsprechend gesetzt, ver bleibt nur noch eine Lücke zwischen dem ersten Punkt und dem jetzt neuen letzten Punkt des Splines. Diese Lücke verschließen Sie im SplineDialog, der sich durch ei nen Doppelklick auf das kleine SplineSymbol im OBJEKTEFenster öffnet (siehe Ab bildung 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 OKSchaltflä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 EXTRUDENURBS 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 BOOLEGRUNDOBJEKT, das Sie im OBJEKTMenü oder in den IconMenüs abrufen können. Das Symbol ähnelt einer blauen Kugel, aus der ein grünes Stück herausgetrennt wurde. BOOLEObjekte 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 BOOLEObjekts im OBJEKTEFenster 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 BOOLEObjekt eingeordnet sind. Das A Objekt ist das obere, das BObjekt das untere Objekt unter dem BOOLEObjekt. Bei dem Modus A GESCHNITTEN B ist dies zwar nicht von Belang, aber bei den an deren Betriebsarten wie A MINUS B kann eine falsche Reihenfolge zu uner wünschten Ergebnissen führen. Ordnen Sie jetzt nacheinander das EXTRUDENURBS und den ZYLINDER per Drag & Drop auf das Wort Boole im OBJEKTEFenster unter dem BOOLEObjekt ein. Wie ge habt klappt ein Mausklick auf das Pluszeichen vor dem BOOLEObjekt die Hierarchie auf (siehe Abbildung 1. 39).
Abbildung 1. 40: Hinzufügen eines Zylinders
Sollte die Reihenfolge von EXTRUDENURBS und Zylinder bei Ihnen umgekehrt sein, so ist dies bei diesem BOOLEModus 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 noch mals aus, um die beiden Löcher in den Zylinder zu schneiden. Rufen Sie dazu einen neuen ZYLINDER aus dem OBJEKTEMenü oder direkt aus dem IconMenü der Grundobjekte ab und tragen Sie die Werte aus Abbildung 1. 40 in den ZYLINDERDialog 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 MODELLBEARBEITENModus 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 BOOLEObjekt. Diesmal stellen Sie jedoch den Modus auf A MINUS B ein. Ordnen Sie dann die gesamte alte BOOLEGruppe und den neu hinzugefügten ZYLINDER unter dem neuen BOOLEObjekt ein. Die logische Reihenfolge muss dabei lauten: „Kolben minus Zylinder". Entspre chend der ModusEinstellung muss also der Kolben als A-Objekt oben und der Zy linder als B-Objekt unter dem BooleKolben eingeordnet werden, so wie es Abbil dung 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 NURBSObjekten lässt sich jetzt weiter zusammenfassen. Klicken Sie dazu einmal auf das oberste BOOLE Objekt. Alle Eintrage im OBJEKTEFenster sollten daraufhin rot dargestellt werden. Da ein BOOLEObjekt 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 NURBSOBJEKTE, so dass nur noch so genannte NULLOBJEKTE und POLYGONOBJEKTE übrigbleiben. NULLOBJEKTE erkennen Sie an dem Symbol des kleinen Koordinatensystems im OBJEKTEFenster. Man kann sie gut zum Zusammenfassen von O bjekten zu Gruppen benutzen. Für sich allein gesehen, sind sie jedoch in den Ansichtsfenstern unsicht bar. POLYGONOBJEKTE dagegen enthalten die sichtbaren Polygone, also Punkte und Flächen, aus denen alle Objekte zusammengesetzt sind. Diese Objektart kann ohne Probleme direkt im PUNKTEBEARBEITEN oder POLYGONEBEARBEITENModus weiter be arbeitet werden. Sie erkennen diesen Objekttyp an dem kleinen blauen Dreieck im OBJEKTEFenster. Jedoch sieht der Kolben noch immer recht komplex aus. Deshalb verbinden wir im nächsten Schritt alle NULL und POLYGONOBJEKTE zu einem einzigen Objekt. Dazu müssen wieder alle Objekte, die zusammengefasst werden sollen, aktiviert also im OBJEKTEFenster rot dargestellt sein. Dazu reicht das Anklicken des obersten Objekts der Hierarchie, m diesem Fall des NULLOBJEKTS mit dem Namen Boole. 1. Wahlen Sie dann im FUNKTIONENMenü den Punkt VERBINDEN aus. Es erscheint ein neues Objekt mit dem Namen Boole im OBJEKTEFenster. 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 Be griff link1 und speichere in diesem Begriff folgende Information aus der docVari able". 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 docVariable her ausgesucht wird und dessen Daten an die Variable link1 übergeben werden. Bitte beachten Sie noch das Semikolon am Ende der Zeile. Jede Befehlszeile muss mit ei nem 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 na hezu beliebig ist. Ausgenommen sind natürlich reservierte Funktionen und Be fehle, 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 varBefehl 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 Wer ten, wie z. B. X, Y und ZPositionen, 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 OBJEKTEFensters. Zusammenhängend kann man also hier lesen: „Reserviere mir den Begriff opglobal und speichere in diesem Begriff die globalen Werte des opObjekts". Wie bereits erwähnt ist das opObjekt jenes Objekt, hinter dem die Expression steht. Ganz ähnlich funktioniert die dritte Programmzeile. Hier wird die Variable l glo bal mit den globalen Werten des link1Objekts gefüllt, das wir zuvor über den FindObjectBefehl definiert haben. opglobal>SetV0(lglobal>GetVBO): Hier begegnen wir dem eigentlichen Kern dieser Expression, denn hier wird die Po sition des Link1Objekts auf das Pleuel1HyperNURBS übertragen. Da die Pro grammzeile 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 WerteMatrix 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 Vek toren der lokalen X, Y und ZAchsen. Ü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 wer den die in der Klammer stehenden Werte in das V0Schubfach einer Matrix ge schrieben.
Zusammenhängend können wir also lesen: „Hole die Information über die Position aus dem lglobalObjekt ab und schreibe diese Information in die Positionszeile des opglobalObjekts". Wir haben jetzt also die Positionsinformation des opObjekts durch die Positi onsinformation des link1Objekts ersetzt. Wir müssen diese Werte nun nur noch auf das opObjekt ü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. Da mit übergeben wir eine globale Matrix an ein Objekt. Diese Matrix ist hier die Vari able opglobal. Wir lesen also wieder: „Schreibe die Werte der Variable opglobal in die globale Matrix des opObjekts". Oben in der Kopfzeile des EXPRESSIONEDITORS finden Sie die KOMPILIERENSchaltflä che. Klicken Sie einmal darauf, um CINEMA 40 Ihre Expression testen zu lassen. Soll ten Sie Befehle falsch geschrieben oder z. B. ein Semikolon vergessen haben, wird Sie eine entsprechende Fehlermeldung mit Angabe der Programmzeile darüber infor mieren. Sie können dann wie in einer Textverarbeitung den Fehler korrigieren. Sind keine Fehler aufgetreten, können Sie die AUSFÜHRENSchaltfläche betätigen. Das Programm wird jetzt tatsächlich ausgeführt. Auch hier kann es noch zu Fehler meldungen kommen, wenn z. B. im FindObjectBefehl ein Objektname eingetragen wurde, der in der Szene nicht vorkommt. Die Befehle des Programms sind somit viel leicht völlig korrekt, aber das Programm kann trotzdem nicht richtig ablaufen. Sollte es auch hier zu keiner Fehlermeldung kommen, können Sie das Expres sionFenster schließen. Eine Sicherung ist nicht unbedingt nötig, da COFFEEEx pressions später zusammen mit der Szene abgespeichert werden. Das Sichern macht aber z. B. dann Sinn, wenn Sie sich eine Bibliothek mit Expressions zusam menstellen wollen. Viele dieser kleine Programme sind nämlich sehr universeil ein setzbar und lassen sich z. B, durch einfaches Austauschen von Objektnamen im FindObjectBefehl auch in anderen Projekten nutzen. CINEMA 40 verfügt jedoch auch über einige fertige Expressions, die wir natür lich gerne nutzen wollen. Sehr hilfreich in unserem Fall ist die lKEXPRESSION. Sie fin den Sie im gleichen Menü wie die COFFEEEXPRESSION im OBJEKTEFenster. Eine IKEXPRESSION sorgt dafür, dass das Objekt mit der Expression laufend ver sucht, die Position eines ZielObjekts 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 IKEXPRESSION für das Achse1Objekt in der Pleuel1Gruppe 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ög lichsterreicht 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 TargetObjekt zuneigen. Da dies Jedoch außerhalb der mögli chen 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 COFFEEEXPRESSION des PleuelHyperNURBS auf das e ntspre chende KolbenHyperNURBS. Der Kolben wird daraufhin ebenfalls die Position oben an der KurbelwellenAchse einnehmen. Dort wollen wir ihn jedoch nicht ha ben. Vielmehr sollte er die Position des AchseObjekts in der PleuelGruppe einneh men. Klicken Sie also doppelt auf das COFFEEEXPRESSIONSymbol hinter dem Kol ben und verändern Sie den Namen in dem FindObjectBefehl auf „Achsel", wie es Abbildung 2. 59 zeigt. Ich habe dort die Namen der Variablen angepasst. Dies ist je doch nur eine kosmetische Maßnahme. Die Expression funktioniert auch ohne Prob leme mit den alten Benennungen. Nach dem KOMPILIEREN und AUSFUHREN sollte der Kolben an die Position der unteren Achse springen. Die alte Verbindung wurde da mit automatisch wieder hergestellt.
Abbildung 2. 59: COFFEE-Expression zur automatischen Nachfuhrung der Kolben bei Bewegung der Pleuel
Diese Anordnung der zwei COFFEEExpressions und der IKExpression ü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 Expressi ons. So müssen die Zielnamen in den kopierten IKEXPRESSIONS in Target2 bzw. Targets umgeändert werden. Auch die FindObjectNamen in den COFFEEExpressi ons müssen auf Link2, Link3, sowie Achse2 bzw. Achse3 verändert werden. Jede Pleuel/KolbenGruppe 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 faszinie rende 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 verhin dert ein Verkanten der Kolben. Der Winkel der Ausrichtung der Kolben bleibt also wahrend der gesamten Bewegung konstant. Diese Information hilft uns maßgeb lich weiter, denn eine konstante Rotation lässt sich durch einfaches Drehen der Kol ben erzielen. Um hier jedoch eine weitere Variante vorzuführen, möchte ich auch diese Winkelveränderung per COFFEEExpression 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 Target1NullObjekts. 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 Rotations werte abgefragt oder gesetzt. Wir können also lesen: „Hole die Rotationswerte aus der Variable rotation1 und übertrage diese Werte auf die Rotation des opOb jekts". 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 KolbenExpressions identisch. Sie können die beiden neuen Zeilen durch Kopieren und Einfügen in die anderen Expressions direkt über nehmen. 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 TargetNullObjekte aus den LinkGruppen heraus und platzieren Sie diese z. B. oberhalb des KurbelwellenHyperNURBS im OBJEKTEFenster. Dies ist nö tig, da die TargetObjekte 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 PolygonObjekt der Kurbelwelle und drehen Sie dies um die lokale ZAchse. 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 TargetObjekte und ver schieben Sie diese entlang deren YAchsen soweit, dass diese knapp unterhalb der jeweiligen AchseObjekte liegen. Dies sorgt dafür, dass die Pleuel gezwungen werden, eine möglichst exakte Neigung von +45° bzw. 45° zu der Kurbelwelle ein zunehmen.
2. 6 KeyFrames Damit diese Position gespeichert wird, benutzen wir so genannte KeyFrames. Diese KeyFrames sind nichts anderes als gespeicherte Informationen eines Ob jekts zu einem definierten Zeitpunkt. Sie können selbst bestimmen, welche Infor mationen in einem KeyFrame gespeichert werden sollen. Dazu dienen die kleinen Symbole unten rechts am Bildschirmrand des Layouts. Sie finden dort verkleinerte Bewegen, Rotieren und SkalierenIcons, wie noch andere Icons, deren Funktionen jedoch hier noch nicht interessant sind. Sie können diese Icons durch Anklicken ak tivieren und auch wieder deaktivieren. In unserem Fall benötigen wir für die TargetObjekte nur die Information bezüg lich der Position. Deaktivieren Sie also alle Icons außer dem kleinen Bewegenlcon. Nun muss der Zeitpunkt bestimmt werden, an dem die Information gespeichert werden soll. Dafür ist der ZEITMANAGER mit seinem Zeitschieber da, der gleich links von den kleinen KeyFramelcons liegt. Stellen Sie diesen auf „o B". Damit wird das KeyFrame bei Aufnahme direkt an den Anfang unserer Animation, nämlich in das Bild o gesetzt. Aktivieren Sie jetzt eines der verschobenen TargetNullObjekte und klicken Sie auf den kleinen roten Kreis bei den KeyFrameSymbolen. Sie haben da mit ein PositionsKeyFrame für das TargetObjekt für den Zeitpunkt o B aufgenom men.
Klicken Sie dann auf das nächste bereits verschobene TargetObjekt und nehmen Sie wieder durch Anklicken des roten Kreises ein KeyFrame auf. Wiederholen Sie dies für das letzte TargetObjekt. Im letzten Schritt muss nun noch die Drehung der Kurbelwelle gesichert wer den, 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 Key Framelcons das RotationsSymbol, klicken Sie einmal auf das Kurbelwelle-Objekt im OBJEKTEFenster und klicken Sie dann auf den bekannten Aufnahmeknopf für KeyFrames. Damit ist die derzeitige Rotation der Kurbelwelle ebenfalls zum Zeit punkt o B abgespeichert. Wir legen jetzt willkürlich fest, dass sich die Kurbelwelle in einer Sekunde ein mal 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 ZEITMANAGERS auf Bild 24, also auf 24 B. Falls noch nicht ge schehen, wechseln Sie in den MODELLBEARBEITENModus und drehen Sie die Kurbel welle um die lokale ZAchse exakt um 360° weiter. Wenn Sie wie ich bei einem Win kel 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 KeyFra mes aktiviert haben, können Sie wieder den KeyFrameAufnahmeknopf betätigen. Eine volle Umdrehung der Kurbelwelle ist somit in KeyFrames festgehalten. Wir können uns jetzt um die TargetObjekte kummern. Diese dürfen, um jederzeit mög lichst eng an den Achsen der Pleuel zu liegen, nicht an den Startpositionen belas sen werden. Bewegen Sie also durch Anklicken und Verschieben mit der Maus den Zeitschieber des ZEITMANAGERS 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 TargetObjekte am weitesten von den AchsenObjekten 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 Positi onen abgespeichert werden sollen, aktivieren Sie ausschließlich die Positionsinfor mation bei den KeyFramelcons und bewegen Sie das erste TargetObjekt entlang dessen YAchse wieder auf eine Position knapp unterhalb der dazugehörigen unte ren PleuelAchse (siehe Abbildung 2. 62 rechts). Nehmen Sie diese Position mit den Aufnahmeknopfauf. Wiederholen Sie dies mit den übrigen zwei TargetObjekten.
Abbildung 2. 63: Nötige Einstellungen in der Zeitleiste
Um nun einen Überblick über alle KeyFrames zu bekommen, gibt es in CINEMA 40 die sogenannte ZEITLEISTE. Dies ist ein gleichnamiges Fenster, das Sie aus dem FENS TERMenü von CINEMA 40 abrufen können. In Abbildung 2. 63 sehen Sie die ZEIT LEISTE unserer Szene, wobei hier schon einige Einstellungen vorgenommen wurden, die jetzt erst besprochen werden. Bei Ihnen vorhanden sein sollten jedoch die drei PositionsSpuren hinter den TargetObjekten und die Winkelspur hinter dem Kurbelwelle-Objekt. Die kleinen grauen Kästen auf den Spuren sind die von uns ge setzten KeyFrames. Durch einen Doppelklick darauf können die in den KeyFrames gespeicherten Werte betrachtet und auch verändert werden. Ebenso lassen sich die KeyFrames mit der Maus verschieben, falls ein anderer Zeitpunkt für das KeyFrame gewünscht wird. Die grauen Balken unter den Key Frames sind die SEQUENZEN. Sie können sich diese vielleicht als Trägermaterial für die KeyFrames vorstellen. Sequenzen können bestimmte Längen haben oder auch automatisch wiederholt werden. Alle KeyFrames auf dieser Sequenz werden dann ebenso wiederholt. Man spart sich damit die Aufnahme periodisch wiederkehren der Positionen, Winkel oder anderer Parameter. Dies wurde bei uns ebenfalls Sinn machen, da die Target-Objekte immer nur zwischen den beiden bislang gesetzten KeyFrames hin und herpendeln müssen. Klicken Sie also doppelt auf den grauen Sequenzbalken hinter dem obersten TargetObjekt. Es öffnet sich ein Fenster, wie es ebenfalls in Abbildung 2. 63 zu se hen 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 einge tragen. Sofort erkennen Sie im Feld darüber, dass diese Sequenz durch die Wieder holungen nun 75 Bilder das Wort „Bilder" wird durch den Buchstaben „B" abge kürzt lang ist. Dies entspricht also drei Sekunden, wenn eine Sekunde aus 25 Bil dern besteht.
Sehr wichtig für uns ist hier noch das Abhaken der WEICHOption. Diese sorgt dafür, dass die Wiederholungen der Sequenz und damit auch die Wiederholung der Key Frames ohne sichtbaren Sprung erfolgen. Die KeyFramefreie Zone zwischen dem letzten KeyFrame und dem Ende der Sequenz bei Bild 24 wird also dafür genutzt, die Bewegung wieder auf den Stand des ersten KeyFrames der Sequenz zu brin gen. In unserem Fall wird sich dadurch also das TargetObjekt wieder zur Position des ersten KeyFrames hinbewegen. Aktivieren Sie diese weiche Wiederholung samt der Verkürzung der Sequenz auf 24 Bilder für alle drei TargetObjekte. Leider können wir die Drehung der Kurbelwelle nicht so einfach durch weiches Wiederholen der RotationsSequenz 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 Rota tion 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 Z Achse und speichern Sie diese erneute Rotation wieder mit einem RotationsKey Frame 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 fort fuhren. Besonders für die TargetObjekte ist eine Veränderung der Lange der Ani mation sehr schnell durch Veränderung der Wiederholungszahl machbar. Bei der Kurbelwelle hängen Sie einfach jeweils im Abstand von 25 Bildern ein KeyFrame 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 be rechnen 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 die sem 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 LinkObjekte an der Kurbel welle übernehmen. Sie bleiben dadurch auf den Achsen der Kurbelwelle, auch wenn sich diese dreht. Der Pleuel wird dabei durch die IKEXPRESSION der untergeordneten Achse auf ein TargetObjekt außerhalb ausgerichtet. Die Kolben übernehmen die Position der AchseObjekte aus den Pleuel und fol gen daher der Bewegung der Pleuel exakt nach. Zudem orientieren Sie sich an der Neigung der TargetObjekte und werden so bezüglich ihrer Rotation fixiert. Wie Sie hier ansatzweise gesehen haben, sind Expressions, egal ob selbst ge schrieben oder fertig abgerufen, eine sehr große Hilfe bei der Automatisierung von Bewegungen. Es lohnt sich also, sich mit den einzelnen Befehlen näher auseinan derzusetzen. Das Beispiel hat gezeigt, wie universell bereits eine einzige Expres sion einsetzbar ist. Wir werden uns daher im folgenden Kapitel noch naher mit diesen kleinen Pro grammen 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 per sönlichen Schwerpunkte eher im Design oder der Modellierung sieht. Trotzdem werde ich mit Hilfe kleinerer Beispiele versuchen, Ihnen die gangigs ten Befehle und Funktionen näher zu bringen. Danach wird es Ihnen sicher leichter fallen, selbst Expressions zu schreiben, oder aus Abwandlungen der hier vorgeführ ten 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 nachge zogene 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 er gibt 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ür feln, 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 tau schen 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 Segmentan zahl für die Höhe. Da der Zylinder gebogen werden soll, müssen wir für eine ent sprechende Unterteilung sorgen. Wir haben ja schon im ersten Kapitel beim Biegen des Zylinders festgestellt, dass eine gleichmäßige und hohe Polygondichte bei De formationen 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 Abbil dung 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 Vor teil, 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 XY Ansicht. 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 lie gen. Schalten Sie in die Betriebsart LOKALE KOORDINATEN BEARBEITEN um und begrenzen Sie die Bewegungsfreiheit für das BEWEGENWerkzeug auf die YAchse. KONVERTIEREN Sie den Zylinder zu einem POLYGONOBJEKT und ziehen Sie dann das Koordinatensys tem des Zylinders herunter bis auf das Niveau seines Bodens (siehe Abbildung 3. 4). Da unser Zylinder direkt im WeltNullpunkt liegt und die Höhe exakt 200 m be trägt, sollte das Koordinatensystem also genau bei einer WeltYKoordinate von 100 m liegen. Sie können diesen Wert also auch direkt in den KOORDINATENMANAGER 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 ver schieben. Damit sind die Vorbereitungen abgeschlossen, und wir können uns mit dem Ani mieren 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 BiegeDeformator wie geschaf fen. Sie finden das sogenannte BIEGEOBJEKT im gleichen Menü wie den zuvor schon benutzten FORMELDEFORMATOR und das WICKELNOBJEKT. Doppelklicken Sie auf das Symbol des BIEGEOBJEKTS im OBJEKTEFenster und übernehmen Sie die Einstellungen aus Abbildung 3. 5. Der MODUS im BIEGEOBJEKT definiert dabei, welcher Bereich des Objekts durch das BIEGEOBJEKT verbogen wer den soll. Die BEGRENZTEinstellung 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ÜMMUNGWert 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 RICH TUNGWert 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 BIEGEOBJEKT 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 BIEGEOBJEKT erst an die rich tige Stelle gebracht werden. Dies gilt sowohl für das OBJEKTEFenster wie auch für die Position in den Ansichten. Deformatoren wirken im Allgemeinen nur auf übergeordnete Objekte. Wir könn ten das BIEGEOBJEKT also direkt unter dem ZYLINDER einordnen. Kurzfristig wurde dann alles wunschgemäß funktionieren; da wir den ZYLINDER jedoch die Treppen hi nab bewegen wollen, wurde dadurch das BIEGEOBJEKT 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 NULLOBJEKTE sehr gut zu gebrauchen. Wenn wir das BIEGEOBJEKT einem NULLOBJEKT unterordnen, m dem zudem ein POLYGONOBJEKT liegt, wird das POLYGON OBJEKT verformt, als ob man den Deformator direkt dem POLYGONOBJEKT untergeord net hatte. Von Vorteil ist jedoch, dass wir das POLYGONOBJEKT frei bewegen können, ohne das BIEGEOBJEKT mit zu verschieben. Es ist schließlich dem NULLOBJEKT untergeord net, das an Ort und Stelle verbleibt. Wie so oft sagt auch hier ein Bild mehr als umständliche Beschreibungen. Die entsprechende Anordnung von BIEGEOBJEKT, ZYLINDER und NULLOBJEKT sehen Sie in Abbildung 3. 6. Die gleiche Abbildung dokumentiert die wünschenswerte Position für das BIEGEOBJEKT. Es bedeckt damit den kompletten oberen Teil des Zylinders. Wenn Sie das BIEGEOBJEKT positionieren wollen, denken Sie daran, wieder in den MODELL — BEARBEITEN — Modus zurückzuschalten. In diesem Fall funktioniert es zwar auch im LOKALEKOORDINATENBEARBEITENModus, aber es ist besser, Sie gewöh nen sich eine gewisse Disziplin in Bezug auf die aktiven Modi an. Ein paar Zeilen tie fer im Text werden Sie verstehen, warum.
Abbildung 3 6: Lage und Einordnung des Biege-Objekts
Da BIEGEOBJEKT und ZYLINDER jetzt in der richtigen Position zueinander stehen, kön nen wir den Zylinder nun über den Deformator animieren. Dafür benutzen wir Key Frames, wie schon im Kapitel zuvor. Zuerst müssen wir uns entscheiden, welche Werte als KeyFrames für das Ob jekt 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 ih rer 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 Aufnahmelcon. Sie finden dies links von den KeyFramelcons 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 BlEGEOB JEKTS durch einen Doppelklick auf d essen Symbol im OBJEKTEFenster und verandern Sie die Einstellungen dort entsprechend Abbildung 3. 8. Schließen Sie den Dialog über die OKSchaltfläche und nehmen Sie wiederum ein PARAMETERKeyFrame für das BIEGEOBJEKT 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 beob achten. 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 BIEGEOBJEKT 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 KeyFrames automatisch eine Sequenz entstanden ist. Damit ist der graue Balken gemeint, auf dem die Key Frames liegen. Vor der Sequenz steht der Name des KeyFrameTyps. in unserem Fall sind es PARAMETERKeyFrames. Es ist also nicht möglich, beliebige KeyFrames auf einer Sequenz zu mischen. Jede Art hat eine eigene Sequenz mit eigener Benennung. Sie werden dies spätestens bemerken, wenn wir jetzt GRÖSSEKeyFrames 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 OBJEKTEFenster und schalten Sie auf die Aufnahme von GRÖSSEKeyFrames um. Alle anderen auf die rote Aufnahmekugel. Verschieben Sie dann den Zeitschieberauf Bild 15 und wiederholen Sie die Aufnahme eines GRÖSSEKeyFrames. 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 KeyFrames, die Sie soeben aufgenommen haben. Ebenfalls eingeblendet in der Abbildung 3. 10 sehen Sie als Erinnerung die akti vierte OBJEKTBEARBEITENBetriebsart.
Abbildung 3. 10: Key-Frames für die Größe des Zylinders Die Aufnahme von GRÖSSEKeyFrames ist heikel, da in diesen KeyFrames nicht die Abmessungen eines Objekts gespeichert werden, sondern die Längen der Koordi natenachsen. Grundsätzlich gibt es zwei Arten, ein Objekt zu skalieren, also dessen Größe zu
verändern. Bislang haben wir dafür das SKALIERENWerkzeug im MODELL — BEARB von dessen lokalem Ursprungentferntoderauf diesen zu bewegt. Die lokalen Koor dinatenachsen bleiben davon unberührt.
Die zweite Möglichkeit b esteht ebenfalls in der Benutzung des SKALIEREN — Werkzeu 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 KeyFrames 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ÖSSEKeyFrames war es nicht so tra gisch, 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 SKALIE RENWerkzeug mit Begrenzung auf die YAchse 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ön nen, ist dies in unserem Beispiel bei einer YGröße von 2. 3 m der Fall. Nehmen Sie hier wieder ein GRÖßEKeyFrame für den Zylinder auf. Wie Sie erkennen können, ergibt sich nun, da der Zylinder das BIEGEOBJEKT volt ständig durchläuft, tatsächlich eine Krümmung von 180°, und beide Enden des Zy linders 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 zu sammenschrumpfen. Hier begegnet uns ein Problem, denn das Skalieren hat seinen Bezugspunkt im lokalen Koordinatensystem. Da wir dies zu Beginn an das untere Ende des Zylin ders 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 Ska lierung nach oben bewegt werden. Diese Verschiebung nach oben, die durch das BIEGEOBJEKT gleichzeitig einen Versatz nach rechts und eine Umkehrung der Bewe gung um 180° bedeutet, muss dabei so mit der Rücknahme der Skalierung gekop pelt 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 da fü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 Defor matorenDrawingPipeline auf der linken Interface — Seite ausreichend (siehe Abbil dung 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. 3mal länger als noch zu Beginn der Animation. Der obere Teil des Zylinders liegt nach dieser Skalierung ex akt auf der zweiten Treppenstufe auf, wenn wir den BiegeDeformator wieder ein schalten. 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 PUNKTEBEARBEITENModus und klicken einen beliebigen Punkt auf der oberen Deckfläche des Zylinders an. Werfen Sie einen Blick in das STRUKTURFenster und su chen 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 Ob jektachsen 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 YWert 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 YPosition des Objekts von 100 m ergibt sich daher ein endgültiger Wert von 360 m als YWert für den oberen Zylinderrand.
2. 3 * 200 = 460 460100 = 360
Abbildung 3. 13: Umrechnung von Objekt- in Welt — Koordinaten
Dies hätten wir auch einfacher erfahren können. Diesen Zwecken dient die Um schaltmöglichkeit zwischen OBJEKT und WELTSystem im KOORDINATENMANAGER. Se lektieren Sie wieder einen Punkt auf der oberen Deckfläche des Zylinders und wechseln Sie im KOORDINATENMANAGER auf das WELTSystem. Tatsächlich bekom men 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 Abbil dung 3. 13). 2. 3 * 200 = 460 460100 = 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 Ru fen Sie eine neue COFFEEEXPRESSION 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 Bil der pro Sekunde Animation frei einstellen können Die eingestellte Anzahl der Bil der 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öti gen 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 Bedingun gen 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 ge schweiften 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 aus gefü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 w ir 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 ZGröß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 Va riable 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 vec tor () 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 auto matisch den Zahlenwert 19, da dies der ZAnteil 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 YAnteil 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 (YKoordinate der oberen Punkte) x 2 3 (Y Große beim Erreichen der 2 Treppenstufe)100 {Start Y Position des Zylinders) = 360 (Welt YKoordinate 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 EXPRES SIONEDITOR 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 Zy linders auf Bild 9 (siehe Abbildung 3 15) Das Verschieben von Key Frames können Sie dabei durch einfaches Anklicken und Verschieben mit dem Mauszeiger vollzie hen Diese Verschiebung des GROSSEKey Frames sorgt dafür, dass der Zylinder be reits an Lange zunimmt, noch wahrend die Biegung durch das BIEGE OBJEKT stattfin det Das hinzugekommene POSITION Key Frame halt die Lage des Zylinders bis zu diesem Zeitpunkt fest Da also keine anderen POSITION Key Frames vor dem Zeit punkt 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 YAchse. Sie sollten den BiegeDeformator dafür wieder akti viert haben, um die Wirkung im ganzen Ausmaß zu sehen. Dank unserer Expression bleibt der Zylinder mit dem ehemals oberem Ende auf der zweiten Treppenstufe fi xiert, während das untere Ende durch das BIEGEOBJEKT wandert und der Zylinder schließlich wieder seine ursprungliche Form annimmt. Behalten Sie bei der Bewegung die Werte im KOORDINATENMANAGER im Auge. Dort sollten Sie bei der Position stoppen, bei der der Zylinder wieder eine YGröße von i eingenommen hat. Der Zylinder ist dann wieder auf die Startgroße ge schrumpft. Wie Sie in Abbildung 3. 16 sehen, ist dies bei einer YPosition von 160 m der Fall. Dort können Sie auch sehr gut erkennen, wie das BIEGEOBJEKT 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. Set zen 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 BIEGEOBJEKT, da sich der Zylinder jetzt am ehemals unteren Ende biegen muss.
Rufen Sie also wieder ein BIEGEOBJEKT ab und übertragen Sie die Einstellungen aus Abbildung 3. 17. Größe und Modus entsprechen dabei komplett dem ersten BIEGE OBJEKT. Es soll schließlich auch ebenso arbeiten. Damit auch dieses BIEGEOBJEKT auf den Zylinder wirken kann, müssen Sie es in die gleiche Gruppe einordnen. Versu chen Sie es zuerst mit der Anordnung, die die Abbildung 3. 17 zeigt, also zuerst das alte dann das neue BIEGEOBJEKT.
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 BIEGEOBJEKT um 180° um dessen ZAchse und verschieben Sie es auf eine Hohe von 230 m. Diese Einstellungen können Sie natürlich auch direkt per Zahleneingabe im KOORDINATENMANAGER übernehmen (siehe Abbildung 3. 18). Wie Sie in der Abbildung sehen können, liegt bei ausgeschalteten Deformatoren das untere Ende des Zylinders komplett im n euen BIEGEOBJEKT. Wenn Sie nun die Deformatoren wieder aktivieren und den orangen Anfasser des neuen BIEGEOBJEKTS in einem Ansichtsfenster verschieben, passiert etwas Merkwürdiges. Der Zylinder scheint um einen entfernten Punkt zu rotieren. Es fin det 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 NULLOBJEKT als erste Defor mation auftaucht. Erst danach findet die Biegung des neuen BIEGEOBJEKTS statt. Durch die falsche Reihenfolge wurde der Zylinder also aus dem Wirkungskreis des folgenden Deformators „herausgebogen". Drehen Sie deshalb die Reihenfolge im NULLOBJEKT um. Zuerst muss das neue BIEGEOBJEKT eingeordnet sein, dann das alte, jetzt funktioniert alles nach Plan, denn das neue BIEGEOBJEKT ist zu Beginn der Animation ja noch in neutraler Stel lung 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 BIEGEOBJEKTS gekommen ist, ist der Zylinder schon längst aus dessen Wirkungsbereich entlas sen. 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 PARAMETERKeyFrame für das neue BIEGEOBJEKT und wech seln Sie zu Bild 37. Setzen Sie dort ebenfalls ein PARAMETERKeyFrame für das BIEGE OBJEKT. Diesmal jedoch mit einer 180°Krümmun g in Richtung o°. Da das neue BIEGEOBJEKT um 180° um die ZAchse verdreht ist, wird die 0°Rich tung ebenfalls um 180° gedreht und die Krümmung erfolgt in exakt der anderen Richtung als dies beim ersten BIEGEOBJEKT der Fall war. Da der Zylinder jedoch ebenfalls durch das erste BIEGEOBJEKT 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 BIEGE OBJEKT ü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. Zie hen Sie den Zylinder langsam entlang der YAchse 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 Zeit schieberauf 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 Abbil dung 3. 21). Halten Sie dies in einem PositionsKeyFrame 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 COFFEEEXPRESSION 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 Expres sion ja bereits einmal zuvor auf einen Bereich begrenzt. Durch die ifAbfrage wird die COFFEEEXPRESSION erst ab Bild 21 aktiv. Dort müssen wir also auch die Deakti vierung vornehmen: if (Bild>20 U Bild FindObject („BiegeObj"); 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 opObjekt. Sie werden sich vielleicht fragen, was das Biege-Obj nun ist, da bislang kein Ob jekt diesen Namen trägt. Damit diese Technik funktionieren kann, müssen wir die Na menderalten BIEGE — OBJEKTE beim Zylinder verändern. Ansonsten kann die Expression nicht feststellen, welches BIEGEOBJEKT 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 ein zelne Deformatoren ein und ausschalten, ohne gleich alle Deformatoren in einer Szene über die DrawingPipeline ausschalten zu müssen. Zudem sollten Sie die Zylindergruppe über rote Punkte dahinter unsichtbar ma chen. 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 Verfor mung 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 Ar beitsschritte, 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 Expres sions noch weit mehr möglich ist.
Wir werden n icht nur Punkte damit steuern, s onderauch noch einen Morphing Algorithmus entwickeln, der üb MorphSequenz hinausgeht. Dies hört sich komplizierter an, als es tatsächlich ist. Ich werde mir dennoch be sondere 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 RINGObjekte, die Sie ebenfalls im OBJEKTEMenü 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ön nen. Übernehmen Sie ebenfalls die entsprechenden Positionen, wie sie Abbildung 338 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 AKIMASpline aus und beginnen Sie in der XY Ansicht unten am Boden des untersten Zylinders beginnend insgesamt acht SplinePunkte zu erzeugen. Sie müssen Sie dafür im PUNKTEBEARBEITENModus be finden. 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 RingObjekte. 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 Grup pen 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 MitteZylinder bleibt für sich allein, da keine anderen Objekte direkt mit ihm verbunden sind. Der BasisZylinder bekommt nur den einen seitlichen Ring unter geordnet. Um den Seilzug zu modellieren, rufen Sie einen KREIS — Spline auf, geben diesem einen Radius v on 5 m und ordnen Kreis und Seilzug — Spline in einem schon bekann ten SWEEPNURBS. 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 si chergestellt, dass Sie die jetzt besprochenen Expressions auch ebenso überneh men 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 ma chen. Beim Verschieben des Oben — Zylinders soll dieser nicht nur senkrecht nach
oben oder unten wandern, sondern automatisch den MitteZylinder 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. Ru fen Sie eine COFFEEEXPRESSION für den Oben — Zylinder im OBJEKTEFenster ab und übernehmen Sie den Text aus der Abbildung, der mit dem Wort „Oben" gekenn zeichnet 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 v arBefehl die beiden von mir gewählten Worte o pglobal und pos als Variablen reserviert und dann mit Werten gefüllt. Zuerst bekommt die Vari able opglobal die globalen Werte des opObjekts, also des Objekts hinter dem die Expression steht, und dann erhalt die posVariable den Positionsvektor des opOb jekts, 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 fol genden Abschnitten berechnet oder ausgelost wird. Dies erleichtert das Zurechtfin den in Expressions erheblich. Gewöhnen Sie sich dies auch an, wenn Sie Expres sions 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 720) p o s . y = 720;
Hier begegnen uns zwei if — Abfragen, die wir auch schon im vorherigen Beispiel be nutzt 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 wer den. Die erste ifAbfrage überprüft, ob die YPosition kleiner als So ist. Ist dies der
Fall wird der Befehl hinter der Klammer ausgeführt. D ieser besagt, dass die YPosition 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ück stufungauf 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 z urückschreiben: opglobal > SetV0 (vector ( 0 , pos. y, 0 ) ) ; Da wir nur den YWert des Positionsvektors verändert haben, müssen wir diesen mit dem X und dem ZWert wieder zu einem Vektor zusammenfügen. Wir haben da
für bereits den v ector ()Befehl kennengelernt. Wollten wir die alten X und Z — Werte w ieder überneh pos. z). Wir haben hier jedoch die Möglichkeit, noch eine andere Beschränkung einzu bauen, nämlich die Festlegung auf eine Koordinate. Indem wir hier den X und den ZWert 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 gene riert und nur nach oben verschoben wurde. Ansonsten müsste man hier die ent sprechenden X und Z — Koordinaten eintragen, an denen sich d as Objekt befinden soll. Jetzt bleibt uns nur noch, die neuen Werte komplett an das opObjekt zu überge ben:
op > SetMg(opglobal); Damit sind wir für den Oben — Zylinder schon fertig. Eine ganz ähnliche Expression schreiben wir uns jetzt für den MitteZylinder: 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ück sichtigen müssen. Das sich der MitteZylinder 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 ObenZylin ders mit dem doc > FindObject(„Oben")Befehl und speichern dann die globale Matrix mit master > GetMg() in mglobal und schließlich daraus den Positionsvek tor mit mglobal > GetV0() in mpos ab. Die globale Matrix des MitteZylinders wird über opglobal > GetMg() gesi chert.
pos = mpos. y 40;
Abbildung 3. 43: Bewegungsfreiheit der Zylinder begrenzen
Hier kommt der eigentliche Trick dieser Expression, denn wir weisen der posVari able einfach die YKoordinate des ObenZylinders abzüglich eines Offsets von 40 zu. Dies führt normalerweise dazu, dass sich der MitteZylinder immer 40 m unter dem OdenZylinder 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 370) pos = 370;
Wie in der Expression zuvor wird hier die Bewegungsfreiheit mit zwei ifAbfrage eingeschränkt. Der MitteZylinder kann somit weder eine Position unter 40 m noch
über 370 m einnehmen. Besonders die Begrenzung nach oben ist hier entschei dend, da dies die Regel durchbricht, dass der MitteZylinder immer 40 m unter dem
ObenZylinder liegt. Ab einer Hohe von 370 m bleibt er hangen und folgt dem Oben-Zylinder erst w ieder n der MitteZylinder an die Anfangsposition zurückgeführt. Die Begrenzung nach unten hätte man sich hier sogar noch sparen können, da der ObenZylinder 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 opObjekt. Werfen wir einen Blick auf unsere Szene und testen wir unsere Expressions ein mal (siehe Abbildung 3. 44). Aktivieren Sie den ObenZylinder 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 ObenZylinders ab und bleibt stehen. Erst bei der Abwartsbewegung des ObenZylinders bewegt sich dieser wieder von der Stelle.
Die Ringe und der Ausleger folgen automatisch mit, da diese direkt dem Oben-Zylinder untergeord SweepNURBS? 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 Zylin dern.
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 an dererseits eine glaubhafte Streckung der jetzt noch „schlaffen" Bereiche des Spli nes 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 PUNKTEBEARBEITENModus, a ktivieren Sie den Seilzug — Spline im S WE 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 SplinePunkte an andere Positionen zu setzen. Sie müssten dann nur die später beschriebene Ex pression 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 de finieren. Wenn Sie meine Werte übernehmen möchten, können Sie auf diese Notiz natürlich verzichten. Im nächsten Schritt wechseln Sie in den MODELLBEARBEITENModus zurück und verschieben den ObenZylinder auf eine Höhe, von der Sie glauben, dort müsse das Seil gespannt sei. Lesen Sie bei dieser Höhe die YKoordinate des senkrechten Rin ges oben auf dem ObenZylinder ab. Ich erhalte dafür einen Wert von 665 m (siehe Abbildung 3. 46). Die Wahl dieses Objekts in der ObenGruppe war völlig willkürlich. Sie hätten auch den OdenZylinder selbst oder ein anderes Objekt der Gruppe ablesen kön nen. 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 O bjekt weiter zu verändern, w ieder 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 de finiert, 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 Sta dium erreicht werden soll. Ein Innehalten in einem derartigen Morphing ist eben falls 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 KeyFrames 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 wichtigs ten Parameter für das Morphen eines Punktes in einem Objekt. Die Ausgangsposi tion 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 Vek toren 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 Richtungs vektor, 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 Orts vektor 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 gelan gen. 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 ei ner gerade Verbindungslinie liegt.
Wenn es uns jetzt noch gelingt, diesen Faktor x an die Bewegung des ObenZylinder 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. Inter essant kann dies bei Gesichtsanimationen sein. Dazu jedoch später mehr. Stürzen wir uns also in die COFFEEEXPRESSION für den S pline im SWEEPNURBS (siehe Abbildung 3. 49). Wenn Sie bislang alle Punkt und ObjektKoordinaten aus meinen Abbildungen übernommen haben, können Sie die Expression aus der Ab bildung exakt so übernehmen. Ich habe in der Abbildung, die diesmal doch etwas längere Expression bildlich in der Mitte getrennt und nebeneinander gruppiert, da mit 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 RingB = doc > FindObject ( „ R i n g B a s i s " ) ; var RingO = doc > FindObject ( „ R i n g O b e n " ) ; var RingO2 = doc > FindObject („RingOben2"); var 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 RingObjekte 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 reser vieren. 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 opObjekts auf einmal ab. Es handelt sich dabei um ein so genanntes Array, also e in Datenfeld. Um die Daten eines Array — Elements ab zufragen, muss man die Nummer des gewünschten Elements angeben. Mehr dazu gleich. Faktor = (posO2. y288. 631) / (665288. 631); Hier definieren wir unseren xFaktor, 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 YPosition des Oben2 — Rings abgelesen, also wenn das Gerät voll stä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 (655288. 631) die ma ximale 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, wie viel der Strecke zurückgelegt wurde. Weiter geht es mit der beliebten ifAbfrage: 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 Oben2Rings ü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 Seil zug 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 liegen den Ring samt Würfel auf dem Ausleger näher zum ObenZylinder ziehen. Es
müsste also eine Bewegung entlang der XAchse stattfinden. Bei mir beträgt die X Koordinate des Ring — beweglich — Objekts, wie ich ihn genannt habe, in der entspann ten Position 675 m. Ich habe es mir jetzt einfach gemacht und einfach festgelegt, dass ein Meter mehr an Höhe des Oben2Rings zu einem Meter weniger bei der XKoordinate des GleiterRings 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 Punktkoordina ten zu, die wir selbst so eingestellt haben. Hier sehen Sie auch, wie man auf die be reits 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 STRUKTURFenster. Dieser gesamte if — Komplex sorgt also dafür, dass wenn der Ring Oben2 die Y Koordinate 665 m überschreitet —, die SplinePunkte i, 3 und 4 in ihrer Endposition liegen und gleichzeitig der GleiterRing samt dem untergeordneten Würfel näher an den Oben2Zylinder heranrückt. Was mit dem Spline passieren soll, wenn der Oben2Ring 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 Klam mern stehenden Befehlsblock ein, der nur ausgeführt wird, wenn die direkt darüber stehende ifBedingung 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 XPosition des GleiterRings 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 SplinePunkte. Da sich das Prinzip wiederholt, habe ich hier nur den Punkt i als Listing aufgeführt. Sie se hen 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 ZKoordinate durchbrochen, da diese für Start und Endposition ex akt 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 notier ten 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 dokumen tierten 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 be sonders bei Punkt 7 interessant, der an den beweglichen Ring gekoppelt wird. Das SplineEnde 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 je dem Fall ausgeführt. Dies macht ja auch Sinn, da das Seil immer durch die Ringe laufen soll, egal in welcher Position der Oben2Zylinder bzw. der RingOben2 ge rade 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 unterge ordnetem 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 Da ten 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 ei nes Objekts löscht oder hinzufügt. Es gibt nämlich einige Tags, die von einer derar tigen Veränderung in Kenntnis gebracht werden müssen, damit es nicht zu Proble men 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 Ex pression Editor und bewegen Sie den Oben2Zylinder langsam auf und ab. Es sollte sich jetzt eine voll funktionsfähige kleine Maschine von Ihnen wie magisch bewe gen 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 Bewe gung fortfahren. Diese komplexe Animation lässt sich jetzt mit nur zwei KeyFrames
animieren und berechnen, einem für die untere und einem für die obere Position des Oben2Zylinders. Vielleicht auch eine interessante Angelegenheit für Kunden präsentationen von Objekten. Denken Sie z. B. an ein Auto, bei dem durch das Be wegen eines NULLOBJEKTS das Faltdach zusammenklappt oder das Licht angeschal tet 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 RaytracingFunktionalität mit Spiegelungen, Schatten und Transparenzen wird erst beim Berechnen des Bildes oder Films sichtbar. Dies ist jedoch weit entfernt von ei ner 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 be wegliche Ring oben auf dem Ausleger keinen Grund, in die Ausgangsstellung zu rückzukehren, wenn der ObenZylinder 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 StopperWürfel auf dem AuslegerZylinder 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 die sen Zylinder im StopperWü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 KREISSpline mit ei nem HELIXSpline in einem SWEEPNURBS 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 zusam menzieht, benötigen wir eine zusätzliche Expression für den HELIXSpline. Wir könn ten 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 HELIXDialog ein getragen 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 HELIXSpline der Fe der ab. Wie immer gehe ich kurz auf die einzelnen Zeilen ein, da hier neue Befehle vorkommen. var RingO2 = doc > FindObject („RingOben2"); 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 ifAbfrage haben wir bislang so nicht benutzt. In der Klam mer steht jedoch wieder eine Bedingung. In diesem Fall lesen wir: „Wenn die Vari able RingO2 nicht mit Werten gefüllt ist, dann... ". Das Ausrufezeichen vor der Vari able bedeutet nämlich „nicht". Es handelt sich hier um eine etwas verkürzte Schreibweise, da kein Vergleich der Variable mit einem Zahlenwert vorliegt. Trotz dem ist dies eine legitime Bedingung. Der Befehl, der ausgeführt wird, wenn die Va riable keine Werte enthält, ist return. Er sorgt dafür, dass die Expression beendet, bzw. nicht weiter ausgeführt wird. Bei dieser ifAbfrage handelt es sich also um eine Sicherheitsabfrage, um Kom plikationen im Programm zu vermeiden, wenn eine wichtige Variable nicht mit Wer ten 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 Be fehl 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 OBJEKTEFenster einstellen lassen, in unserem Fall erhalt die Variable Werte hier alle Daten der Helix. Auch hier folgt wieder zur Sicherheit eine ifAbfrage, ob auch tatsachlich die entsprechenden Daten gefunden und übergeben werden konnten. Hatten wir den parametrischen HELIXSpline also in ein SplineObjekt konvertiert, so konnte der
Container nicht mit Werten gefüllt werden und wurde daher einen Abbruch der Expression — 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 YPosition 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 HELIXDialog 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 ifBedingung neu berechnet wurde , muss nun in den HELIXContainer einge tragen 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 Be fehl mit auf den Weggeben müssen, wohin der Wert abgespeichert werden soll. Für diesen Zweck gibt es festgelegte Benennungen für jedes Parameterbasierte Ob jekt, die Sie dem so genannten SDK für die COFFEE Programmiersprache entneh men können. Eine aktuelle HTML — Version des SDKs finden Sie auf der CD zu diesem Buch.
Dort können Sie a uch nachschlagen, dass die Benennung für die Höhe einer Helix mit PRIM_HELIX_HEIGH Wenn Sie mehrere Werte eines Objekts gleichzeitig in einer COFFEEEXPRESSION oder einem COFFEEPLUGIN vorgeben möchten, können Sie auch mehrere dieser SetData — Zeilen untereinander s chreiben und jeweils dem Container des Objekts zu weisen. Hier kommen wir jedoch nur mit dem HöheWert aus. Ist der Container nun mit den neuen Werten gefüllt, muss er dem Objekt wieder übergeben werden. Dies geschieht mit dem SetContainerBefehl. op > Message (MSG_UPDATE): In dieser abschließenden Befehlszeile teilen wir CINEMA 40 mit, dass wir das op Objekt bezuglich der Form verändert haben und erwirken damit einen Aktualisie rung 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. 3 Delta — Expression Ais Abschluss dieses Kapitels über COFFEEEXPRESSIONS möchte ich Ihnen eine so genannte DELTA — EXPRESSION vorführen. Mit Delta sind Expressions und Plugins beti telt, 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 An tenne 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äg heit könnte man nämlich auch so umschreiben, dass dies eine Kraft ist, die den Zu stand 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 Posi tion bleiben möchte. Sie folgt daher der Beschleunigung nur mit einer Verzöge rung. 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 ge drü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 fest halten müssen, bevor wir diesem erlauben dürfen, dem AutoObjekt zu folgen. Da mit dies funktionieren kann, müssen wir also dem AutoObjekt einen gewissen Vor laufgewä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 (181); DX = 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) l / ((damp + 1) * DZeit + 1); follow > SetPosition (vector (pos. x + OFFSETX + DX, pos. y + OFFSETY + DY, pos, z + OFFSETZ + D Z ) ) ;
] / / DeltaWerte 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 T = doc > G e t T i m e ( ) ; var sec = T > GetSecond; var j, pos, rot, vec, rotv, RDZeit, DZeit. RDX, D X , RDY, DY, RDZ, DZ; var Delay = 10; var 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 zeitli chen 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ämp fung der Schwingungen für die Position und die Rotation. Die Schwingungen wer den 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 Nach schwingen erzwingen, als es die Bewegung des Hauptobjekts eigentlich generieren wurde. Es folgen die OFFSETWerte 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 Rota tionswerte bei o liegen (ROFFSETWerte 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 ge nannt. 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 Contai ner 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 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 Schwingun gen 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 ifAbfrage aus. Interessant ist hier die Bedingung sec==o. o. Das dop pelte 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 f orSchleife w Gruppe von Befehlen mehrmals hintereinander ausführen möchte. Dies mag zu erst unlogisch klingen. Der große Vorteil dabei ist, dass die forSchleife mit einer Variablen funktioniert, die im Laufe der Zeit ihren Wert verändern kann. Die for Schleife enthalt zudem eine Abbruchbedingung, mit der die Wertentwicklung die ser 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 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 ei gentliche Wert, der unter der Nummer gespeichert werden soll. Beim ersten Schlei fendurchlauf lesen wir also in der ersten Befehlszeile: „Speichere im Container un ter der Nummer1 den Positionsvektor des opObjekts 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 Posi tionsvektoren des opObjekts gespeichert. Hier haben alle Einträge von i bis 10 dann noch den gleichen Wert, da sie zum gleichen Zeitpunkt aufgenommen wur den, aber später im Programm wird sich dies ändern. An Platz 5 steht dann exakt die Position, die das opObjekt 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 forSchleife stehen müssen. Es hatte ausgereicht, diese Zeilen unter die for Schleife, 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 Kom mentar hinter den Zeilen angefügt. Dies wird im Verlauf des Programms noch deut licherwerden. 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 SeilzugMorphing 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 ska lierte Änderung der Rotationsvektoren. pos und rot bekommen jeweils die letzten noch gespeicherten Positionen im Container zugewiesen, also die Werte, die das opObjekt vor der mit delay be stimmten 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 opObjekt noch in Bewegung sein. Ein Nachschwingen ist also nicht notig, son dern nur das Übernehmen der Rotation. Dies ist verkürzt die Botschaft dieser Zei len. 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 fol lowObjekt noch der Rotationswert eingestellt, wobei auch der WinkelOffset 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 rotVektor nicht mit dem Vektor danach in Fach 202 überein stimmt, so bedeutet dies, dass zu diesem Zeitpunkt keine Rotation des opObjekts 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 op Objekt schon insgesamt stillsteht. Die Werte RDX, RDY und RDZ berechnen im Prinzip eine einfache Sinusschwin gung, die jedoch durch das Multiplizieren mit l / ((Rdamp +1 ) * RDZeit + 1)lau fend abgeschwächt wird. Dadurch, dass bei längerem Stillstehen des opObjekts 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 RdampWert großer o. Diese gedampfte Sinusschwingung wird dann einfach zu dem vorhandenen Ro tationswert addiert und mit follow>SetRotation() auf das followObjekt übertra gen. Solange also das opObjekt in Ruhe verweilt, bekommt das followObjekt eine zeitlich gedampfte Sinusschwingung mit der maximalen Amplitude der letzten Win keländerung multipliziert mit dem rscaleWert 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 followObjekts. Die erste ifAbfrage überprüft, ob das opObjekt weiterhin in Bewegung ist. Wenn ja, wird dessen Bewegung einfach für das followObjekt übernommen und die Felder 101 und 100 werden aktualisiert. Auf diese Werte muss zugegriffen werden, wenn plötz lich ein Stillstand des opObjekts 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 ifAbfrage, die dann abgearbeitet wird, wenn das Objekt zwischen den abgespeicherten Werten in Feld i und 2 keine Bewe gung mehr zeigt. Es kommt dann zu der bereits bekannten SinusBerechnung, die uns eine schöne gedämpfte Schwingung mit dem letzten Bewegungsvektor als Am plitude um die letzte Position liefert. Diese Werte werden dann mit dem SetPosi tion( )Befehl auf das followObjekt übertragen. for (j = 1; j 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 opObjekts abspeichern und die zu vor gespeicherten Werte um eine zeitliche Position im Container verschieben. Die ses Verschieben erledigt hier die forSchleife, die von i bis zu Delay1 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 aktu ellen Werten füllen. Damit haben wir die ContainerFä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 bcContainer werden dann so gesichert, dass sie für die Berechnung des nächs ten Bildes wieder zur Verfügung stehen. Dies ist sehr wichtig, da wir in den Berech nungen auf bereits vergangene Positionen und Winkel zugreifen müssen, eben auf DeltaWerte zur aktuellen Position. Da sich der Effekt nur in der Animation zeigt, lässt sich ein Beispiel kaum in Bil der für das Buch bannen. Ich bitte Sie daher, die Szenen auf der CD zu diesem Kapi tel 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 DeltaPlugins übrig, denn sie kooperieren oft nicht mit dem NetzwerkRenderer von CINEMA 40. Dies hängt damit zusammen, dass die Werte für den Container zeitlich linear gesammelt werden. Der NetzwerkRenderer springt jedoch je nach Leistung der integrierten
Rechner fast beliebig von Bild zu Bild in einer Animation. Die Containerwerte ver lieren dadurch ihre Kontinuität und können nicht mehr zu den erwünschten Ergeb nissen 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 da her, die Arbeit mit dem COFFEESDK, das alle verfügbaren Befehle und kleinere Bei spiele enthält. Da es aber noch genügend andere interessante Betätigungsfelder in CINEMA 4D gibt, möchte ich das ExpressionKapitel hiermit schließen. Ich hoffe, Sie konn ten 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 da nach ist die MAXONHomepage. 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 3DForen von 30 Begeisterten, die nach Hilfe bei der Model lierung 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 d aher 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 Schwer punktabdeckt 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 ei nen 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 Berech nungsmethoden, 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 3Dtauglichen Vorlagen Die Aufgabenstellung für dieses Kapitel ist die Modellierung eines weiblichen Kop fes, 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 un tere 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 Qua drats mit dem Kinn (siehe Abbildung 4. 2). Eine neue Hilfslinie teilt das untere Viertel des Quadrats erneut gleichmäßig ho rizontal. 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 Wegstre cke 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 Abbil dung 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 Stimmig keit überprüfen. Wölben Sie zudem das Kinn etwas nach vorne, damit unter der Un terlippe 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ächs tes ein ähnliches Konzept für die Skizze einer frontalen Ansicht. Damit beide An sichten 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 ge nügend Platz bleibt. Halbieren sie die 600 x 600 PixelFläche mit zwei Hilfslinien horizontal und verti kal, und trennen Sie unten die überflüssigen 50 Pixel mit einer weiteren Linie op tisch 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 Ent fernung in 5 gleiche Abschnitte auf. Ich habe dies in Abbildung 4. 9 mit vertikalen Li nien 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 Kop fes 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 ex akt 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° dre hen. 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 Haibie renden 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 Sei ten 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 Augen winkeln 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 Abbil dung 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ön nen 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 menschli chen 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 ansons ten 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 ge schrieben, die kostenlos über meine Internetseite www. v onkoenigsmarck. de bezo gen 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 Stan dardbestückung gehören, möchte ich in diesem Workshop vermehrt mit ihnen ar beiten. Sie werden schnell erkennen, warum sich diese Plugins so großer Beliebt heit erfreuen.
4. 2. 1 EdgeExtrude, EdgeBevel und Cutter Zuvor sollten Sie die drei Plugins mit den dazugehörenden Icon — Dateien in den Plu ginOrdner von CINEMA4D legen. Nur dann können sie ordnungsgemäß registriert werden. Jedes dieser Plugins hat ein eigenes Symbol, um die Integration in das vor handene Layout zu vereinfachen. Gegebenenfalls können Sie naturlich auch Tasta turkürzel vergeben. Rufen Sie dazu im FENSTERMenü den Punkt PALETTEN BEARBEITEN im LAYOUTUnter punkt 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 BEFEHLSGRUPPE ERZEU GEN aus.
Abbildung 4. 15. Zusammenstellen einer neuen Befehlsgruppe
Die Icons kollabieren dadurch zu einem einzigen Symbol mit einem kleinen schwar zen Pfeil am unteren Rand. Ziehen Sie dieses Icon der Gruppe dann in Ihr CINEMA 4DLayout 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 BEFEHLEFensters. 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 hinzuge fugte BefehlsMenü 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 PLUGINSMenü 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 Ver bindungen zwischen Punkten (siehe Abbildung 4. 17). Über die Werte kann man die Entfernung und Richtung steuern, in der die extrudierten Punkte und Kanten gene riert werden sollen. Die CROSSEXTRUDEOption erzeugt zusatzlich Querverbindun gen, falls dies möglich ist. Werden also die vier Eckpunkte eines viereckigen Poly gons selektiert und mit der CROSSEXTRUDEOption extrudiert, so entstehen nicht nur vier neue Polygone, die senkrecht auf den Rändern des Polygons stehen, son dern auch vier Xförmig angeordnete Polygone, die sich exakt in der Mitte des Poly gons treffen. Weiterhin gibt es diverse Optionen für die Bestimmung der Verschie bungsrichtung in Bezug auf das Ausgangsobjekt. Dies wird uns hier jedoch nicht beschäftigen. Wir werden das Plugin nur wie folgt benutzen: Selektieren von Punk ten, 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 BEWEGENWerkzeug. 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 beschriebe nen Kanten von Polygonen abzuschrägen, also Fasen zu erzeugen. Dies kann in Be reichen 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 PUNKTEBEARBEITENModus 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 an deren Stelle im Objekt wiederholen und eine EDGETYPE 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 EDGETYPE auf 45°. Wenn Sie den EDGETYPE auf FREE einstellen, können Sie im Feld darunter selbst einen Abstandswert für den EDGEOFFSET eingeben. Wenn Sie damit etwas herumgespielt haben, werden Sie schnell die Möglichkei ten 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 ausgerich tet werden müssen. Dafür gibt es eine eigene Funktion im STRUKTURMenü.
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 MESSER Werkzeug von CINEMA ist, dass mit dem CUTTER auch um Ecken herum Schnitte ge zogen werden können, und dass notwendige Verbindungspolygone nur innerhalb der selektierten Flächen erzeugt werden. Alle nicht selektierten Flächen bleiben un berührt. Als kleines Bonbon erhält der CUTTER zudem bereits vorhandene UVKoor dinaten. Bereist zugewiesene und fixierte Texturen müssen nach der CUTTERBenut zung 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 PLUGINS Menü 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 MATERIALIENFenster 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 Vor schaufenster und entsprechend verzerrt auch auf der Materialkugel oben links im
Schließen Sie das MATERIALBEARBEITENFenster und erzeugen Sie ein zweites Ma MATERIA terial mit den gleichen Einstellungen, wobei Sie nun die seitliche Kopfansicht einle sen (siehe Abbildung 4. 19).
Abbildung 4. 19: Zwei Materialien mit den Bildvorlagen konfigurieren
Rufen Sie aus dem OBJEKTE oder dem GRUNDOBJEKTElconMenü 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 ex akt 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 MATE RIALBEARBEITENFenster ablesen. Die Größe wird unter dem Vorschaubild des einge ladenen Bildes angezeigt (siehe Einkreisungen in Abbildung 4. 19)
Abbildung 4. 20: Bildvorlagen auf Objekten anordnen Sie können den EBENEDialog wieder schließen und das Material mit der seitlichen Ansicht direkt aus dem MATERIALIENFenster auf das EBENEObjekt im OBJEKTEFenster ziehen (Drag & Drop). Es öffnet sich ein TEXTURDialog wie in Abbildung 4. 20, den Sie direkt über die OKTaste wieder schließen können. Das standardmäßig ausge wählte UVWMAPPING sorgt automatisch dafür, dass das Material plan auf der Ober fläche landet. Es kann höchstens vorkommen, dass das Material spiegelverkehrt oder auf dem Kopf stehend erscheint. Dies kann dann im TEXTURMenü im OBJEKTE Fenster 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 KOORDINATENMANAGER auf eine ZPosition von +400 Einheiten und ziehen Sie auch auf diese Ebene das passende Material, also das Material mit der frontalen Vorlage. Sie können den TEX TURDialog 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 zei gen die Bildvorlagen und stehen exakt rechtwinklig zueinander. In dem Raum da zwischen entsteht nun der Kopf. Sind bei Ihnen nicht in allen Fenstern die Vorlagen zu erkennen, vergewissern Sie sich, dass zumindest QUICK SHADING und die Darstel lung 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 KopfGeometrie bewegt werden kann.
4. 3. 1 Das Auge Rufen Sie dazu ein KUGELGrundobjekt auf und platzieren Sie es so hinter der fronta len Bildvorlage, dass nur ein Teil durch diese hindurchragt und somit in der fronta len Ansicht sichtbar ist (siehe Abbildung 424). Verschieben Sie die Kugel so ent lang der X und YAchsen, 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 ei nen Radius von 70 m entschieden, wie Sie Abbildung 4. 2 5 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 durch brechenden 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 ZAchse in der seitlichen Ansicht so weit nach vorne, bis es dort die kor rekte Position einnimmt (siehe Abbildung 4. 26). Bitte lassen Sie sich in der Abbil dung 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 PolygonObjekt 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 XAchse. Dies hat den Sinn, die Polregion des Ku gelObjekts in den Bereich zu drehen, in dem die Pupille und die Iris liegen. Die kreisförmige Punkteverteilung dort vereinfacht die Modellierung der runden Pu pille und der Iris (siehe Abbildung 4. 27).
Abbildung 4. 27: Das konvertierte und rotierte Auge
Wechseln Sie in den PUNKTEBEARBEITENModus und selektieren Sie einen Punkt des ersten Punktkreises vom Kugelpol aus gesehen. Fall Sie eine andere Kugeluntertei lung als ich gewählt haben, sollten Sie die frontale Vorlagenebene kurzfristig ent lang der ZAchse 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 entsprechen den Punktkreis schnell identifizieren, der am ehesten die äußere Begrenzung der Pupille darstellen soll. Stellen Sie im KOORDINATENMANAGER entweder die WeitZKo ordinate oder die lokale YKoordinate des selektierten Punktes fest. Markieren und kopieren Sie den entsprechenden Wert im KOORDINATENMANAGER. 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 ko pierten 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 ver deutlichen. Haben Sie eine andere Kugelunterteilung gewählt, sind ggf. noch andere Punkt kreise 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 Koordina tenwert. 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 CINEMA4Deigenen 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 PLUGINSMenü den CUTTER auf. Fast augenblicklich sollten Sie das Resultat erkennen können (Abbildung 4. 29 rechts). Es ist ein kreisförmiger Schnitt entstan den, 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 PUNKTEBEARBEITEN Modus erkennen können. Benutzen Sie das SKALIERENWerkzeug, um die neue Punktgruppe derart zu verkleinern, dass wir Sie als Irisbegrenzung benutzen kön nen. 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 YAchse 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 YKoordinate eingeben. Der Polpunkt landet dann exakt im Mit telpunkt 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 da bei die eingestellten 3 Einheiten von dem selektierten Punktkreis entfernt. Dies macht eigentlich noch keinen Sinn, da die Punkte allein noch keine neue Schattie rungsqualitä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 ma nipulieren. Geben Sie dazu einen YWert von z. B. 69 m im KOORDINATENMANAGER 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 entstan den. 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 Iris Punktkreis und benutzen Sie abermals das EdgeBevel Plugin. Diesmal wähle ich ei nen 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 ge bracht werden. Ich habe wieder die 69 m benutzt. Die Abbildung 4. 35 zeigt das be rechnete Resultat unserer Aktionen. Die Iris hat eine erkennbare Struktur bekom men, 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 un nötigen Punkten und Flachen lösen, die im fertigen Objekt keine Rolle mehr spie len. 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 PUNKTEBEARBEITENModus m der seitlichen Ansicht einen Rahmen um den hinteren Teil der Kugel. Achten Sie darauf, nicht auch den verschobenen Pol mit zu selektie ren. Dieser muss erhalten bleiben. Der Selektionsrahmen könnte also so wie in Ab bildung 4. 36 aussehen. Durch Betätigen der [Entf]/[