MAXON CINEMA 4D 7 . Ein Workshop für Profis 9783827318909, 3827318904


260 105 27MB

English Pages 463

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

MAXON CINEMA 4D 7 . Ein Workshop für Profis
 9783827318909, 3827318904

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

design publishing imaging

Arndt von Koenigsmarck

EinWorkshop für Profis

auch zu MAXON BODYPAINT 3D

ADDISON­WESLEY

MAXON  CINEMA 4D 7

Arndt von Koenigsmarck

MAXON  CINEMA 4D 7 Ein Workshop für Profis

ADDISON­WESLEY An  imprint  of  Pearson  Education München • Boston • San Francisco •  Harlow, England Don  Mills,  Ontario  •  Sydney  •  Mexico City Madrid  •  Amsterdam

Die Deutsche Bibliothek­CIP­Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei der Deutschen Bibliothek erhältlich Die Informationen in diesem Produkt werden ohne Rücksicht auf einen  eventuellen  Patentschutz veröffentlicht. Warennamen werden  ohne  Gewahrleistung der freien Verwendbarkeit benutzt. Bei  der Zusammenstellung von Texten  und Abbildungen  wurde  mit  größter Sorgfalt  vorgegangen. Trotzdem  können  Fehler nicht vollständig ausgeschlossen werden. Vertag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch Irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Autoren dankbar. Alle  Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche  Nutzung der in diesem  Produkt gezeigten Modelle und  Arbeiten  ist  nicht zulassig. Fast alle Hardware­ und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses  Produkt wurde  auf chlorfrei gebleichtem  Papier gedruckt. Die  Einschrumpffolie ­ zum  Schutz vor Verschmutzung ­ ist aus umweltverträglichem  und  recyclingfähigem  PE­Material.

10 9 8 7 6 5 4 3 2 1

04 03 02 01 ISBN 3-8273-1890-4

© 2001 by ADDISON­WESLEY Verlag, ein Imprint der Pearson Education Deutschland GmbH Martin­Kollar­Straße 10­12,  D­81829 München/Germany Alle Rechte vorbehalten Einbandgestaltung:  Lektorat:  Korrektorat:  Herstellung:  Satz:  Druck und Verarbeitung:  Printed in Germany

Helmut  Kraus,  Dusseldorf Klaus Hofmann, khofmann@pearson. de Angelika Obermayr, Grafing Anna Plenk, aplenk@pearson. de mediaService ­ Siegen  (www. media­service. tv) Kösel, Kempten (www. KoeselBuch. de)

Inhaltsverzeichni Einleitung 

9

l  CINEMA  4D  7 

13

1. 1 Das Interface................................................................................. 13 Die Betriebsarten............................................................................. 13 Werkzeuge und Funktionen............................................................. 15 Eigene Icon­Paletten integrieren...................................................... 16 Die wichtigsten Befehle und Funktionen.......................................... 17 Die verschiedenen Fenster von CINEMA 4D..................................... 24 1. 2  Ein Arbeitsbeispiel........................................................................... 28 Die Boole­Methode...........................................,.............................. 28 Die Spline­Methode......................................................................... 47 Selektive Deformationen................................................................. 57



HyperNURBS 



71

MODELLIERUNG UND ANIMATION EINES ZYLINDERS MIT PLEUEL UND KURBEL WELLE 2. 1 

Die Modellierung des  Kolbens......................................................... 71 Die Kolbenringe modellieren........................................................... 80 2. 2  Modellieren  der  Pleuelstange.......................................................... 89 Aufteilen  der  Pleuelstange  in  Baugruppen...................................... 96 Schrauben und Muttern hinzufügen.............................................. 102 2. 3  Modellieren  der  Kurbelwelle.......................................................... 105 2. 4  Vorbereitungen für die Animation...................................................  111 Lokale  Drehzentren  positionieren...................................................  113 Hilfsobjekte  einsetzen....................................................................  115 2. 5 COFFEE­Expressions....................................................................... 118 2. 6  Key­Frames....................................................................................  125

3

Expressions  131 Die fließende Spirale...................................................................... 131 Die  Modellierung............................................................................  132 Das Animieren des Zylinders.......................................................... 134 Austauschen des Zylinders............................................................. 151 3. 2  Bewegungsabläufe automatisieren................................................ 157 Wie  funktioniert  Morphing?............................................................ 169 3. 3 Delta­Expression............................................................................ 178

4

Organisches Modellieren  ENTWURF UND MODELLIERUNG EINES MENSCHLICHEN KOPFES

189

4. 1  Herstellen von 3D­tauglichen Vorlagen.......................................... 189 4. 2  Vorbereitungen für die Modellierung............................................ 200 EdgeExtrude,  EdgeBevel  und Cutter.............................................. 200 Die Skizzen als Vorlagen nutzen.................................................... 203 4. 3  Die Modellierung des Kopfes........................................................ 206 Das Auge.......................................................................................  206 Die Augenlider............................................................................... 217 Die  Nase........................................................................................ 229 Wangen und Kinn.......................................................................... 235 Der Mund....................................................................................... 241 Stirn und Nacken........................................................................... 246 Das Ohr......................................................................................... 249

5

Mechanische  Modellierung  MODELLIERUNG EINES MENSCHLICHEN TORSOS

257

5. 1  Der Torso...................................................................................... 257 Der Kehlkopf................................................................................. 257 Hydraulik­Halterung...................................................................... 264 Hydraulik­Zylinder......................................................................... 267 Mechanische Muskeln................................................................... 270 Ein Abweiser................................................................................. 275 Schulter und Brust........................................................................ 278 Schläuche und Kabel..................................................................... 283 Die  Wirbelsäule.............................................................................  292 Der  Hals........................................................................................  296 5. 2  Eine  Holzkiste modellieren............................................................ 299 Den Raum modellieren.................................................................. 305

Radiosity und Caustics 

313

6. 1  Radiosity­Einstellungen ermitteln.................................................. 313 Die Stärke...................................................................................... 313 Die  Genauigkeit.............................................................................  314 Prepass­Größe............................................................................... 314 Strahltiefe.....................................................................................  315 Sammelstrahlen............................................................................  315 Min. Auflösung/Max. Auflösung.................................................... 315 Den richtigen Min. ­Wert ermitteln................................................. 316 Den Max. ­Wert ermitteln................................................................ 318 Die Genauigkeit nutzen................................................................. 319 Strahltiefe  und  Sammelstrahlen.................................................... 323 Zusammenfassung........................................................................  330 6. 2  Caustics und matte Effekte............................................................ 331 6. 3  Materialien  und Shader­Trees....................................................... 345 Holz............................................................................................... 345 Die Unterschiede der  Illuminations­Modelle..................................  350 Das  Brettermaterial platzieren....................................................... 352 Störungen hinzufügen................................................................... 354 Verwittertes  Metall........................................................................ 357 Normale  metallische  Oberflächen..................................................  366 Mit dem Fresnel­Shader arbeiten.................................................. 367 Stein und Mörtel............................................................................ 372 Matte Effekte mit SLA simulieren................................................... 386

7

Tipps und Tricks  395 Compositing  und  Multi­Passes......................................................  395 Ein  kleines  Multi­Pass­Beispiel...................................................... 406 Ein Compositing­Beispiel................................................................ 411 7. 2  Texturen anpassen mit BODYPAINT 3D.......................................... 419 7. 3 Texturen als Lichtquellen benutzen............................................... 432 7. 4  Animierbare  Haare erstellen.......................................................... 437 7. 5  Reduzieren und Explodieren.......................................................... 444 Explosion FX................................................................................... 448

Index 

461

Einleitung Immer  kürzer  scheinen  die  Produktionszyklen  zu  werden.  Kaum  hat  man  sich  in CINEMA 4D Version 6 eingearbeitet, schon gibt es Version 7, wieder mit vielen 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 COFFEE­Programmierung und die verschiedenen Mo­ dellierungsmethoden  wünschen.  Ich  habe  dem  mit  einem  nochmals  gesteigerten Umfang  an  Expression­Beispielen  und  noch  detaillierteren  Arbeitsbeispielen  zum Thema Modellierung Rechnung getragen. Ich  hoffe damit, auch dem Anfänger in Sachen CINEMA 4D und 3D kompetente Hilfe  leisten  zu  können. Wie gewohnt hier ein kurzer Abriss dessen, was Sie in den folgenden Kapiteln 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 HyperNURBS­Modellierung. 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 COFFEE­Expressions 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  Delta­Expressions.  Das  Niveau  ist  dabei  zwar  recht hoch,  die  Beispiele  sind  jedoch  Zeile  für  Zeile  dokumentiert  und  können  so  auch von Anfängern gut nachvollzogen werden. Wie modelliere ich einen Kopf? Diese oder ähnliche Fragen an mich oder in Fo­ ren  lese  ich sehr oft.  In  diesem  Kapitel wird  daher von  der Erstellung realistischer Skizzen  bis  hin  zur  HyperNURBS­Modellierung  der  komplette  Arbeitsablauf der Planung und Umsetzung eines Kopf­Objektes beschrieben. Dabei greifen wir nicht nur auf Standardwerkzeuge von CINEMA 4D zurück, sondern auch  auf zusätzliche, frei  erhältliche  Plugins,  die  die  Produktivität  erheblich  steigern  und  zudem  noch bessere Ergebnisse liefern können. Wurde im  Kapitel zuvor eher die  Modellierung organischer Objekte  besprochen, so  geht es hier im fünften  Kapitel mehr um  mechanische  und  unbelebte Objekte. Passend zum Kopf aus dem letzten Kapitel wird hier ein mechanischer Oberkörper modelliert,  der  in  eine  komplette  Szene  integriert  wird.  Dabei  werden  fast  alle Werkzeuge von CINEMA 4D benutzt. Kapitel  6  beschäftigt  sich  ausführlich  mit  den  neuen  Radiosity­  und Caustic­ Effekten, sowie mit dem Umgang der neu integrierten SLA­Shader. Besonders die Ermittlung der richtigen Radiosity­Parameter ist essentiell für moderate Renderzei­ ten und das erwünschte Ergebnis. Schritt­für­Schritt­Anleitungen zeigen daher ei­ nen  exemplarischen  Weg  für  die  Ermittlung  der  optimalen  Einstellungen.  Zudem wird  im zweiten  Teil des Kapitels der Umgang mit SLA­Shadern  und  Shader­Trees ausführlich besprochen. Kapitel  7  schließlich  fasst  in  mehreren  Kurzbeispielen  weitere  interessante Techniken zusammen und stellt u. a. die ergänzende Arbeit in BODYPAINT 3D vor und erläutert eine Möglichkeit, realistisch animierte Haare in CINEMA 4D zu 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 „MAXON­Familie". Mein Dank geht nun auch zum schon wiederholten Mal an Sebastian Dosen von DOSCH  DESIGN  für  die  freundliche  Unterstützung  mit  Demomaterial  für  die  Buch­CD (www.doschdesign.com).  Auch  Herbert  Fahrnholz  von  NOCTUA  GRAPHICS  war  so freundlich, exklusive Proben seiner Texturen für Sie als Leser zur Verfügung zu stel­ len (www.noctua­graphics.de). Vielen Dank auch an Klaus Baulmann von  BAULMANN  PRODUKT ENTWICKLUNG für die Bereitstellung eines hochauflösenden 3D­Scans (www.digital­forms.de). Dieser hat die Arbeit mit dem Polygon­Reduzierer an einem realistischen Objekt erst möglich gemacht.

Viele  Freunde  und  „Mitstreiter"  in  der C4D­Community  haben  auch  wieder  kosten­ freie Plugins und Demos für die Buch­CD zur Verfügung gestellt. Vielen Dank dafür an alle, die ich  hier nicht separat erwähnen  kann. Natürlich  auch  ein  freundlicher  Gruß  an  alle  Freunde  im  C4D­TREFF  und  C4D­ FORUM sowie an Ricky, Ulf und Bernd von VREEL 3D ENTERTAINMENT oHG, an Jay und Mike von  MEDIENBUNKER oHG, an  nEO vom  C4D­TREFF und natürlich an meine Familie. Letztlich  ein freundlicher Gruß auch an die  Mitarbeiter von  ADDISON­WESLEY,  und hier besonders an Angelika Obermayr, Christian  Rauscher und  Klaus Hofmann. Die Zusammenarbeit war wie immer eine Freude. Gerne  können  Sie  mich  auch  über  meine  Internetseite  www.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 3D­Programmen  oder von al­ teren CINEMA­4D­Programmversionen vor V6 auf die aktuelle Version 7 umsteigen, bringe  ich  hier  einen  kurzen  Abriss  über  die  wichtigsten  Menüs  und  Symbole  in CINEMA 4D XL. Umsteiger von Version 6 können sich hier vorerst etwas zurücklehnen, denn 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 XL­Version neue Icons und Menüs hinzukom­ men. Ich  beschränke  mich  hier vorerst  auf  die  XL­Version  und  gehe  dann  zu  einem spateren Zeitpunkt auf die BODYPAINT­3D­Menüs und ­Icons detaillierter ein.

1. 1. 1  Die Betriebsarten CINEMA  4D  arbeitet  mit  so  genannten  Betriebsarten,  die  der  Software  mitteilen, welche Bestandteile eines Objektes zu bearbeiten sind. Die jeweils aktive 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­ BEARBEITEN­Betriebsart  schaltet.  Erst jetzt erhalt man Zugriff auf die  Punkte  und kann diese selektieren, verschieben und auch loschen oder erzeugen. Sinngemäß  verhalt  es  sich  mit den  anderen  Betriebsarten,  wie  z.  B.  POLYGONE BEARBEITEN oder OBJEKT BEARBEITEN. In Abbildung 1. 1 sind die verschiedenen Betriebs­ arten,  die  Sie  als  Icons  auf der  linken  Interfaceseite  ebenso  finden  wie  auch  als Menüeintrage im WERKZEUGE­Menü. Dort sieht man sich aus Platzgründen jedoch nur  Einträgen,  wie  POLYGONE,  PUNKTE  und  OBJEKT  gegenüber.

Grundobjekte  konvertieren Kamera  bearbeiten Objekt bearbeiten Model! bearbeiten Objektachse bearbeiten Punkte bearbeiten Polygone bearbeiten Textur  bearbeiten Texturachsen bearbeiten Animation bearbeiten inverse Kinematik aktivieren Animationen aktivieren/deaktivieren Deformationen aktivieren/deaktivieren Expressions aktivieren/deaktivieren Partikel  aktivieren/deaktivieren Abbildung 1.1: C!NEMA-4D-Betriebsarten

Seitdem  mit  der Version  6  so  genannte  parametrische  Objekte  eingeführt  wurden, lässt  sich  nicht  jedes  Objekt  sofort  beliebig weiterbearbeiten.  Da  parametrische Objekte zwar ebenfalls aus Punkte  und  Polygonen  bestehen, diese jedoch vorerst nicht sichtbar sind,  müssen  parametrische Objekte zuvor konvertiert werden. Dies geschieht  bei  Betätigung  der  GRUNDOBJEKTE­KONVERTIERTEN­Schaltfläche,  die  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  Boole­Grundobjekts. Wie  Sie an  dem  Beispiel  des  Boole­Grundobjekts sehen,  sind  nicht  nur eigentli­ che Grundobjekte, wie z. B. ein Würfel, eine Kugel oder auch Spline­Grundformen wie das Zahnrad oder der Kreis von  einer derartigen  Umwandlung  betroffen,  son­ dern auch  alle Arten von  NURBS­Objekten  und  andere  interaktive  Modellierungs­ hilfen, wie das Symmetrieobjekt,

Die vier unteren  Icons  in  Abbildung  1.1  aktivieren  bzw.  deaktivieren  die  so  genann­ ten Drawing­Pipelines von CINEMA 4D. Die Drawing­Pipelines 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  Drawing­Pipelines  ganz  oder  teilweise  deaktivieren,  wenn keine entsprechenden Objekte verwendet werden. Die  hier vorgenommenen  Einstellungen  beeinflussen  nur  die  Editordarstellung und  nicht das Ergebnis der Bild­ oder Animationsausgabe.  Haben Sie also zwecks schnellerer Editorarbeit z. B. die COFFEE­Expressions über das entsprechende lcon deaktiviert,  so  sind  die  Expressions  dennoch  während  der  Berechnung des  Bildes oder  der Animation  wieder  aktiv.

1.1.2 

Werkzeuge und  Funktionen

Lupe

 

X­Achse ein/aus Y­Achse  ein/aus Z­Achse  ein/aus

Bewegen/Skalieren/Rotleren Objekt­  /Welt­System Selektionsmethoden Render  in  aktiver Ansicht Wiederherstellen  Rendermethoden  ­ ­ Rückgängig  Rendering Optionen ­ Abbildung 1.2: Icons im oberen Bereich des Interfaces

Wandern  wir nun zu  den  horizontalen  Icons am  oberen  Bildschirmrand.  Hier kon­ kretisieren Sie zu der ausgewählten Bewegungs­, Skalierungs­ oder Rotations­Be­ 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 Welt­System um. Die drei mit stilisierten Vasen gekennzeichneten  Icons starten die Berechnung der aktiven Editoransicht oder eines Teilbereichs dessen. Hier wird auch die finale Berechnung des Bildes oder der Animation gestartet. Die dabei relevanten Parame­ ter stellen Sie in den Render­Optionen 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 Icon­Leiste  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­ zeiger­Selektion.  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 Lupen­lcon 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 Zoom­Effekt um.  Die Tasten  [+]  und  [­]  auf der Tastatur bewirken gleiches, ohne die Maus benutzen zu müssen. In Abbildung 1.2 nicht mehr zu sehen sind die Icons mit den Grundobjekten und einigen Modelling­Funktionen.  Da hier einige nur über Menüs erreichbar sind, an­ dere jedoch auch als Icon vorliegen, führe ich kurz vor, wie sich beliebige Funktio­ nen selbst in lcon­Menüs organisieren und in das Layout integrieren lassen. Ansonsten erschöpft sich  hiermit ­ abgesehen von der kombinierten CINEMA 4D / BODYPAINT 3D­Variante ­ die Anzahl der sichtbaren Icons. Aufgrund der 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 Icon­Paletten integrieren Dazu  ruft man  im  FENSTER­Menü  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  Macintosh­Computern  mit  gehaltener  [#]­ Taste, in einen leeren Bereich des Layouts. In dem aufklappenden Submenü wäh­ len Sie den Punkt NEUE BEFEHLS­PALETTE aus. Es erscheint ein leeres kleines Fenster.

Abbildung 1.3: Zusammenstellen eigener Befehlspaletten Ziehen  Sie  jetzt  beliebige  Icons  aus  dem  Fenster mit den  miniaturisierten  Icons  in das  leere  Fenster  hinein,  wie  es  in  Abbildung  1.3  angedeutet  ist.  Dabei  sind  die Icons thematisch nach Editor, Werkzeugen und z. B. installierten Plugins geordnet. Wenn Sie also das gewünschte  Icon  in  der Auswahlliste  nicht finden, wechseln  Sie einfach  die entsprechende  Rubrik  über das Aufklappmenü  im  oberen  Bereich. Haben Sie die gewünschten Icons in dem  Fenster gruppiert, klicken Sie wieder rechts, bzw. mit der [#]­Taste in das neue Icon­Fenster und wählen den Befehl BE­ FEHLS­GRUPPE  ERZEUGEN  aus. Die Icons verschwinden nun bis auf das erste lcon in der Liste. Dieses bekommt zusätzlich einen kleinen schwarzen Pfeil, der auf die Befehlsgruppe hindeutet. Jetzt verschieben Sie das Icon mittels Drag & Drop an die gewünschte Stelle im Layout und  schließen  das  Icon­Auswahlfenster  (siehe  Abbildung  1.4).  CINEMA  4D  kehrt daraufhin  in  die gewohnte  Betriebsart zurück.

Abbildung 1.4: Eingefügte neue Befehlspalette Damit das derart veränderte  Layout auch  beim  nächsten  Programmstart wieder er­ scheint, muss es nun noch über die entsprechende Funktion im FENSTER­Menü z. B. als Start­Layout gesichert werden.

1.1.4  Die wichtigsten Befehle und Funktionen Nachfolgend habe ich Ihnen nach dem gleichen Schema die wichtigsten Werkzeuge aus dem STRUKTUR­Menü in  Icon­Gruppen zusammengestellt. Wir werden noch  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 POLYGONE­BEARBEITEN­Modus. 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 ARRAY­Funktion vervielfältigt ein aktives Objekt mit diversen Variablen und Zufalls­Optionen. Die  BEVEL­Funktion 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ÜCKE­TOOL  verbindet  selektierte  Flachen  innerhalb  eines  Objekts  mitein­ ander. Dazu werden erst die  Flächen selektiert, dann das BRÜCKE­TOOL aktiviert und schließlich  muss  mit gehaltener  Maustaste  eine  Verbindungslinie zwischen  den  zu verbindenden  Polygonen  gezogen  werden.  Die  selektierten  Flächen  werden  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ÜCKE­TOOL auch Punkte verbinden kann. Das  EXTRUDIEREN zieht Polygone oder ganze Gruppen  davon  aus einem  Objekt heraus.  Dabei werden  die  Eckpunkte der selektierten  Polygone oder  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  SMOOTH­SHIFT­Funktion 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 MESSER­Werkzeug 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  Polygon­Zahlen  vorgeben oder gezielt Rundungen hinzufügen. Zu den detaillierten Einstellmöglichkeiten für jedes dieser Objekte gelangen Sie durch  einen  Doppelklick auf das  miniaturisierte Symbol des jeweiligen  Objekts  im OBJEKTE­Fenster, auf das wir noch zu sprechen kommen.

Abbildung 1.8: Verschiedene Spline-lnterpolationen

Natürlich  können  Splines auch  manuell erstellt werden.  Dazu  stehen  Ihnen  die  in Abbildung 1.6 abgebildeten  Interpolationsmethoden zur Verfügung, die Sie zusam­ men mit den Grundobjekten im OBJEKTE­Menü abrufen können. Sie haben hier die Wahl zwischen AKIMA­SPLINES, B­SPLINES, BEZIER­SPLINES, FREIHAND­SPLINES, mit FOR­ MELN erzeugten,  LINEAREN oder KUBISCHEN SPLINES. Nachdem Sie in den  PUNKTE­BEARBEITEN­Modus gewechselt und eine Spline­lnter­ 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 Tangenten­Enden 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 Spline­Symbol im OBJEKTE­Fenster zu einem kleinen  Dialog, der Ihnen diese und andere Möglichkeiten  bietet.

Abbildung 1.9: Szene-Objekte

Das  Umfeld  Ihrer  Objekte  bestimmen  Sie  über  SZENE­OBJEKTE,  die  Sie  ebenfalls  im OBJEKTE­Menü finden (siehe Abbildung 1.9). Hier finden sich u. a. Kameras und Lichtquellen mit automatischer Ausrichtung, ein  HINTERGRUND­  und  ein  VORDERGRUND­OBJEKT  für  die  automatisierte  Einblendung z. B. von Bildmotiven oder Copyrightvermerken in ein Bild oder eine Animation; ein UMGEBUNGS­OBJEKT,  mit dem sich Nebel und ambientes Licht in die Szene integrieren lassen, und ein STAGE­OBJEKT, mit dem in 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­ len­lcon im Layout abrufen, ohne in das Menü wechseln zu müssen.

Abbildung 1.10: NURBS-Objekte

Besonders  für die  Modellierung organischer  Formen  sind  NURBS­Objekte  sehr 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 NURBS­Objekte sind in Abbildung 1.10 als Symbole zusammengefasst. Neben den auch in anderen  Programmen  üblichen  LOFT­, SWEEP­,  LATHE­ und  EX­ TRUDE­NURBS  findet  sich  in  CINEMA  4D  auch  das  sehr  leistungsstarke  Hyper­ NURBS­Objekt,  das  in  Verbindung  mit  niedrig  aufgelösten  Polygon­Objekte 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 NURBS­Objekte 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  BOOLE­OBJEKT,  das DUPLIZIEREN mit  INSTANZEN­OPTION, METABALLS und das  SYMMETRIE­OBJEKT (von links nach rechts). Anders  als  bei  ähnlich  benannten  Werkzeugen  anderer  Hersteller oder  älterer CINEMA­4D­Versionen  können  die  Ergebnisse  jederzeit  modifiziert  werden.  Dies macht  besonders  das  BOOLE­OBJEKT  und  das  SYMMETRIE­OBJEKT zu  wertvollen  Hilfen bei  der komplexen  Modellierung.  So  können  Schnittmengen  beliebiger Objekte 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 REFLEKTOR­OBJEKTEN 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  Explosions­Plugin  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  LIVE­SELEKTION  mit mehreren  Optionen gibt es neben der  RAHMEN­ SELEKTION noch eine  POLYGON­ und eine FREIHAND­SELEKTION. Erstellte  Selektionen  können  mit so genannten Wichtungen  belegt werden, auf die  dann  Deformatoren,  wie  z.  B.  Bones,  wirken  können.  Punkt­  oder  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 Sound­Objekte 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 Surround­Sound­Daten für Ihre Animationen. Töne und  Sound­Daten  können jedoch  nicht direkt  in CINEMA 4D „live"  mit der Animation abgespielt werden. Die Montage von Bildern und Tönen muss in einem separaten Programm erfolgen. CINEMA 4D liefert also nur die entsprechend abge­ mixten Sound­Daten für die gewünschte Anzahl an Kanälen.

Abbildung 1.16: Einige Rendermethoden und Optionen

über die in der Abbildung 1.16 gezeigten  Funktionen  lassen  sich schließlich die Bilder oder Animationen berechnen. Dabei haben Sie die Wahl zwischen der Berechnung 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 XZ­Ebene standardisiert sind. Das Icon für die Rotation der Ansicht  ist in  diesen  Fenstern  zwar vorhanden,  bleibt jedoch  ohne  Funktion.

Abbildung 1.17: Die Ansichtsfenster von CINEMA 4D

Über das BEARBEITEN­Menü jeder Ansicht können selektierte Objektteile oder ganze Objekte  fensterfüllend  dargestellt  werden,  ohne  auf  die  Zoom­Funktion  oder  die Lupe  zurückgreifen  zu  müssen.

Abbildung 1.18: Objekte-, Struktur- und Browser-Fenster

Neben den Ansichten sind  die  OBJEKTE­,  STRUKTUR­  und  BROWSER­Fenster sehr wichtig für die Arbeit in CINEMA 4D (siehe Abbildung 1.18). Im OBJEKTE­Fenster werden  alle  Elemente einer Szene verwaltet.  Hier können Hierarchien  angelegt sowie  Namen  und  Eigenschaften vergeben werden.  Wie  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 OBJEKTE­Fenster zusätzlich in roter Farbe geschrieben. Sie haben hier daher immer eine gute Kontrolle, ob tatsachlich das richtige Objekt ausgewählt wurde. Im STRUKTUR­Fenster haben Sie die numerische Kontrolle über Punkt­ und UVW­ Koordinaten  oder Polygon­Eckpunkte.  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 BROWSER­Fenster 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  KOORDINATEN­MANAGER 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  PROGRAMM­VOREINSTELLUNGEN beliebig wechsein. Daneben  findet sich  das  Fenster  mit  der Aufschrift  AKTIVES  WERKZEUG.  Der  Inhalt dieses  Fensters  passt  sich  laufend  den  Möglichkeiten  des  gerade  ausgewählten Werkzeugs an. Ich habe bereits mehrfach z. B. im Zusammenhang mit den Selekti­ onsmethoden oder den Modelling­Werkzeugen darauf hingewiesen.

Abbildung 1.19: Koordinaten-Manager, Aktives-WerkzeugFenster und Snap-Einstellungen Hier können Sie also z.  B.  das  MESSER­TOOL auf eine Selektion  beschränken oder die Höhe einer  Extrusion vorgeben.  Bei Werkzeugen,  die auf Wertangaben  angewiesen

sind,  wird  die  Modifikation  des  Objekts  erst  nach  dem  Betätigen  der  Schaltfläche ANWENDEN in diesem Fenster durchgeführt. Wenn Sie nicht auf exakte Wertangaben angewiesen sind, so funktionieren viele der erwähnten Werkzeuge jedoch auch in­ teraktiv  in  den Ansichten  durch  Mausbewegung. Das dritte Fenster mit der Aufschrift  SNAP­EINSTELLUNGEN  ist besonders beim maßgenauen  Konstruieren  wichtig.  Hier  können  Sie  Arbeitsebenen,  Raster  und Fangpunkte aktivieren,  um  neue  Punkte  und  Splines  an  bereits vorhandenen  Ele­ menten  in  der  Szene  einrasten  zu  lassen.  Radien  und  Bezugskoordinaten  lassen sich  hier  vorgeben.  Beim  freien  Modellieren  sollten  die  Snap­Funktionen  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 MATERIALIEN­Fenster 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 OBJEKTE­Fenster 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  SLA­Shader des Herstellers bhodilNUT komplett eigene Dialoge. Trotzdem erscheinen diese Materi­ alien im MATERIALIEN­Fenster wie ein normales CINEMA­4D­Material. Um  Ihnen  einen  Eindruck von  der prinzipiellen Arbeitsweise  mit  CINEMA 4D zu geben,  beschäftige  ich  mich  nun  im  zweiten  Teil  dieses  Kapitels  mit  dem  Abiauf einer typischen  Modellierungsaufgabe.  Ich  habe mir dazu die  Umsetzung von  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 Spline­Werkzeuge 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 Boole­Methode

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  „Boole­Methode",  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 OBJEKTE­Menü, bzw. aus dem Icon­Menü in der Kopfleiste des Layouts abrufen. Es wird sich dann eine Situation wie in Abbildung 1.23 ergeben. Standardmäßig erscheinen  neue  Objekte  immer im  absoluten  Nullpunkt  des  Welt­Koordinatensys­ 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  GRUNDOBJEKTE­KONVERTIEREN­lcon, das  ebenfalls  in  Abbildung  1.24  oben  rechts  eingeblendet  ist.  Nun  muss  nur  noch die gewünschte Betriebsart ausgewählt werden, also z. B. der PUNKTE­BEARBEITEN­ 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 OPTIMIEREN­Befehl im STRUKTUR­Menü.

Abbildung 1. 26: Selektieren der inneren Polygonkreise

Im nächsten Schritt wollen wir den Zylinder innen aushohlen, damit nur ein rohr­ f ö r m i g e s Objekt übrig und wählen Sie die  LIVE­SELEKTION aus den Selektionsmethoden aus. Sie  finden  die Selektionsmethoden im  Menü  SELEKTION oder gleich  per  Icon  in  der Kopfleiste  des Layouts. Das entsprechende Icon sieht aus wie ein blauer Mauszeiger. Um  die Art  der Selektion  weiter zu  konkretisieren, gibt  es  weitere  Einstellmö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­

VES­WERKZEUG­Fenster 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 STRUKTUR­Menü das BRÜCKE­Werkzeug 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ÜCKE­Werkzeug eine Art Röhre entstanden (siehe Abbildung 1.27).

Abbildung 1.28: Der „entkernte" Zylinder

Noch anschaulicher wird diese Verwandlung des Zylinders, wenn Sie die  Darstel­ lungsart  im  Menü  DARSTELLUNG wieder  auf  QUICK­SHADING  umschalten. Vielleicht  be­ nutzen Sie wieder das ROTIEREN­Symbol im Ansichtsfenster, um von schräg oben in den Zylinder schauen zu können. Wie Sie in der Abbildung 1.28 erkennen  können, ist der Zylinder nun zu einem dickwandigem Rohr geworden. Kücken Sie erneut einmal auf das FENSTER­Symbol rechts oben in der Titelleiste der Ansicht, damit Sie wieder das  Fenster mit den vier verschiedenen Ansichten vor sich haben. Im  nächsten  Schritt  möchte  ich  die  Wanddicke  des  Zylinders  verringern.  Dazu wechseln Sie in den PUNKTE­BEARBEITEN­Modus durch einfaches Anklicken des Sym­ bols und wählen Sie erneut das LIVE­SELEKTION­Werkzeug aus. Achten Sie weiterhin

im  Fenster  AKTIVES  WERKZEUG  darauf,  dass  die  Option  der  Selektion  nur  sichtbarer Elemente deaktiviert ist (siehe Abbildung 1.29).

Abbildung  1.29: Selektieren der inneren Punktkreise

Selektieren  Sie  in  der Ansicht von  oben  auf den  Zylinder den  kompletten  inneren Punktring, wie in der Abbildung 1.29 zu erkennen. Vergleichbar mit selektierten  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 SKALIEREN­Werk­ zeug aus und deselektieren Sie die Y­Achse durch Ausschalten des Y­lcons, wie in Abbildung  1.30  unten  gezeigt. Wechseln  Sie  daraufhin  wieder  mit  dem  Mauszeiger  in  die  Ansicht,  in  der  Sie den  Zylinder von  oben  sehen  können  und  bewegen  Sie  die  Maus  mit  gehaltener Maustaste langsam  nach  rechts  und  links. Sie müssten jetzt beobachten  können, wie die selektierten  Punkte entweder weiter nach außen zum  Rand des Zylinders, oder weiter nach innen zum Zentrum des Zylinders hin wandern. Wenn  Sie gleichzeitig einen  Blick auf den  KOORDINATEN­MANAGER werfen,  können Sie dort die Veränderungen auch numerisch verfolgen. Stellen Sie einen X­ und 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  KOORDINATEN­MANAGER  eintragen.  Nach Anklicken der ANWENDEN­Schaltfläche werden die Werte dann auf die selektierten Punkte  übertragen  (siehe Abbildung 1.30  und  1.31).

Abbildung 1.30: Skalieren der Selektion

Nach  diesem  Schema,  also  entweder durch  Arbeiten  mit  der  Maus  oder durch  di­ rekte  Eingabe  im  KOORDINATEN­MANAGER,  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 OBJEKTE­Menü oder in dem ho­ rizontalen  Icon­Menü  finden.  Wählen  Sie  dort  das  BEZIER­Spline,  das  als  einzige Spline­Art a uch Tangenten zur exakten Kurvensteuerung anbietet. Um Splines erzeugen zu können, müssen Sie sich weiterhin im PUNKTE­BEARBEI­ TEN­Modus  befinden.  Schatten  Sie  die  Darstellungsart  im  Ansichtsfenster  mit  der frontalen Ansicht, also der XY­Ansicht, auf DRAHTGITTER oder QUADER und klicken Sie dort links beginnend eine  Kurve aus fünf Punkten, wie sie die Abbildung 1.32 unten in der Einblendung zeigt.

Denken  Sie  daran,  dass  Sie Tangenten  an  Punkten  durch gleichzeitiges Ziehen  mit der Maus  bei  gehaltener Maustaste erzeugen  können.  Einfach Klicken  mit der Maus erzeugt einen Spline­Punkt ohne Tangente. Alle fünf Punkte sollten Tangenten be­ sitzen. Haben Sie aus Versehen Punkte ohne Tangenten erzeugt, ist dies auch kein Pro­ blem. Bei BEZIER­Splines lassen sich Punkte auch nachträglich noch mit Tangenten ausstatten.  In  einem  solchen  Fall selektieren Sie die entsprechenden  Punkte z.  B. mit  der bekannten  LIVE­SELEKTION  und  wählen  dann  im  Menü  STRUKTUR  unter  dem Eintrag  SPLINE  BEARBEITEN  den  Punkt WEICHE  INTERPOLATION aus. Der ebenfalls  dort zu findende  Eintrag  HARTE  INTERPOLATION  entfernt  dagegen  bei Bedarf  die  Tangente  von  einem  Punkt,  so  dass  es  zu  einer  harten  Ecke  an  dem Punkt  kommen  kann.  Sie  können  in  einem BEZIER­Spline also  weiche  Kurvenab­ schnitte mit geraden Strecken  kombinieren. Haben Sie alle Punkte gesetzt, kontrollieren Sie deren Lage im STRUKTUR­Fenster (siehe Abbildung 1.32). Ein doppeltes Anklicken eines Zahlenfeldes macht dies edi­ tierbar. Sie  können  also  die exakten  Positionen  gleich  dort eintragen  und  aus  der Abbildung übernehmen.  Sie werden  zudem feststellen,  dass  im  STRUKTUR­Fenster angeklickte  Punkte  auch  in  den  Ansichtsfenstern  aktiviert werden.  So  haben  Sie immer Kontrolle darüber, welchen  Punkt Sie  gerade  bearbeiten. Zudem  werde Sie bemerken, dass Tangenten immer nur an dem aktiven und somit selektierten Punkt sichtbar sind. Dies dient der Übersichtlichkeit.

Abbildung 1.32: Punktpositionen und Tangentensteigungen im Struktur-Fenster Wenn Sie die Punkt­Positionen entsprechend übernommen haben, versuchen Sie durch Verlängern, Verkürzen oder Verdrehen der einzelnen Tangenten einen 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 Welt­Koordinatensystems  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­ BEARBEITEN­Betriebsart  umschalten. Die Spline­Punkte werden daraufhin ausge­ blendet  und  nur die  Kurve  bleibt sichtbar. Schalten Sie dann m der horizontalen lconleiste m den VERSCHIEBEN­Modus und schalten  Sie  alle Achsen  bis  auf die Z­Achse aus  (siehe Abbildung 1.34).  Bewegun­ gen können nun nur noch entlang der Z­Achse 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  KOORDINATEN­MANAGER  im  Auge  und  stellen Sie per Mausbewegung oder durch direkte Zahleneingabe eine Z­Position von ­280 m  ein.  Die Spline­Kurve sollte sich dann  ein  gutes Stück vor dem Zylinder befinden.

Abbildung 1.34: Verschiebung des Splines vor den Zylinder

Um  aus der Spline­Kurve jetzt  ein  massives  Objekt zu  erzeugen,  verwenden  wir ein

EXTRUDE­NURBS. Rufen Sie dieses N URBS­Objekt d urch Auswählen aus dem Icon­Menü auf. Das lcon ähnelt da Klicken Sie im OBJEKTE­Fenster auf das Wort Spline-Objekt und ziehen Sie dies mit gehaltener  Maustaste  auf das  Wort Extrude-NURBS.  Durch  derartige  Drag  & Drop­Aktionen  können  Sie  Objekte  zu  Gruppen  zusammenfassen  oder  hierarchi­ sche Beziehungen  herstellen. Vor dem EXTRUDE­NURBS 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 OBJEKTE­Fenster direkt über dem übergeordneten Objekt.

Abbildung 1.35: Extrudierung des Splines mit einem Extrude-NURBS

Diese Art der Gruppierung von  Objekten  dient  nicht  nur der  Übersichtlichkeit,  son­ dern  macht viele  NURBS,  Generatoren  oder  Deformatoren  erst  funktionsfähig.  In diesem Fall haben wir dem EXTRUDE­NURBS das Spline durch die Unterordnung zu­ gewiesen.  Sie  sollten  daher  in  den Ansichten  eine  Veränderung beobachten  kön­ nen, denn das EXTRUDE­NURBS 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 EXTRUDE­NURBS im OBJEKTE­Fens­ 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  OK­Schalt­ fläche.

Abbildung 1.36: Der extrudierte Spline im Zylinder

Die Einstellungen  sorgen dafür, dass die Spline­Fläche, wie in Abbildung 1. 36, den Zylinder  komplett  durchdringt. Falls  Ihnen  die Schnittführung dann  nicht  mehr gefallt,  können  Sie  diese durch Veränderung der Spline­Tangenten noch immer verandern. Das EXTRUDE­NURBS wird sich simultan anpassen und den Veränderungen folgen. Da das Wegschneiden von  Objektteilen  nur mit vollständig geschlossenen  Ob­ jekten funktioniert, muss unser Extrude­NURBS noch etwas weiterentwickelt wer­ den. Wechseln Sie dazu in den PUNKTE­BEARBEITEN­Modus und klicken Sie das Spline­ Objekt im OBJEKTE­Fenster einmal an. Sie sollten nun wieder die Spline­Punkte in den Ansichten erkennen können. Um nun dem Spline weitere Punkte hinzufügen zu können,  reicht  kein  einfaches  Klicken  mit  der  Maus.  Dies  funktioniert  nur  direkt beim  Erstellen des Splines.  Nachtragliches Hinzufugen  muss durch Anklicken von PUNKTE HINZUFUGEN im STRUKTUR­Menü eingeleitet werden. Zudem  ist  Ihnen  sicherlich  die  Farbgebung  des  Splines  aufgefallen.  Ein  Ende des Splines ist gelb, das andere  rötlich.  Das gelbe  Ende markiert den Anfang eines Splines und somit den Punkt mit der Nummer o im STRUKTUR­Fenster. Das rötliche Ende  ist  also  der  Schluss  des  Splines  und  repräsentiert  den  letzten  Punkt  in  der STRUKTUR­Liste. Neue Punkte werden immer am Ende eines Splines angefügt. Wenn Sie also einen  Punkt hinzufügen, wird immer das rötliche Ende des Splines mit dem neuen  Punkt verbunden.

Abbildung 1. 37: Verlängerung des Splines

Sind Sie meinen Anweisungen gefolgt, sollte Ihr rotes Spline­Ende in der XY­Ansicht rechts liegen. Dort werden wir jetzt zwei neue Punkte anfügen, die diesmal nicht 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­ TRUDE­NURBS 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 Spline­Dialog, der sich durch ei­ nen  Doppelklick auf das  kleine Spline­Symbol  im  OBJEKTE­Fenster ö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  OK­Schaltfläche wird  nicht  nur der Spline  geschlossen, sondern  es werden  auch  neue verschließende  Flächen vorne  und  hinten  ergänzt. Wenn  Sie  sich  erinnern,  wir hatten  im  EXTRUDE­NURBS  die  Erzeugung von  DECKFLÄ­

CHEN aktiviert.  Diese konnten  bislang jedoch  noch nicht erzeugt werden, da keine geschlossenen  Linienzüge vorlagen. Die Vorarbeiten sind damit abgeschlossen. Wir können diese Form jetzt mit dem Zylinder interagieren lassen. Dazu benotigen wir das BOOLE­GRUNDOBJEKT, das Sie im OBJEKT­Menü oder  in  den  Icon­Menüs  abrufen  können.  Das  Symbol  ähnelt  einer blauen Kugel, aus der ein grünes Stück herausgetrennt wurde. BOOLE­Objekte  kennen  mehrere  Betriebsarten,  die  exakt  definieren,  welche Teile  der  Objekte  gelöscht  und  welche  sichtbar  bleiben  sollen.  Klicken  Sie  daher doppelt auf das kleine Symbol des BOOLE­Objekts im OBJEKTE­Fenster und schalten Sie den Modus A GESCHNITTEN B ein. Dies bewirkt, dass nur die Schnittmenge zweier Objekte sichtbar  bleibt. Die Buchstaben A und B bezeichnen dabei die Reihenfolge zweier Objekte, oder auch zweier Objektgruppen, die unter dem BOOLE­Objekt eingeordnet sind. Das A­ Objekt ist das obere, das B­Objekt das untere Objekt unter dem BOOLE­Objekt. Bei dem Modus A GESCHNITTEN B ist dies zwar nicht von Belang, aber bei den an­ deren  Betriebsarten  ­  wie  A  MINUS  B  ­  kann  eine  falsche  Reihenfolge  zu  uner­ wünschten Ergebnissen führen. Ordnen Sie jetzt nacheinander das EXTRUDE­NURBS und den  ZYLINDER per Drag & Drop auf das Wort Boole im OBJEKTE­Fenster unter dem BOOLE­Objekt ein. Wie ge­ habt klappt ein Mausklick auf das Pluszeichen vor dem BOOLE­Objekt die Hierarchie auf (siehe Abbildung 1. 39).

Abbildung 1. 40: Hinzufügen eines Zylinders

Sollte die Reihenfolge von EXTRUDE­NURBS und Zylinder bei Ihnen umgekehrt sein, so  ist  dies  bei  diesem BOOLE­Modus nicht  von  Belang.  Die  Schnittmenge  bleibt identisch. Sie können die Reihenfolge jedoch wiederum durch Drag & Drop selbst verändern und der Abbildung somit angleichen.

Hinzufügen der Öffnungen Da dies bislang so gut funktioniert hat, probieren wir die gleiche Technik nun noch­ mals aus, um die beiden Löcher in den Zylinder zu schneiden. Rufen  Sie  dazu  einen  neuen  ZYLINDER  aus  dem  OBJEKTE­Menü  oder  direkt  aus dem Icon­Menü der Grundobjekte ab und tragen Sie die Werte aus Abbildung 1. 40 in  den  ZYLINDER­Dialog  ein. Bringen  Sie  den  ZYLINDER dann  in  die  richtige  Position,  indem  Sie  ihn  auf eine Höhe von 50 m bringen.  Damit Sie dem ZYLINDER per Maus oder Eingabe den Wert Y = 50 m zuweisen können, müssen Sie zuvor in den MODELL­BEARBEITEN­Modus umgeschaltet  haben.

Abbildung 1. 41: Vom Kolben abgezogener Zylinder Dieser neue ZYLINDER soll jetzt vom Kolben abgezogen werden, um Locher in den Au­ ßenwänden zu hinterlassen. Wir benotigen also wieder ein BOOLE­Objekt. Diesmal stellen Sie jedoch den Modus auf A MINUS B ein. Ordnen Sie dann die gesamte alte BOOLE­Gruppe und den neu hinzugefügten  ZYLINDER unter dem neuen BOOLE­Objekt ein. Die logische Reihenfolge muss dabei lauten: „Kolben minus Zylinder".  Entspre­ chend der Modus­Einstellung muss also der Kolben als A-Objekt oben und der Zy­ linder als B-Objekt unter dem  Boole­Kolben 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 NURBS­Objekten lässt sich jetzt weiter zusammenfassen. Klicken Sie dazu einmal auf das oberste  BOOLE­ Objekt. Alle  Eintrage  im OBJEKTE­Fenster sollten daraufhin  rot dargestellt werden. Da  ein BOOLE­Objekt ebenfalls  ein  Grundobjekt  ist,  lasst  es  sich  mit  dem  Befehl GRUNDOBJEKTE  KONVERTIEREN  umwandeln  (siehe  Abbildung  1. 42  links).  Dies  bewirkt die  Umrechnung  der  BOOLE­  und  NURBS­OBJEKTE,  so  dass  nur  noch  so  genannte NULL­OBJEKTE  und  POLYGON­OBJEKTE übrigbleiben. NULL­OBJEKTE erkennen Sie an dem Symbol des kleinen Koordinatensystems im OBJEKTE­Fenster. Man kann sie gut zum Zusammenfassen von O bjekten zu Gruppen benutzen.  Für sich allein  gesehen, sind  sie jedoch  in  den Ansichtsfenstern  unsicht­ bar. POLYGON­OBJEKTE  dagegen  enthalten  die  sichtbaren  Polygone,  also  Punkte  und Flächen, aus denen alle Objekte zusammengesetzt sind. Diese Objektart kann ohne Probleme direkt im  PUNKTE­BEARBEITEN­  oder  POLYGONE­BEARBEITEN­Modus  weiter be­ arbeitet werden. Sie erkennen diesen Objekttyp an dem kleinen blauen Dreieck im OBJEKTE­Fenster. Jedoch sieht der Kolben noch immer recht komplex aus. Deshalb verbinden wir im  nächsten Schritt alle  NULL­ und  POLYGON­OBJEKTE zu einem einzigen Objekt.  Dazu müssen wieder alle  Objekte,  die zusammengefasst werden  sollen,  aktiviert ­  also im OBJEKTE­Fenster rot dargestellt ­ sein. Dazu  reicht das Anklicken des obersten Objekts der Hierarchie, m diesem Fall des NULL­OBJEKTS mit dem Namen Boole. 1. Wahlen Sie dann im  FUNKTIONEN­Menü  den Punkt VERBINDEN aus. Es erscheint ein neues Objekt mit dem Namen Boole im OBJEKTE­Fenster. In diesem Objekt sind jetzt alle vorher markierten Objekte enthalten. Sie können also die alte Boole. 1 ­ Gruppe komplett per  [ Symbol. Man konnte also bislang die Zeile so lesen: „Reserviere den Be­ griff link1  und  speichere  in  diesem  Begriff folgende  Information  aus  der  doc­Vari­ 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 doc­Variable 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  var­Befehl  auf,  es  werden  also  wieder  von  uns  bestimmte Begriffe  mit  Werten  gefüllt  oder  für  den  späteren  Gebrauch  reserviert.  Komplett neu ist hier nur der  GetMg()­Befehl.  Er fragt eine so  genannte Matrix ab. Eine Matrix ist  in  diesem  Fall  eine  Anordnung von  Vektoren,  also  zusammengehörenden  Wer­ ten,  wie  z.  B.  X­,  Y­  und  Z­Positionen,  oder  Verdrehwinkel  eines  Objekts.  Der GetMg()­Befehl  liefert  dabei  eine  globale  Matrix,  also  die  Werte  im  Weltsystem. Dies  macht  die  Werte  unabhängig von  der  Position  eines  Objekts  in  der  Hierarchie des  OBJEKTE­Fensters. Zusammenhängend  kann  man  also  hier  lesen:  „Reserviere  mir  den  Begriff opglobal  und speichere  in diesem  Begriff die globalen  Werte des  op­Objekts". Wie bereits erwähnt ist das op­Objekt jenes Objekt, hinter dem die  Expression steht. Ganz ähnlich  funktioniert die  dritte  Programmzeile.  Hier wird  die  Variable  l glo­ bal  mit  den  globalen  Werten  des link1­Objekts gefüllt,  das wir zuvor  über den FindObject­Befehl  definiert  haben. opglobal>SetV0(lglobal­>GetVBO): Hier begegnen wir dem eigentlichen Kern dieser Expression, denn hier wird die Po­ sition  des Link1­Objekts  auf  das Pleuel1­HyperNURBS ü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  Werte­Matrix  in  l global  mit  dem ­ > G e t V 0 ( )­Befehl der Vektor mit der Bezeichnung V0 herausgesucht. Dazu müssen Sie  wissen,  dass  die  globale  Matrix  ihre  Werte  in  vier  „Schubfächern"  sortiert  hat. V0 enthält dabei die Position des Objekts. Die „Fächer" V1 bis  V3 enthalten die Vek­ toren der lokalen X­, Y­ und Z­Achsen. Über deren Werte lässt sich die Richtung und auch die Größe des Objekts steuern. Diese interessieren uns hier jedoch nicht. Ganz ähnlich  wie der  GetV0()­Befehl funktioniert der  SetV0()­Befehl.  Hier wer­ den  die  in  der  Klammer  stehenden  Werte  in  das  V0­Schubfach  einer  Matrix  ge­ schrieben.

Zusammenhängend  können  wir also  lesen:  „Hole  die  Information  über die  Position aus  dem  lglobal­Objekt  ab  und  schreibe  diese  Information  in  die  Positionszeile des opglobal­Objekts". Wir  haben  jetzt  also  die  Positionsinformation  des  op­Objekts  durch  die  Positi­ onsinformation  des  link1­Objekts  ersetzt.  Wir  müssen  diese  Werte  nun  nur  noch auf  das  op­Objekt  übertragen.  Bislang  haben  wir  ja  nur  mit  Variablen  gearbeitet. Die  geschieht jetzt also  in  der letzten  Programmzeile: op­>SetMg(opglobal); Es gibtauch ein Gegenstück zum GetMg()­Befehl, nämlich den  SetMg()­Befehl.  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  op­Objekts". Oben  in  der  Kopfzeile  des  EXPRESSION­EDITORS  finden  Sie  die  KOMPILIEREN­Schaltflä­ che. Klicken Sie einmal darauf, um CINEMA 40 Ihre Expression testen zu lassen. 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ÜHREN­Schaltfläche betätigen. Das  Programm wird jetzt tatsächlich  ausgeführt. Auch  hier kann es  noch zu  Fehler­ meldungen  kommen, wenn z.  B.  im  FindObject­Befehl 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­ sion­Fenster  schließen.  Eine  Sicherung  ist  nicht  unbedingt  nötig,  da  COFFEE­Ex­ 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 FindObject­Befehl  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  lK­EXPRESSION. Sie fin­ den Sie im gleichen Menü wie die COFFEE­EXPRESSION im OBJEKTE­Fenster. Eine  IK­EXPRESSION  sorgt dafür, dass  das Objekt mit der Expression  laufend ver­ sucht,  die  Position  eines Ziel­Objekts zu  erreichen.  Der Schwerpunkt  liegt  hier auf „versucht", denn anders als bei unserer Expression, können Objekte hierbei durch hierarchische  Verknüpfungen  oder  Beschränkungen  durchaus  daran  gehindert werden, ein anderes Objekt zu erreichen. Die Expression versucht in solchen Fällen, die  Distanz zwischen  dem  Ziel  und  dem  Objekt  mit der  Expression  möglichst  klein zu gestalten. Rufen Sie eine solche IK­EXPRESSION für das Achse1­Objekt in der Pleuel1­Gruppe auf.  Klicken Sie doppelt auf das  kleine  Fadenkreuz, das Symbol dieser Expression, und tragen Sie  in den  Dialog den  Namen  des Zielobjekts ein, dessen  Position  mö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  Target­Objekt  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 COFFEE­EXPRESSION des Pleuel­HyperNURBS auf das e ntspre­ chende  Kolben­HyperNURBS.  Der  Kolben  wird  daraufhin  ebenfalls  die  Position oben  an  der Kurbelwellen­Achse  einnehmen.  Dort wollen  wir ihn  jedoch  nicht  ha­ ben. Vielmehr sollte er die Position des Achse­Objekts in der Pleuel­Gruppe einneh­ men. Klicken Sie also doppelt auf das COFFEE­EXPRESSION­Symbol hinter dem Kol­ ben  und verändern Sie den  Namen in  dem  FindObject­Befehl  auf „Achsel", wie es Abbildung 2. 59 zeigt. Ich habe dort die Namen der Variablen angepasst. Dies ist 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  COFFEE­Expressions  und  der  IK­Expression  übertragen Sie jetzt per [Strg]­/[Ctrl]­Drag mit der Maus auf die entsprechenden  Elemente der beiden  anderen  Pleuelstangen  und  Kolben. Jetzt verstehen Sie auch, weshalb die Achsen  unterschiedliche Namen haben mussten.  Die Expressions hätten sonst nicht feststellen  können,  welche  Position  maßgeblich  sein  soll.  Die  einzige  Arbeit besteht jetzt noch in der Korrektur aller Bezugsnamen in den kopierten Expressi­ ons.  So  müssen  die  Zielnamen  in  den  kopierten  IK­EXPRESSIONS  in Target2  bzw. Targets umgeändert werden. Auch die FindObject­Namen in den COFFEE­Expressi­ ons  müssen  auf Link2, Link3, sowie Achse2  bzw. Achse3 verändert  werden. Jede Pleuel/Kolben­Gruppe hat schließlich eigene Bezugsobjekte. Haben  Sie  alle  Expressions  richtig zugeordnet  und  auch  die  korrekten  Namen eingetragen, sollte sich Ihnen ein  Bild wie in Abbildung 2. 60 bieten.  Das 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  COFFEE­Expression  realisieren. Dazu  sind  nur zwei  weitere  Befehlszeilen  in  den  Expressions  der Kolben  nötig (siehe Abbildung 2. 61).

Abbildung 2. 61: Ergänzen der Kolben-Expression

Zuerst  definieren  wir  eine  zusätzliche  Variable,  die  ich  hier  rotation1  genannt habe.  Dieser  Variable  übertragen  wir  alle  Informationen  des Target1­Null­Objekts. Die Zeile laute! also: var  rotation1=doc­>FindObject  („Target1"); Die  übrigen  Befehlszeilen  bleiben davon  unberührt.  Nur am  Ende  des  Programms fügen wir noch eine weitere Befehlszeile ein: op­>SetRotation  (rotation1­>GetRotation()); Hier begegnen  uns zwei neue Befehle,  nämlich  SetRotation()  und  G e t R o t a t i o n ( ) . Wie man schon fast aus den Namen erschließen kann, werden damit die 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  op­Ob­ 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  Kolben­Expressions  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 Target­Null­Objekte  aus den Link­Gruppen heraus und platzieren  Sie diese z. B. oberhalb des Kurbelwellen­HyperNURBS im OBJEKTE­Fenster. Dies ist nö­ tig,  da  die  Target­Objekte  ansonsten  bei  einer  Drehung der Kurbelwelle  mitbewegt würden. Sie sollen jedoch als fixe Bezugspunkte für die Ausrichtung der Kolben  und Pleuel dienen.

Abbildung 2. 62: Schlüsselpositionen der Target-Objekte

Aktivieren Sie jetzt das Polygon­Objekt der Kurbelwelle und drehen Sie dies um die lokale Z­Achse. Drehen Sie die Weile soweit, bis die Kolben der einen Seite den kleinsten  Abstand  von  der Welle  haben.  Bei  mir  war  dies  bei  45°  der  Fall  (siehe Abbildung  2. 62  links).  Aktivieren  Sie  nacheinander  die Target­Objekte  und  ver­ schieben Sie diese entlang deren Y­Achsen soweit, dass diese knapp unterhalb der jeweiligen Achse­Objekte  liegen.  Dies  sorgt  dafür,  dass  die  Pleuel  gezwungen werden, eine möglichst exakte Neigung von +45° bzw. ­45° zu der Kurbelwelle ein­ zunehmen.

2. 6  Key­Frames Damit  diese  Position  gespeichert  wird,  benutzen  wir  so  genannte  Key­Frames. Diese  Key­Frames sind  nichts anderes als gespeicherte  Informationen  eines Ob­ jekts zu einem definierten Zeitpunkt. Sie können selbst bestimmen, welche Infor­ mationen in einem Key­Frame gespeichert werden sollen. Dazu dienen die kleinen Symbole unten rechts am Bildschirmrand des Layouts. Sie finden dort verkleinerte Bewegen­, Rotieren­ und Skalieren­Icons, wie noch andere Icons, deren Funktionen jedoch hier noch nicht interessant sind. Sie können diese Icons durch Anklicken ak­ tivieren und auch wieder deaktivieren. In unserem Fall benötigen wir für die Target­Objekte  nur die Information bezüg­ lich der Position. Deaktivieren Sie also alle Icons außer dem kleinen Bewegen­lcon. Nun  muss  der  Zeitpunkt  bestimmt  werden,  an  dem  die  Information  gespeichert werden soll. Dafür ist der ZEIT­MANAGER mit seinem Zeitschieber da, der gleich links von den kleinen Key­Frame­lcons liegt. Stellen Sie diesen auf „o B".  Damit wird das Key­Frame bei Aufnahme direkt an den Anfang unserer Animation, nämlich in das Bild o gesetzt. Aktivieren Sie jetzt eines der verschobenen Target­Null­Objekte und klicken Sie auf den kleinen roten Kreis bei den Key­Frame­Symbolen. Sie haben da­ mit ein  Positions­Key­Frame für das  Target­Objekt für den Zeitpunkt o B aufgenom­ men.

Klicken  Sie  dann  auf das  nächste  bereits  verschobene  Target­Objekt  und  nehmen Sie wieder durch Anklicken  des  roten  Kreises ein  Key­Frame  auf. Wiederholen  Sie dies für das letzte Target­Objekt. Im  letzten  Schritt  muss  nun  noch  die  Drehung  der  Kurbelwelle  gesichert  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­ Frame­lcons das  Rotations­Symbol,  klicken  Sie  einmal auf das Kurbelwelle-Objekt im OBJEKTE­Fenster und klicken Sie dann auf den bekannten Aufnahmeknopf für Key­Frames.  Damit  ist  die  derzeitige  Rotation  der  Kurbelwelle  ebenfalls  zum  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  ZEIT­MANAGERS auf Bild  24, also auf 24 B.  Falls noch  nicht ge­ schehen, wechseln Sie in den MODELL­BEARBEITEN­Modus und drehen Sie die Kurbel­ welle um die lokale Z­Achse 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  Key­Fra­ mes aktiviert haben, können Sie wieder den Key­Frame­Aufnahmeknopf betätigen. Eine volle Umdrehung der Kurbelwelle ist somit in Key­Frames festgehalten. Wir können uns jetzt um die Target­Objekte kummern. Diese dürfen, um jederzeit mö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 ZEIT­MANAGERS langsam wieder in Richtung Bild o. Sie sollten dabei bereits die Rotation der Kurbelwelle beobachten können. Stoppen Sie an der Stelle, an  der  die  Target­Objekte  am  weitesten  von  den  Achsen­Objekten  entfernt  sind. Dies  ist  bei  mir  bei  einem  Kurbelwellenwinkel von  225° der Fall,  also  exakt  in  der Mitte der bislang von  uns festgehaltenen  Bildersequenz.  Da  nun wieder nur  Positi­ onen abgespeichert werden sollen, aktivieren Sie ausschließlich die Positionsinfor­ mation bei den  Key­Frame­lcons und bewegen Sie das erste Target­Objekt entlang dessen Y­Achse wieder auf eine Position  knapp unterhalb der dazugehörigen  unte­ ren Pleuel­Achse (siehe Abbildung 2. 62 rechts). Nehmen Sie diese Position mit den Aufnahmeknopfauf. Wiederholen Sie dies mit den übrigen zwei Target­Objekten.

Abbildung 2. 63: Nötige Einstellungen in der Zeitleiste

Um nun einen  Überblick über alle Key­Frames zu bekommen, gibt es in CINEMA 40 die sogenannte ZEITLEISTE. Dies ist ein gleichnamiges Fenster, das Sie aus dem  FENS­ TER­Menü  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 Positions­Spuren  hinter  den Target­Objekten  und  die  Winkelspur  hinter  dem Kurbelwelle-Objekt.  Die  kleinen  grauen  Kästen  auf den  Spuren  sind  die  von  uns  ge­ setzten Key­Frames. Durch einen Doppelklick darauf können die in den Key­Frames gespeicherten Werte betrachtet und auch verändert werden. Ebenso  lassen  sich  die  Key­Frames  mit der Maus verschieben, falls ein anderer Zeitpunkt für das  Key­Frame  gewünscht wird.  Die  grauen  Balken  unter den  Key­ Frames sind  die  SEQUENZEN.  Sie  können sich  diese vielleicht als Trägermaterial  für die Key­Frames vorstellen. Sequenzen  können bestimmte Längen  haben  oder auch automatisch wiederholt werden. Alle  Key­Frames auf dieser Sequenz werden  dann ebenso  wiederholt.  Man  spart sich  damit die Aufnahme  periodisch  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 Key­Frames hin­ und herpendeln müssen. Klicken  Sie  also  doppelt  auf den  grauen  Sequenzbalken  hinter  dem  obersten Target­Objekt. Es öffnet sich ein Fenster, wie es ebenfalls in Abbildung 2. 63 zu 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 WEICH­Option. Diese  sorgt dafür, dass  die  Wiederholungen  der Sequenz  und  damit  auch  die  Wiederholung  der  Key­ Frames  ohne  sichtbaren  Sprung erfolgen.  Die  Key­Framefreie Zone  zwischen  dem letzten  Key­Frame  und  dem  Ende  der Sequenz  bei  Bild  24 wird  also  dafür genutzt, die  Bewegung  wieder  auf den  Stand  des  ersten  Key­Frames  der  Sequenz  zu  brin­ gen.  In  unserem  Fall wird  sich  dadurch  also das  Target­Objekt wieder zur  Position des  ersten  Key­Frames  hinbewegen.  Aktivieren  Sie  diese  weiche  Wiederholung samt der Verkürzung der Sequenz auf 24  Bilder für alle drei  Target­Objekte. Leider  können  wir die  Drehung der  Kurbelwelle  nicht  so  einfach  durch  weiches Wiederholen  der Rotations­Sequenz automatisieren. Wurden wir die Sequenz auch hier verkurzen  und die Wiederholung aktivieren,  würde die Weile sich  nur zwischen den Winkeln 45°  und  405° hin­ und herbewegen.  Es fände keine fortlaufende  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  Rotations­Key­ 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  Target­Objekte  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  Key­Frame mit einer weiteren Rotation um 360° an. Wenn  Sie  den  Zeitschieber  nun  langsam  von  Bild  o  nach  rechts  verschieben, sollten  Sie  die  Rotation  der  Kurbelwelle  mit  der  entsprechenden  Bewegung  von Pleuel und Kolben beobachten können. Die  Animation  ist  somit vorerst  abgeschlossen  und  Sie  könnten das Objekt  mit Materialien  belegen,  eine  geeignete  Kameraposition wählen  und  dann  den  Film  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 Link­Objekte an der Kurbel­ welle  übernehmen.  Sie  bleiben  dadurch  auf  den  Achsen  der  Kurbelwelle,  auch wenn sich diese dreht. Der  Pleuel  wird  dabei  durch  die  IK­EXPRESSION  der  untergeordneten Achse  auf ein Target­Objekt außerhalb ausgerichtet. Die Kolben übernehmen die Position der Achse­Objekte aus den Pleuel und fol­ gen  daher der Bewegung der Pleuel exakt nach.  Zudem  orientieren  Sie  sich  an  der Neigung der Target­Objekte und werden so bezüglich ihrer Rotation fixiert. Wie Sie hier ansatzweise gesehen  haben, sind  Expressions, egal ob selbst 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  BEWEGEN­Werkzeug auf die Y­Achse.  KONVERTIEREN Sie den Zylinder zu einem  POLYGON­OBJEKT 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 Welt­Nullpunkt liegt und die Höhe exakt 200 m be­ trägt,  sollte  das  Koordinatensystem  also  genau  bei  einer Welt­Y­Koordinate  von  ­ 100 m liegen. Sie können diesen Wert also auch direkt in den  KOORDINATEN­MANAGER eintragen.

Abbildung 3. 4: Verschieben des lokalen Koordinatensystems des Zylinders

Dieses Verschieben  des  lokalen  Koordinatensystems  ist deshalb  so wichtig, da es nicht nur Drehzentrum  eines  Objekts ist ­ wie  wir bereits  bei dem  Kolben  und  dem Pleuel gesehen haben ­, sondern auch Startpunkt für Größenveränderungen. Da das untere Ende des Zylinder auch während des Verbiegens und Streckens auf der Stufe verbleiben  muss,  darf sich  die  Position  des  Bodens  beim  Skalieren  also vorerst  nicht verändern.  Die  Losung lautet,  den  Boden  als Startpunkt für die  spä­ tere  Skalierung  zu  definieren  und  damit  das  Koordinatensystem  dorthin  zu  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  Biege­Deformator wie  geschaf­ fen. Sie finden das sogenannte  BIEGE­OBJEKT im gleichen Menü wie den zuvor schon benutzten  FORMEL­DEFORMATOR  und  das  WICKELN­OBJEKT. Doppelklicken Sie auf das Symbol des BIEGE­OBJEKTS im  OBJEKTE­Fenster und übernehmen Sie die Einstellungen aus Abbildung 3. 5. Der MODUS im BIEGE­OBJEKT definiert dabei, welcher Bereich des Objekts durch das BIEGE­OBJEKT verbogen wer­ den  soll.  Die  BEGRENZT­Einstellung  sorgt dafür,  dass  nur der  in  den  Einflussbereich des  Deformators  hineinragende  Teil  des  Objekts  verbogen  wird.  Der  Deformator wirkt dann je nach Lage im Objekt wie ein Scharnier. Der KRÜMMUNG­Wert steuert über einen Winkel die Starke des Biegens. Ein Wert von 180° sorgt also dafür,  dass ein  Objekt zu einem  „U" verbogen wird.  Der RICH­ TUNG­Wert bezieht sich auf die Richtung, entlang derer gebogen wird. Da Sie diese Werte auch direkt in den Ansichtsfenstern über das Verschieben des Anfassers an dem BIEGE­OBJEKT steuern  können,  wird  Ihnen  das  Zusammenspie!  der  Werte schnell verstandlich.

Abbildung 3. 5: Parameter des Biege-Objekts

Bevor wir jedoch  etwas verbiegen  können,  muss  das  BIEGE­OBJEKT erst an  die rich­ tige Stelle gebracht werden.  Dies gilt sowohl für das  OBJEKTE­Fenster wie auch für die Position in den Ansichten. Deformatoren  wirken im  Allgemeinen  nur auf übergeordnete  Objekte. Wir könn­ ten  das  BIEGE­OBJEKT  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  BIEGE­OBJEKT auch mitbewegt. Wir werden zu  einem  spateren  Zeitpunkt  dieses  Beispiels  erkennen,  welche  katastrophalen Folgen  das  nach  sich  ziehen  wurde.  Glauben  Sie  mir  bis  zu  der  entsprechenden Stelle in diesem Arbeitsbeispiel einfach, dass dies nicht sehr wünschenswert wäre. Vor  unlösbare Aufgaben  stellt  uns  dies  hier jedoch  nicht,  denn  auch  für solche Zwecke sind  NULL­OBJEKTE sehr gut zu gebrauchen. Wenn wir das  BIEGE­OBJEKT einem NULL­OBJEKT unterordnen,  m dem zudem ein  POLYGON­OBJEKT liegt, wird das  POLYGON­ OBJEKT verformt,  als  ob man  den  Deformator direkt dem  POLYGON­OBJEKT untergeord­ net  hatte. Von Vorteil ist jedoch, dass wir das  POLYGON­OBJEKT frei bewegen  können,  ohne das BIEGE­OBJEKT mit zu verschieben. Es ist schließlich dem NULL­OBJEKT 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  BIEGE­OBJEKT,  ZYLINDER  und  NULL­OBJEKT sehen  Sie  in Abbildung  3. 6.  Die  gleiche Abbildung  dokumentiert  die  wünschenswerte  Position für das  BIEGE­OBJEKT. Es bedeckt damit den kompletten oberen Teil des Zylinders. Wenn  Sie  das  BIEGE­OBJEKT positionieren  wollen,  denken  Sie  daran,  wieder  in den MODELL — BEARBEITEN — Modus zurückzuschalten. In diesem Fall funktioniert es zwar auch  im  LOKALE­KOORDINATEN­BEARBEITEN­Modus, aber es ist besser, Sie gewö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  BIEGE­OBJEKT 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  Key­Frames 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 Aufnahme­lcon. Sie finden dies links von den Key­Frame­lcons in Form einer kleinen roten Kugel.

Komplette  Hierarchie

Bewegen  ——'  Skalieren—! 

Point  Level Animation

l— Parameter ­Rotieren

Abbildung 3. 7: Key-Frame-lcons

Verschieben Sie den Zeitschieber auf Bild 15, offnen Sie den Dialog des BlEGE­OB­ JEKTS durch einen Doppelklick auf d essen Symbol im OBJEKTE­Fenster und verandern Sie  die  Einstellungen  dort entsprechend Abbildung 3. 8.  Schließen  Sie den  Dialog über  die  OK­Schaltfläche  und  nehmen  Sie  wiederum  ein  PARAMETER­Key­Frame  für das  BIEGE­OBJEKT  auf.

Wenn  Sie jetzt mit gehaltener Maustaste den Zeitschieber langsam  zwischen  Bild  o und  Bild  15  hin­ und  herbewegen,  können Sie die  Krümmung des Zylinders  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  BIEGE­OBJEKT den  ZYLINDER um ein kurzes Stück überragt.

Abbildung 3. 8: Gebogener Zylinder

Darum  werden  wir  uns  gleich  noch  kümmern.  Werfen  wir  zuvor  in  Abbildung  3. 9 noch einen Blick auf die Zeitleiste, die Sie ebenfalls schon aus Kapitel 2 kennen. Sie erkennen dort, dass durch die Aufnahme der Key­Frames automatisch eine Sequenz  entstanden  ist.  Damit  ist  der  graue  Balken  gemeint,  auf dem  die  Key­ Frames liegen. Vor der Sequenz steht der Name des  Key­Frame­Typs.  in  unserem Fall sind es  PARAMETER­Key­Frames. Es ist also nicht möglich, beliebige Key­Frames auf einer Sequenz zu mischen. Jede Art hat eine eigene Sequenz mit eigener Benennung. Sie  werden  dies  spätestens  bemerken,  wenn  wir jetzt  GRÖSSE­Key­Frames  für den Zylinder erzeugen.

Abbildung 3. 9: Animation der Biegung über Key-Frames

Bewegen  Sie dazu  den  Zeitschieber wieder auf Bild  o zurück,  aktivieren  Sie  den  Zy­

linder im OBJEKTE­Fenster und schalten Sie auf die Aufnahme von GRÖSSE­Key­Frames um. Alle anderen auf die rote Aufnahmekugel. Verschieben Sie dann den Zeitschieberauf Bild 15  und wiederholen Sie die Aufnahme eines GRÖSSE­Key­Frames. Wie Sie in Abbildung 3. 10 erkennen  können,  ist hinter dem Zylinder eine weitere Sequenz  mit  der  Benennung Größe  aufgetaucht.  Auf  dieser  Sequenz  finden  sich nun  die  beiden  neuen  Key­Frames,  die Sie soeben aufgenommen  haben. Ebenfalls eingeblendet in der Abbildung 3. 10 sehen Sie als Erinnerung die akti­ vierte  OBJEKT­BEARBEITEN­Betriebsart.

Abbildung 3. 10: Key-Frames für die Größe des Zylinders Die Aufnahme von GRÖSSE­Key­Frames ist heikel, da in diesen Key­Frames nicht die Abmessungen eines Objekts gespeichert werden, sondern die Längen der 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 SKALIEREN­Werkzeug 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 — Werk­zeu sen  verlängert  oder  verkürzt.  Die  Punkte  des  Objekts  bleiben  an  Ort  und  Stelle, werden jedoch durch die verzerrten Achsen an anderen  Positionen eingezeichnet. Das Ergebnis ist optisch also völlig identisch. Der  große  Unterschied  besteht  darin,  dass  sich  nur  die  Veränderung  der Achsenlängen  in  Form von  Key­Frames  animieren  lässt. Will  man  die Größe eines

Objekts also über die Zeit animieren, muss die Skalierung des Objekts im OBJEKTE — B Fälle,  wegen  denen  ich  Sie  um  Aufmerksamkeit  in  Bezug  auf  die  verwendete Betriebsart gebeten habe. ) Bei der Aufnahme der ersten beiden GRÖSSE­Key­Frames war es nicht so 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­ REN­Werkzeug mit Begrenzung auf die Y­Achse für den Zylinder. Bewegen Sie den Zeitschieber auf Bild  20  und skalieren  Sie den Zylinder solange,  bis dessen  oberes Ende  die  nächste Treppenstufe  erreicht.  Wie  Sie  Abbildung 3. 11  entnehmen  kön­ nen, ist dies in  unserem  Beispiel bei einer Y­Größe von 2. 3  m der Fall. Nehmen  Sie hier wieder ein  GRÖßE­Key­Frame für den  Zylinder auf. Wie Sie erkennen können, ergibt sich nun, da der Zylinder das BIEGE­OBJEKT 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 BIEGE­OBJEKT 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­ matoren­Drawing­Pipeline 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. 3­mal 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  Biege­Deformator 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  PUNKTE­BEARBEITEN­Modus  und  klicken  einen  beliebigen  Punkt  auf der  oberen Deckfläche des Zylinders an. Werfen Sie einen Blick in das STRUKTUR­Fenster und 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 Y­Wert der  Position mit  dem  Skalierungsfaktor  der  entsprechenden  Achse  multiplizieren.  In  unserem Fall ergibt dies  2. 3 x 200, also 460. Die tatsächliche  Höhe des  Punkte  beträgt also 460  m,  und  nicht  nur 200 m.  Da wir jedoch auch den Ursprung des lokalen Koordinatensystems verschoben haben, kommt  ein weiterer  Faktor hinzu. Wir müssen  die  Position  des  Objekts  im  Raum noch zu dieser Punktkoordinate hinzuzählen. Bei einer Y­Position des Objekts von ­ 100  m  ergibt sich  daher ein  endgültiger Wert von  360  m  als Y­Wert  für den  oberen Zylinderrand.

2. 3 * 200 = 460 460­100 = 360

Abbildung 3. 13: Umrechnung von Objekt- in Welt — Koordinaten

Dies  hätten  wir  auch  einfacher  erfahren  können.  Diesen  Zwecken  dient  die  Um­ schaltmöglichkeit zwischen  OBJEKT­  und  WELT­System  im  KOORDINATEN­MANAGER. Se­ lektieren  Sie  wieder  einen  Punkt  auf  der  oberen  Deckfläche  des  Zylinders  und wechseln Sie im KOORDINATEN­MANAGER auf das WELT­System. 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 460­100 = 360

Abbildung 3. 14: Expression für die automatische Anpassung der Größe bei Positionsveränderung

Vergeuden wir jetzt keine weitere Zeit und  beschäftigen uns mit der Expression  Ru­ fen Sie eine neue COFFEE­EXPRESSION für den Zylinder auf und tippen Sie dort die Programmzellen aus Abbildung 3 14 ein Wie  gewohnt  stelle  ich  Ihnen  die  Befehlszeilen  hier  noch  einmal  detaillierter vor var  Pos  =  op  >GetPosition(), Der  v a r  Befehl  sollte  Ihnen  bekannt  vorkommen  Damit  werden  Variablen  reser viert oder auch  gleich  mit Werten  gefüllt  In  diesem  Fall sorgt op  >GetPosition(), dafür, dass die Position des Zylinders, der sich  hinter der Abkürzung op verbirgt, m der Variable Pos gesichert wird In den nächsten beiden Zeilen wird zuerst die Variable Ze  t mit der Zeit gefüllt, an der zum Zeitpunkt des Aufrufs der Expression der Zeitschieber steht  Danach er halt  die  Variable  Bild  die  Bildnummer,  die  sich  aus  der  eingestellten  Zeit  ergibt Diese etwas umständliche Abfrage ist notig, da wir m CINEMA 40 die Anzahl der 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 Z­Größe

Bislang  haben  wir  immer  alle  drei  Komponenten  eines  Vektors  m  einer Variablen gespeichert  Ein Beispiel dafür ist die Pos Variable m dieser Expression  Obwohl wir nur das Wort  Pos  mit dem  GetPosition()  Befehl definiert haben, so  enthalt die 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 Z­Anteil des Wert  Vektors i st Kehren wir zu  der Befehlszeile zurück  Wie  Sie  dort  m  dem  vector()  Befehl er kennen  können,  sind  der X  und  der Z Anteil des Vektors  mit dem  Wert  i  besetzt Dies bedeutet m unserem Fall, dass der Zylinder weder m dessen X­ noch m dessen Z Richtung skaliert wird  Die Große bleibt dort m jedem  Fall konstant, so  wie wir den Zylinder modelliert haben  Der Y­Anteil des Vektors ist jedoch mit einer kurzen Formel definiert, die wie folgt lautet (360  Pos  y ) / 2 0 0 Diese  Beziehung zwischen  den  Werten  für die  Bestimmung der Hohe  des  Zylinders ergab  sich  aus  der  Berechnung,  die  wir  m  Abbildung  3  13  nachvollzogen  haben Dort hieß  es  200  (Y­Koordinate  der oberen  Punkte)  x 2  3  (Y Große  beim  Erreichen der 2 Treppenstufe)­100 {Start Y Position des Zylinders) = 360 (Welt Y­Koordinate der oberen  Punkte des Zylinders) Lost  man  diese  Beziehung  nach  der Y Große  auf,  so  erhalt man  obige  Formel Die Große wird durch die Variable Pos  y laufend so angepasst, dass der obere Rand des Zylinders an  Ort und  Stelle verbleibt. Nach dem Kompilieren und Ausfuhren der Expression können Sie den EXPRES­ SION­EDITOR wieder schließen  Setzen Sie zum Zeitpunkt 20 B ein POSITION Key Frame für den Zylinder,  und verschieben  Sie das zweite  GRÖSSE  Key  Frame  des 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  GROSSE­Key  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 Y­Achse.  Sie sollten  den  Biege­Deformator 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 BIEGE­OBJEKT wandert und der Zylinder schließlich wieder seine ursprungliche  Form annimmt. Behalten  Sie  bei  der  Bewegung  die  Werte  im  KOORDINATEN­MANAGER  im  Auge. Dort sollten Sie bei der Position stoppen,  bei der der Zylinder wieder eine  Y­Größe von  i  eingenommen  hat.  Der  Zylinder  ist  dann  wieder  auf  die  Startgroße  ge­ schrumpft. Wie Sie in Abbildung 3. 16 sehen, ist dies bei einer Y­Position von 160 m der Fall. Dort können Sie auch sehr gut erkennen, wie das BIEGE­OBJEKT nicht nur die Richtung,  sondern  auch  die  Position  verändert  hat.  Durch  die  vier  rechtwinkligen Ecken symbolhaft angezeigt, sehen Sie die tatsächliche Position des Zylinders. 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  BIEGE­OBJEKT, da  sich  der Zylinder jetzt am ehemals unteren  Ende  biegen  muss.

Rufen Sie also wieder ein  BIEGE­OBJEKT ab und übertragen Sie die Einstellungen aus Abbildung 3. 17. Größe  und Modus entsprechen dabei komplett dem ersten  BIEGE­ OBJEKT. Es soll schließlich auch ebenso arbeiten. Damit auch dieses BIEGE­OBJEKT auf den Zylinder wirken kann, müssen Sie es in die gleiche Gruppe einordnen. Versu­ chen Sie es zuerst mit der Anordnung, die die Abbildung 3. 17 zeigt, also zuerst das alte dann das neue BIEGE­OBJEKT.

Abbildung 3. 17- Zweites Biege — Objekt für eine weitere Bewegungsphase des Zylinders

Abbildung 3. 18: Relative Lage des zweiten Biege-Objekts

Drehen Sie das neue  BIEGE­OBJEKT um 180° um dessen Z­Achse und verschieben Sie es auf eine Hohe von  230 m. Diese  Einstellungen können  Sie natürlich auch direkt per Zahleneingabe  im  KOORDINATEN­MANAGER  übernehmen  (siehe Abbildung  3. 18). Wie  Sie  in  der Abbildung sehen  können,  liegt  bei  ausgeschalteten  Deformatoren das untere Ende des Zylinders komplett im n euen BIEGE­OBJEKT. Wenn  Sie  nun  die  Deformatoren  wieder  aktivieren  und  den  orangen  Anfasser des  neuen  BIEGE­OBJEKTS  in  einem  Ansichtsfenster  verschieben,  passiert  etwas Merkwürdiges.  Der Zylinder scheint um einen  entfernten  Punkt zu  rotieren.  Es 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  NULL­OBJEKT als erste Defor­ mation  auftaucht.  Erst  danach  findet  die  Biegung  des  neuen  BIEGE­OBJEKTS  statt. Durch die falsche Reihenfolge wurde der Zylinder also aus dem Wirkungskreis des folgenden  Deformators  „herausgebogen". Drehen  Sie deshalb die  Reihenfolge im  NULL­OBJEKT um. Zuerst muss das neue BIEGE­OBJEKT eingeordnet sein, dann das alte, jetzt funktioniert alles nach  Plan, denn  das  neue  BIEGE­OBJEKT ist zu  Beginn  der Animation ja  noch  in  neutraler 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  BIEGE­OBJEKTS 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 PARAMETER­Key­Frame für das neue BIEGE­OBJEKT und wech­ seln Sie zu Bild 37. Setzen Sie dort ebenfalls ein  PARAMETER­Key­Frame für das BIEGE­ OBJEKT. Diesmal jedoch  mit einer 180°­Krümmun g in Richtung o°. Da das neue  BIEGE­OBJEKT um 180° um die Z­Achse 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  BIEGE­OBJEKT  der  Fall  war.  Da  der  Zylinder jedoch ebenfalls  durch  das  erste  BIEGE­OBJEKT  um  180°  gedreht  wurde,  gleicht  sich  dies wieder aus,  und die  Krümmung erfolgt wieder in die  richtige  Richtung,  nämlich  der dritten  Stufe  entgegen.

Diese Zusammenhänge werden  recht schnell deutlich, wenn  Sie das zweite  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 Y­Achse nach unten  und Sie bemerken, wie sich dessen oberes Ende der dritten Stufe zuneigt, ohne den Halt des Zylinders auf Stufe  2 zu gefährden. Diese  Bewegung ist  genau  das,  was wir brauchen.  Verschieben  Sie  den  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 Positions­Key­Frame für den Zylinder fest (siehe Abbildung 3. 22).

Abbildung 3. 22: Key-Frame für die Position des Zylinders setzen

So hilfreich wie die COFFEE­EXPRESSION bislang war, so störend wird sie nun, denn das bislang fixierte Ende des Zylinders muss sich  nun von der zweiten Stufe lösen. Dies stellt uns aber auch vor keine größeren  Probleme, denn wir haben die  Expres­ sion ja bereits einmal zuvor auf einen Bereich begrenzt. Durch die if­Abfrage wird die COFFEE­EXPRESSION erst ab Bild 21 aktiv. Dort müssen wir also auch die Deakti­ vierung vornehmen: if  (Bild>20  U  Bild  FindObject  („Biege­Obj"); op  ­>  SetMg  (bieger  ­>  GetMg()); Die erste Zeile speichert die Daten des Objekts Biege-Obj in die Variable bieger. Die zweite Zeile sucht aus der Variablen bieger  die globale Matrix heraus, die Position, Große und Winkel enthalt, und überträgt diese auf das op­Objekt. Sie werden sich vielleicht fragen, was das Biege-Obj nun ist, da bislang kein 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  BIEGE­OBJEKT wir  meinen.  Expressions  gehen  nämlich  nur nach dem vergebenen Namen vor. Der vergebene Name ist natürlich völlig willkürlich gewählt. Hauptsache die Namen unterscheiden sich von denen der  Biege  — Objekte bei der Helix, damit es dort nicht zu Verwechslungen kommen kann.

Ergänzen  Sie  also  die  in  Abbildung  3. 34  abgebildeten  Expressions  für  die  beiden BIEGE — OBJEKTE der HELIX. Achten Sie darauf, dass die BIEGE — OBJEKTE auch tatsächlich die  korrekte  Position  übernehmen.

Abbildung 3. 35: Die Spirale folgt jetzt den Deformationen des Zylinders.

Im  Ansichtsfenster sehen  wir jetzt,  dass  sich  die  Spirale  nun  ebenso wie zuvor der Zylinder verformt  {siehe Abbildung 3. 35). Es bleibt nun noch die Deaktivierung der beiden alten BIEGE — OBJEKTE. Klicken Sie dazu einmal auf die grünen Haken hinter den Deformatoren. Damit lassen sich ein­ zelne  Deformatoren  ein­  und  ausschalten,  ohne gleich  alle  Deformatoren  in  einer Szene über die Drawing­Pipeline ausschalten zu müssen. Zudem sollten  Sie  die Zylindergruppe  über  rote  Punkte  dahinter  unsichtbar  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 Morph­Sequenz  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 RING­Objekte, die  Sie  ebenfalls  im  OBJEKTE­Menü  finden.  Wir benötigen  davon  vier Exemplare  gleicher Größe.  Einziger  Unterschied  zwischen  den  Ringen  ist dabei, dass einige die +Y­ und einige die +X — Richtung benutzen (siehe Abbildung 3. 38). Dies  sorgt  dafür,  dass  zwei  Ringe  waagerecht  und  zwei  senkrecht  stehen.  Man hätte dies  natürlich  auch  durch  nachträgliches  Drehen der Objekte  erreichen  kön­ nen. Übernehmen  Sie  ebenfalls  die  entsprechenden  Positionen,  wie  sie  Abbildung 3­38  zeigt.

Abbildung 3. 37: Drei Zylinder konfektionieren und positionieren

Abbildung 3. 38: Vier Ringe konfektionieren und positionieren

Das  Gerät  soll  noch  eine  Art Ausleger  bekommen, auf dem  zwei  Würfel  befestigt sind.  Einer der Würfel soll beweglich auf dem  Ausleger gleiten  können,  der andere als Anschlag dienen. Wie  das funktionieren kann, zeige ich später. Übernehmen Sie vorerst die  Daten  aus Abbildung 3. 39 für den  Zylinder  und  die  beiden Würfel.

Abbildung 3. 39. ­ Zylinder und Würfel hinzufugen

Damit  ist  das  Gerat  komplett  und  sollte  sich  wie  in  Abbildung  3. 40  präsentieren. Bevor wir die Objekte nun nach Baugruppen sortieren und hierarchisch ordnen, fü­ gen  wir noch  einen  Spline  hinzu,  der  das  erwähnte  Zugseil  darstellen  soll.

Abbildung 3. 40: Das Gerat mit seinen mechanischen Baugruppen

Wahlen Sie dazu aus den Splines den AKIMA­Spline aus und beginnen Sie in der XY­ Ansicht  ­  unten  am  Boden  des  untersten  Zylinders  beginnend  ­  insgesamt  acht Spline­Punkte zu erzeugen. Sie müssen Sie dafür im PUNKTE­BEARBEITEN­Modus 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  Ring­Objekte.  Der erste  Punkt,  bzw.  der  Punkt  mit  der  Nummer  o,  sollte  innerhalb  aber  nahe  der Au­ ßenwand des größten Zylinders liegen. Die Punkte i, 3 und 4 beulen den Spline seitlich  leicht aus.

Abbildung 3. 41: Einen Akima-Spline als Seilzug hinzufugen

Da dieses Gerät auch  bewegt werden soll,  müssen die Objekte zu sinnvollen 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 Mitte­Zylinder bleibt für sich allein, da keine anderen Objekte direkt mit ihm verbunden sind.  Der Basis­Zylinder bekommt nur den  einen  seitlichen  Ring 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 SWEEP­NURBS. Das Seil bekommt dadurch eine Dicke von 10 m und wird damit bei der Berechnung später auch dargestellt, was bei Splines allein nicht der Fall ist. Übernehmen Sie bitte meine Benennung der Objekte aus Abbildung 3. 42. Sie wissen ja, dass  Expressions Objekte  nach  deren  Namen  auffinden.  So  ist hier 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 Mitte­Zylinder mitziehen, falls eine größere Lange ansonsten nicht mehr erreicht werden könnte. Beginnen wir mit der Expression für den Oben — Zylinder aus Abbildung 3. 43. Ru­ fen Sie eine COFFEE­EXPRESSION für den Oben —  Zylinder  im OBJEKTE­Fenster ab und übernehmen  Sie  den  Text  aus  der  Abbildung,  der  mit  dem  Wort  „Oben"  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 ar­Befehl 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 op­Objekts, also des Objekts hinter dem die Expression steht, und dann erhalt die  pos­Variable den Positionsvektor des op­Ob­ 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  if­Abfrage  überprüft, ob  die  Y­Position  kleiner als  So  ist.  Ist dies der

Fall wird der Befehl hinter der Klammer ausgeführt. D ieser besagt, dass die Y­Position gleich So ist. Diese Konstell So unterschreiten kann. Ganz ähnlich funktioniert die zweite if — Befehlszeile. Dort wird jedoch der obere Bewegungsfretraum begrenzt, denn jede Position über 720 führt zu einer Zurü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  Y­Wert  des  Positionsvektors verändert  haben,  müssen  wir diesen mit dem X­ und dem Z­Wert wieder zu einem Vektor zusammenfügen. Wir haben da­

für bereits den 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 Z­Wert der Position mit der Zahl o vorgeben, lässt sich dadurch der Zylinder nicht mehr nach links oder rechts, bzw. nach vorne oder hinten verschieben. Dies geht in diesem  Fall,  da  der Zylinder direkt im  Ursprung,  also  auf der  Position  0, 0, 0 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 op­Objekt 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 Mitte­Zylinder: var  master  =  doc  ­>  FindObject  („Oben"); var  mglobal,  opglobal,  mpos,  pos; opglobal  =  op  ­>  G e t M g ( ) ; mglobal  =  master  ­>  G e t M g ( ) ; mpos  =  mglobal  ­>GetV0(); Die erste Zeile  läutet die  kleine Veränderung ein,  die wir für dieses Objekt berück­ sichtigen  müssen.  Das sich der Mitte­Zylinder automatisch  mitbewegen soll, wenn der Oben — Zylinder eine bestimmte Höhe überschreitet, müssen wir die Position des Oben — Zylinders mit einbeziehen. Wir übertragen daher zuerst in die Variable master die Daten des Oben­Zylin­ 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  Mitte­Zylinders  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 pos­Vari­ able einfach  die Y­Koordinate des Oben­Zylinders abzüglich eines Offsets von 40 zu.  Dies führt normalerweise dazu, dass sich  der  Mitte­Zylinder  immer 40  m  unter dem Oden­Zylinder befindet. Das hätten wir auch mit einem Unterordnen des MitteZylinders unter den Oben — Zylinder erzielen können. Ergänzt wird  dies  jetzt jedoch  durch  eine  eigene  Bewegungsfreiheit  des MitteZylinders: if  (pos    370)  pos  =  370;

Wie  in  der  Expression  zuvor  wird  hier  die  Bewegungsfreiheit  mit  zwei  if­Abfrage eingeschränkt. Der Mitte­Zylinder kann somit weder eine  Position unter 40 m noch

über  370  m  einnehmen.  Besonders  die  Begrenzung  nach  oben  ist  hier  entschei­ dend, da dies die Regel durchbricht, dass der Mitte­Zylinder immer 40 m unter dem

Oben­Zylinder liegt. Ab einer Hohe von 370 m bleibt er hangen und folgt dem Oben-Zylinder erst w ieder n der Mitte­Zylinder  an die Anfangsposition zurückgeführt. Die Begrenzung nach unten hätte man sich hier sogar noch sparen können, da der Oben­Zylinder bereits nach  unten begrenzt ist. opglobal  ­>  SetV0  vector  ( 0 ,  pos,  0)  ); op  ­>  SetMg  ( o p g l o b a l ) ; Hier wird der Positionsvektor wieder mit den Werten  (o,  pos, o) gefüllt, um  auch beim mittleren Zylinder ein seitliches Ausweichen oder eine Bewegung in die Tiefe zu verhindern. Schließlich folgt die Übertragung auf das op­Objekt. Werfen wir einen Blick auf unsere Szene und testen wir unsere Expressions ein­ mal (siehe Abbildung 3. 44). Aktivieren Sie den Oben­Zylinder und verschieben Sie diesen  in  eine  beliebige  Richtung.  Sie  werden  sehen,  dass  sich  der  Zylinder  nur nach oben oder unten verschieben lässt. Ab einer gewissen Höhe trennt sich dann der mittlere Zylinder von  der  Bewegung des Oben­Zylinders ab  und  bleibt stehen. Erst bei der Abwartsbewegung des Oben­Zylinders bewegt sich  dieser wieder von der Stelle.

Die Ringe und der Ausleger folgen automatisch mit, da diese direkt dem Oben-Zylinder untergeord Sweep­NURBS? Das  Objekt  lässt  sich  nicht  unmittelbar  nur  einem  der  Zylinder  zuordnen.  Es kommt hinzu, dass sich  der Spline der Position  der Zylinder anpassen  müsste.  So kann  es jedenfalls  nicht bleiben, wie  die Abbildung  3. 44 zeigt.  Der Spline verharrt völlig unbeweglich  und hat daher keinen Bezug mehr zu den Ringen und den 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 PUNKTE­BEARBEITEN­Modus, 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 Spline­Punkte 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  MODELL­BEARBEITEN­Modus zurück  und verschieben den Oben­Zylinder auf eine Höhe, von der Sie glauben, dort müsse das Seil gespannt sei. Lesen Sie bei dieser Höhe die Y­Koordinate des senkrechten Rin­ ges oben auf dem  Oben­Zylinder ab.  Ich erhalte dafür einen Wert von 665 m  (siehe Abbildung 3. 46). Die  Wahl  dieses  Objekts  in  der Oben­Gruppe  war völlig willkürlich.  Sie  hätten auch  den  Oden­Zylinder selbst oder ein  anderes  Objekt der  Gruppe ablesen  kö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 Key­Frames zu setzen.

3. 2. 1 Wie funktioniert Morphing? Damit dies funktionieren kann, werfen wir einen kurzen Blick darauf, wie Morphing funktioniert (siehe Abbildung 3. 48):

Abbildung 3. 48: Grundlagen des Morphens von Punkt- Koordinaten

Beginnen  wir  mit  dem  linken  Teil  der Abbildung.  Sie  veranschaulicht  die  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 Oben­Zylinder zu knüpfen, habe i zu Position 2 zu bewegen. Bei einer derartigen Steuerungsmöglichkeit redet man auch von gewichtetem Morphing. Prinzipiell lassen sich nach diesem Schema auch mehrere verschiedene Zielpositionen mit verschiedenen x — Faktoren mischen. Inter­ essant kann dies bei Gesichtsanimationen sein. Dazu jedoch später mehr. Stürzen wir uns also in die COFFEE­EXPRESSION für den S pline im SWEEP­NURBS (siehe Abbildung 3. 49). Wenn  Sie  bislang alle  Punkt­  und  Objekt­Koordinaten  aus meinen Abbildungen  übernommen  haben, können  Sie die  Expression  aus  der 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  („Ring­Oben2"); 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 Ring­Objekte in Variablen ab. Wir benötigen  diese  Daten,  um  später die entsprechenden Splinepunkte exakt der Bewegung der Ringe nachführen zu können. Dabei werden ihre Positionen einfach übernommen. var  Bglobal,  O g l o b a l ,  O 2 g l o b a l .  G g l o b a l ; var  Faktor,  posB,  posO,  posO2,  posG,  Punkt;

Hier  passiert  eigentlich  nichts, außer dass wir uns einige Worte  als Variablen  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 op­Objekts 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. y­288. 631)  /  (665­288. 631); Hier  definieren  wir  unseren  x­Faktor,  also  den  Multiplikator,  der festlegt,  wie  weit wir  die  Distanz  zwischen  Start­  und  Endpunkt  des  Morphings  gehen  wollen.  Die Zahl 665 sollte Ihnen bekannt vorkommen. Dies ist die Position des  Oben2  — Rings, ab der der Spline gespannt sein soll.  Hat Oben2 diesen Wert erreicht, müssen alle Splinepunkte also  in  Position2  sein.  Den  etwas  krummen  Wert 288. 631  habe  ich aus der untersten Y­Position des  Oben2  — Rings abgelesen, also wenn das Gerät 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  (655­288. 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 if­Abfrage: if  (posO2. y  >  665) { posG. x  =  6 7 5  ­  (posO2. y  ­  6 6 5 ) ;

Punkt [1] = vector (-123. 977, -152. 993, -5. 478); Punkt [3] = vector (-120. 033, 229. 832, 2. 691); Punkt [4] = vector (-115. 967, 481. 203, -0. 663); } Wenn also die Position des Oben2­Rings über der von uns festgelegten Grenze von 665 liegt,  werden die in  geschweiften  Klammern  stehenden  Befehle  ausgeführt. Damit die  Maschine  einen  realistischen  Arbeitsablauf darstellt,  muss der 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  Oben­Zylinder  ziehen.  Es

müsste also eine Bewegung entlang der X­Achse 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 Oben2­Rings zu einem Meter weniger bei der X­Koordinate des Gleiter­Rings führt. Nichts anderes steht in der Formel für posG. x. In den drei Zeilen danach weisen wir den Punkten i, 3 und 4 die 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 STRUKTUR­Fenster. Dieser gesamte if — Komplex sorgt also dafür, dass ­wenn der Ring Oben2 die Y­ Koordinate 665  m überschreitet —, die Spline­Punkte i, 3 und 4 in ihrer Endposition liegen  und gleichzeitig der Gleiter­Ring samt dem  untergeordneten Würfel  näher an den Oben2­Zylinder heranrückt. Was mit dem Spline  passieren soll, wenn der Oben2­Ring unter der Koordinate 665  m  bleibt,  muss  noch geklärt werden.  Die Expression fährt daher wie folgt fort:

eise { posG. x  =  675; Punkt  [l]. x  =  ­172. 173  +  ( ­ 1 2 3 . 977  +  172. 173)  *  Faktor; Punkt  [l]. y  =  ­128. 895  +  (­152. 993  +  128. 895)  *  Faktor; Punkt [1]. z  =  ­5. 478;

} Gleich  zu  Beginn  wieder  ein  neuer Befehl:  else  leitet  einen  in  geschweiften  Klam­ mern stehenden  Befehlsblock ein,  der nur ausgeführt wird, wenn  die direkt darüber stehende  if­Bedingung  nicht  erfüllt  wurde.  Das  bedeutet,  nur wenn posO2. y  nicht größer als 665 ist, werden die Befehle in den else —  Klammern  ausgeführt. Dies ist der Bereich, in dem das Morphing des Splines stattfinden muss, also die Verformung vom schlaffen in ein gespanntes Seil. Zuerst wird  die  X­Position  des  Gleiter­Rings auf 675  fest eingestellt.  Dies  sorgt dafür,  dass  der  Gleiter direkt vor dem  Stopperwürfel  sitzt,  solange  das  Seil  noch nicht gespannt  ist. Danach folgen die  Morphing  —  Rechnungen  für die drei Spline­Punkte. Da sich das Prinzip wiederholt, habe ich hier nur den Punkt  i als Listing aufgeführt. Sie 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 Z­Koordinate 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 Spline­Ende wird  sich  also  durch  die  Gleiterbewegung ebenfalls verschieben,  als wären beide Objekte tatsächlich verbunden. Da diese Zeile außerhalb der if­ und der else —  Befehle  steht, werden sie in je­ dem  Fall ausgeführt.  Dies  macht ja auch  Sinn, da das Seil immer durch die  Ringe laufen  soll,  egal  in  welcher  Position  der  Oben2­Zylinder  bzw.  der Ring­Oben2 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  Oben2­Zylinder  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 Key­Frames

animieren  und  berechnen,  einem  für die  untere  und  einem  für die  obere  Position des Oben2­Zylinders. Vielleicht auch eine interessante Angelegenheit für Kunden­ präsentationen von Objekten. Denken Sie z. B. an ein Auto, bei dem durch das Be­ wegen eines  NULL­OBJEKTS 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 Raytracing­Funktionalitä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 Oben­Zylinder nach unten  bewegt wird.  Dagegen würde eine Feder helfen, die den Gleiter wieder nach rechts an den Anschlag zieht. Diese  Feder müsste am jetzt  noch  offenen  Ende des Auslegers befestigt sein. Duplizieren Sie also den Stopper­Würfel auf dem Ausleger­Zylinder und ziehen Sie diesen  nach  rechts.  Der Ausleger sollte  auch  etwas  länger sein,  damit die  Feder noch Platz hat. Verlängern Sie dazu einfach den Auslegerzylinder und platzieren Sie den  duplizierten Stopperam  Ende. Rufen Sie einen neuen Zylinder auf, den Sie wie in Abbildung 3. 51 konfigurieren. Die Einstellungen bewirken, dass der Zylinder nur halb modelliert wird. Es entsteht eine glatte Schnittkante, an der die Feder befestigt sein könnte.  Platzieren Sie die­ sen Zylinder im Stopper­Würfe l am Ende der Stange.

Abbildung 3. 51: Ein halber Zylinder als Anker für die Feder

Schließlich brauchen wir noch die Feder selbst. Solch ein Objekt haben wir schon im letzten Beispiel umgesetzt. Sie wissen also bereits, dass ein KREIS­Spline mit ei­ nem  HELIX­Spline  in  einem  SWEEP­NURBS  zu  dem  gewünschten  Ergebnis  führt (siehe Abbildung 3. 52). Übernehmen Sie von dort die Parameter und platzieren Sie die Feder zwischen den Stoppern auf dem Ausleger.

Abbildung 3. 52: Helix und Kreis zu einer Feder zusammenfügen

Damit sich die Feder entsprechend  der  Bewegung des  Seilzugs streckt und  zusam­ menzieht, benötigen wir eine zusätzliche Expression für den HELIX­Spline. 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 HELIX­Dialog 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 HELIX­Spline der Fe­ der ab. Wie immer gehe ich  kurz auf die einzelnen Zeilen ein, da hier neue Befehle vorkommen. var RingO2 =  doc  ­>  FindObject  („Ring­Oben2"); if  (!RingO2)  return; Die  erste  Zeile  sollte  Ihnen  vom  Aufbau  her  bekannt  vorkommen.  Wir  definieren dort das  Wort RingO2 als Variable  und  weisen  dieser die  Daten  des  Objekts RingOben2 zu. Die folgende if­Abfrage haben wir bislang so nicht benutzt. In der 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 if­Abfrage 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  OBJEKTE­Fenster einstellen  lassen, in unserem Fall erhalt die Variable Werte hier alle Daten der Helix. Auch  hier folgt  wieder zur Sicherheit eine  if­Abfrage,  ob  auch  tatsachlich  die entsprechenden  Daten gefunden  und  übergeben werden  konnten.  Hatten wir den parametrischen HELIX­Spline also  in  ein  Spline­Objekt  konvertiert,  so  konnte  der

Container nicht mit Werten gefüllt werden und wurde daher einen Abbruch der Ex­pression — Ausführung pro Es  folgen  bereits  bekannte  Zeilen,  in  denen  die  Position  des Ring-Oben2-Objekts in der Variable posO2 gespeichert werden. hoehe  =  250. 0; if  (posO2. y  >  665)  hoehe  =  250  +  (posO2. y  ­  6 6 5 ) ; Hier wird die Variable hoehe  zuerst mit einem Wert von 250 gefüllt. Dies entspricht der Ausgangshöhe der HELIX, also der Länge in der entspannten Position. Danach folgt eine Abfrage, ob die Y­Position des Ring-Oben2-Objekts  den Wert 665  übersteigt. Dies war ja der von uns selbst gesetzte Grenzwert für die Höhe, ab dem der Seilzug auf dem Ausleger eine Verkürzung erfahrt. Dies ist also auch der Zeitpunkt an dem die Feder die Lange verändern muss, um den Anschluss nicht zu verlieren. Da die Variable  hoehe für die HÖHE im HELIX­Dialog stehen soll, muss diese Variable  also  dann  angepasst  werden.  Für  die  entsprechende  Wertberechnung greife ich auf die gleiche Formel wie schon für den beweglichen  Ring zurück. Jeder Meter mehr an  Höhe  über 665  m  führt zu  einem  Meter mehr im Wert der Variablen hoehe. Dieser hoehe — Wert ­ egal ob er nun noch bei 250. o liegt, oder durch die Erfüllung der if­Bedingung neu berechnet wurde ­, muss nun in den HELIX­Container 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  Parameter­basierte  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 COFFEE­EXPRESSION oder  einem COFFEE­PLUGIN 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öhe­Wert aus. Ist der Container nun  mit den  neuen  Werten  gefüllt,  muss er dem Objekt wieder übergeben werden. Dies geschieht mit dem  SetContainer­Befehl. op  ­>  Message  (MSG_UPDATE): In  dieser abschließenden  Befehlszeile teilen wir CINEMA 40  mit,  dass wir das  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 COFFEE­EXPRESSIONS 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 Auto­Objekt zu folgen. Da­ mit dies funktionieren kann, müssen wir also dem Auto­Objekt 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 ) ) ;

] / /  Delta­Werte  verschieben

for (j = 1; j < Delay; j++) {

bc -> SetData (j, bc -> GetVector (j+D); bc -> SetData (j+200, bc -> GetVector (j+201));

} // Neue Werte speichern bc -> SetData (Delay. op -> GetPosition()); bc -> SetData (Delay+200, op -> GetRotation()); op -> SetContainer (bc);

} Listing 5. 1: Delta — COFFEE — Expression für Rotation und Position

Nahezu alle in diesem  Listing benutzten  Befehle sind  ihnen  mittlerweile bekannt. Ich reiße daher die Funktionen der einzelnen Befehlsgruppen nur noch an: var  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  OFFSET­Werte für alle drei Achsen jeweils für die Position und die Rotation. Über diese Werte steuern Sie die Lage des folgenden Objekts zu der des Hauptobjekts.  Die  hier eingestellten  Werte  sorgen  also  dafür,  dass  das  folgende Objekt  in  der Ausgangsposition  250  m  über dem  Hauptobjekt liegt und  alle  Rota­ tionswerte bei  o  liegen  (ROFFSET­Werte steuern  die Ausgangslage  der Rotation). var  f o l l o w  =  doc  ­>  FindObject  ( " F o l l o w " ) ; var  bc  =  op  ­>  GetContainer(); Die Variable follow wird milden Werten des Objekts gefüllt, das dem  Hauptobjekt mit der Expression  folgen  soll.  In  meiner Szene  habe ich dieses Objekt Follow 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  if­Abfrage  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 or­Schleife w Gruppe von  Befehlen  mehrmals  hintereinander  ausführen  möchte.  Dies  mag zu­ erst  unlogisch  klingen.  Der große  Vorteil dabei  ist,  dass  die  for­Schleife  mit  einer Variablen  funktioniert,  die  im  Laufe  der Zeit ihren Wert verändern  kann.  Die  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 op­Objekts ab". Da sich die Zahlvariable j laufend verändert, wird  beim  nächsten  Durchlauf der Schleife der Positionsvektor nicht  wieder  unter der  Nummer  i  abgespeichert,  sondern  unter  Nummer 2.  Der Wert wird  also  nicht  überschrieben,  sondern  es  kommt zu  einer zeitlichen Abfolge von Werten. Wenn wir also einen Delay von 10 eingestellt haben, so werden 10 Posi­ tionsvektoren des op­Objekts 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 op­Objekt vor 5 Bildern innehatte. In der folgenden Zeile werden dagegen die Containerplatze 201 bis 210 mit den Rotationsvektoren gefüllt. Die Speicherplätze 98 bis 101 erhalten hier Nullvektoren oder den Wert o. o. Da hier nur diese vier Containerplatze belegt werden, hatten diese Zeilen nicht in der for­Schleife  stehen  müssen.  Es  hatte  ausgereicht,  diese  Zeilen  unter  die  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  Seilzug­Morphing  des letzten Beispiels nachlesen. Da nicht nur Postionen, sondern auch Winkel als Vektoren geschrieben werden können, verwende ich die gleiche Formel auch für rotv, also die entsprechend ska­ lierte Änderung der  Rotationsvektoren. pos  und  rot  bekommen jeweils  die  letzten  noch  gespeicherten  Positionen  im Container  zugewiesen,  also  die  Werte,  die  das  op­Objekt  vor  der  mit  delay  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 op­Objekt 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­ low­Objekt  noch  der  Rotationswert  eingestellt,  wobei  auch  der  Winkel­Offset  mit einfließt. if  (rot  ==  bc  ­>  GetVector  ( 2 0 2 ) ) { RDZeit  =  sec  ­  bc­  >  GetFloat(98); RDX  =  sin  (rspeed  *  RDZeit  *  PI)  *  (rotv. x )  *1  /  {(Rdamp  +  1)  * RDZeit  +  1);

RDY = sin (rspeed * RDZeit * PI) * (rotv. y) *1 / ((Rdamp + 1) * RDZeit + 1); RDZ = sin (rspeed * RDZeit * PI) * (rotv. z) -l / ((Rdamp + 1) * RDZeit + 1); follow -> SetRotation (vector(rot. x + ROFFSETX + RDX, rot. y + ROFFSETY + RDY, rot. z + ROFFSETZ + RDZ)); l

Wenn nun aber der rot­Vektor nicht mit dem Vektor danach in Fach 202 überein­ stimmt, so bedeutet dies, dass zu diesem Zeitpunkt keine Rotation des op­Objekts stattgefunden hat. Dann werden diese Zeilen ausgeführt und zuerst einmal für die Variable  R D Z e i t  die Differenz zwischen der aktuellen Zeit und der letzten Zeit einer Rotationsveränderung berechnet. Dieser Wert entspricht dann der Zeit, die das 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 op­Objekts die Zeitdifferenz zwischen der aktuellen Zeit und der letzten Veränderung immer größer wird, reduziert sich dieser Faktor laufend und dämpft damit die Schwingung im  Laufe  der  Zeit  ab.  Hinzu  kommt die  Verstärkungsmöglichkeit  der  Dämpfung durch  einen  Rdamp­Wert großer o. Diese gedampfte Sinusschwingung wird dann einfach zu dem vorhandenen Ro­ tationswert addiert und mit follow­>SetRotation() auf das follow­Objekt übertra­ gen. Solange also das op­Objekt in Ruhe verweilt, bekommt das follow­Objekt eine zeitlich gedampfte Sinusschwingung mit der maximalen Amplitude der letzten Win­ keländerung multipliziert mit dem rscale­Wert verpasst. if  (pos  !=  bc  ­>  GetVector  ( 2 ) ) t bc  ­>  SetData  (101.  sec);

bc -> SetData (100, bc -> GetVector (2) - pos); follow -> SetPosition (vector (pos. x + OFFSETX, pos. y + OFFSETY, pos. z + OFFSETZ));

) if  (pos  ==  bc  ­>  G e t V e c t o r ( 2 ) } { DZeit  =  sec  •  bc  ­>  GetFloat  (101); DK  =  sin  (speed  *  DZeit  *  PI)  *  (vec. x)  *1  /  ((damp  +  1)  *

DZeit + 1); DY = sin (speed - DZeit * PI) * (vec. y) *1 / ((damp + 1) * DZeit + 1); DZ = sin (speed - DZeit * PI) * (vec. z) *1 / ((damp + 1) * DZeit + 1); f o l l o w  ­>  SetPosition  (vector  (pos. x  +  OFFSETX  +  DX,  pos. y  + OFFSETY  +  DY,  pos, z  +  OFFSETZ  +  D Z ) ) ; )

Exakt das Gleiche passiert hier für die Position s werte des follow­Objekts. Die erste if­Abfrage überprüft, ob das op­Objekt weiterhin in Bewegung ist. Wenn ja, wird dessen Bewegung einfach für das follow­Objekt übernommen und die Felder 101 und 100 werden aktualisiert. Auf diese Werte muss zugegriffen werden, wenn plötz­ lich ein Stillstand des op­Objekts eintritt. Wir können dann aus dem Wert in Feld 101 ablesen, wann  die  letzte  Bewegung stattgefunden  hat und aus  Feld 100 erfahren wir, wie groß die Veränderung dieser Bewegung war.

Beide  Werte  sind  essentiell  für  die  zweite  if­Abfrage,  die  dann  abgearbeitet  wird, wenn das Objekt zwischen den abgespeicherten Werten in Feld  i und 2 keine Bewe­ gung mehr zeigt.  Es  kommt dann zu  der  bereits  bekannten  Sinus­Berechnung,  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  follow­Objekt ü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 op­Objekts abspeichern  und die zu­ vor gespeicherten Werte  um eine zeitliche Position  im Container verschieben. Die­ ses Verschieben erledigt hier die for­Schleife, die von  i bis zu Delay­1 läuft. Setzt  man  für  j  Zahlenwerte  ein,  so  ergeben  die  beiden  Befehlszeilen  in  der Schleife sehne!! einen Sinn. Der Wert von Fach  i wird gefüllt mit dem Wert von Fach 2, der von Fach 2 mit dem Wert von Fach 3 und so weiter. Die Werte rücken also alle ein Fach auf, und der letzte Wert in Fach  i fällt weg. Das gleiche passiert um 200 verschoben für die  Rotationswerte. So  rutscht der Wert aus Fach  202  in  das Fach 201 usw. Jetzt müssen wir nur noch die beiden Fächer Delay und  Delay+200 mit den aktu­ ellen Werten füllen.  Damit  haben wir die Container­Fächer auf den aktuellen  Stand gebracht. bc  ­>  SetData  (Delay.  op  •>  G e t P o s i t i o n ( ) ) ; bc  ­>  SetData  (Delay+200,  op  ­>  G e t R o t a t i o n ( ) ) ; op  ­>  SetContainer  (bc); Jetzt  gilt  es  nur  noch,  diese  mühsam  erworbenen  Daten  in  dem  Container  so  zu speichern, dass beim nächsten Aufruf der Expression alle Daten noch da sind.  Dies erledigt die  Setzte Zeile der Expression mit dem  SetContainer()­Befehl. Alle Werte im bc­Container werden dann so gesichert, dass sie für die Berechnung des nä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 Delta­Werte 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  Delta­Plugins übrig, denn  sie  kooperieren  oft  nicht  mit dem  Netzwerk­Renderer von  CINEMA 40.  Dies hängt damit zusammen, dass die Werte für den Container zeitlich linear gesammelt werden.  Der  Netzwerk­Renderer  springt  jedoch ­ je  nach  Leistung  der  integrierten

Rechner ­ fast beliebig von Bild zu Bild in einer Animation. Die Containerwerte 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 COFFEE­SDK, 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 Expression­Kapitel 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 MAXON­Homepage. Weitere Quellen und Plugins finden Sie auf der CD zu diesem  Buch.

4

Organisches Modellieren

Wenden wir uns in diesem  Kapitel etwas von den eher technischen  Einsatzgebieten von  CINEMA 4D ab Sehr oft lese  ich in  3D­Foren von 30  Begeisterten, die  nach  Hilfe bei  der 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 3D­tauglichen 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 Pixel­Flä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­ gin­Ordner 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  FENSTER­Menü den Punkt  PALETTEN  BEARBEITEN im  LAYOUT­Unter­ 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  BEFEHLS­GRUPPE  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­ 4D­Layout  an eine beliebige Stelle, dort wo Sie gerne den Zugriff auf diese Befehle hätten  (siehe Abbildung  4. 16).  Beenden  Sie  das  Bearbeiten  des  Layouts  und  der Paletten  durch  Schließen  des  BEFEHLE­Fensters.  Sind  Sie  mit  dem  Inhalt  und  der Lage der neuen Befehlsgruppe m Ihrem Layout zufrieden, sollten Sie das Layout so als Startlayout oder unter einem  neuen  Namen sichern. Ansonsten  ist das hinzuge­ fugte  Befehls­Menü  beim nächsten Start von CINEMA4D  nicht mehr dort. Wenn Sie Ihr Layout nicht verändern möchten, können Sie die drei Plugins auch über das  PLUG­INS­Menü starten. Die Wahl per Icon ist jedoch schneller.

Abbildung 4 16: Integrieren der Befehlsgruppe in das Layout

Die Funktionsweise der Plugins ist schnell erklärt. Ich beginne mit  EDGEEXTRUDE. Wie die Übersetzung des Namens schon verheißt, extrudiert das Plugin Ecken, also 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  CROSS­EXTRUDE­Option  erzeugt  zusatzlich  Querverbindun­ gen, falls dies  möglich  ist. Werden also die vier Eckpunkte eines viereckigen  Poly­ gons selektiert und mit der CROSS­EXTRUDE­Option extrudiert, so entstehen nicht nur vier neue Polygone, die senkrecht auf den  Rändern des Polygons stehen, son­ dern auch vier X­fö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 BEWEGEN­Werkzeug. Dies lasst uns den größtmöglichen Freiraum, um selbst die Lage der neuen Punkte zu steuern. Da der EDGEEXTRUDE — Dialog zudem modal ist und daher immer geöffnet bleiben kann, genügt ein Klick auf die  CREATE  — Fläche, um die Aktion auszulosen.

Abbildung 4. 37; Edge-Extrude-Dialog

Das zweite  Plugin  habe  ich  EDGEBEVEL genannt.  Es vermag die bereits  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 PUNKTE­BEARBEITEN­Modus und wählen Sie z. B. die vier Punkte der oberen Flä­ che aus. Starten Sie das Plugin und tragen Sie z. B. einen EDGEBEVEL — OFFSET von 15 ein. Belassen Sie alle übrigen Werte und klicken Sie auf CREATE. Um die selektierten Punkte herum werden neue Punkte und Flächen erzeugt. Wenn Sie dies an einer an­ deren Stelle im Objekt wiederholen und eine  EDGE­TYPE von z. B. +45° einstellen, so bleibt die entstehende  Region  nicht so  bestehen,  sondern wird  zwischen  den  neu generierten  Punkten abgeschrägt.  Ob dies  nach außen oder innen  passiert, hängt von der Richtung der Normalen auf den Polygonen ab. Wurde die Fase also in der falschen  Richtung erzeugt,  widerrufen  Sie  den  letzten  Befehl  und  verändern  Sie den  EDGE­TYPE auf ­45°.  Wenn  Sie  den  EDGE­TYPE auf  FREE einstellen,  können  Sie  im Feld darunter selbst einen Abstandswert für den  EDGE­OFFSET eingeben. Wenn Sie damit etwas herumgespielt haben, werden Sie schnell die Mö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  STRUKTUR­Menü.

Abbildung 4. 18: Edge-Bevel-Diaiog

Das  dritte  Plugin,  der  CUTTER,  kommt ganz  ohne  Dialog aus.  Das  Plugin  schneidet benachbarte  selektierte  Polygone  entzwei.  Der Vorteil  gegenüber dem  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  UV­Koor­ dinaten. Bereist zugewiesene und fixierte Texturen müssen nach der CUTTER­Benut­ 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 PLUG­INS­ 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 MATERIALIEN­Fenster auf und deaktivieren Sie alle Kanäle bis auf den LEUCHTEN — Kanal. Laden Sie dort über den BILD... ­Schalter das  Bild  mit der frontalen Ansicht des Kopfes ein. Wurde  das  Bild  geladen,  erscheint  eine  verkleinerte  Kopie  davon  in  dem  Vor­ schaufenster  und  entsprechend verzerrt auch  auf der  Materialkugel oben  links  im

Schließen  Sie  das  MATERIAL­BEARBEITEN­Fenster  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  GRUNDOBJEKTE­lcon­Menü  eine  EBENE  ab  und tragen  Sie  in  den  durch  Doppelklick  geöffneten  Dialog  die  Werte  aus  Abbildung 4. 20 ein. Diese Werte sind keinesfalls willkürlich gewählt, sondern entsprechen 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­ RIAL­BEARBEITEN­Fenster 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  EBENE­Dialog  wieder schließen  und  das  Material  mit der seitlichen Ansicht  direkt  aus  dem  MATERIALIEN­Fenster auf das  EBENE­Objekt  im  OBJEKTE­Fenster ziehen  (Drag &  Drop).  Es  öffnet sich  ein  TEXTUR­Dialog wie  in  Abbildung 4. 20,  den Sie  direkt  über die  OK­Taste  wieder schließen  können.  Das  standardmäßig ausge­ wählte UVW­MAPPING 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  TEXTUR­Menü  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  KOORDINATEN­MANAGER auf eine  Z­Position  von  +400  Einheiten  und  ziehen  Sie  auch  auf diese  Ebene  das passende Material, also das Material mit der frontalen Vorlage. Sie können den TEX­ TUR­Dialog wieder bestätigen, ohne die Werte zu verändern.

Abbildung 4. 22: Frontale Vorlage ausrichten

Abbildung 4. 23: Die beiden Vorlagen im Raum

Das Resultat dieser Aktionen ist eine Szene wie in Abbildung 4. 23.  Die Ebenen 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 Kopf­Geometrie bewegt werden kann.

4.  3.  1  Das  Auge Rufen Sie dazu ein KUGEL­Grundobjekt 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 4­24).  Verschieben  Sie  die  Kugel so ent­ lang der X­ und Y­Achsen, dass die sichtbaren Kugelflachen mit den gezeichneten Pupillen  übereinstimmen.  Machen  Sie dabei auch von dem orangen Anfasser der Kugel Gebrauch, um die Kugel auf eine passende Größe zu bringen. Die Kugel sollte als Ganzes das in der Bildvorlage sichtbare Auge seitlich  überragen.  Natürlich  ist hier etwas Augenmaß im wahrsten Sinne des Wortes gefragt. Ich habe mich für 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 Z­Achse 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  Polygon­Objekt einleiten, da wir nun auf die Punkte und Polygone der Kugel zugreifen müssen. Zuvor drehen Sie die Kugel jedoch noch um 90° um die X­Achse. Dies hat den Sinn, die Polregion des Ku­ gel­Objekts  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  PUNKTE­BEARBEITEN­Modus 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 Z­Achse zum Auge hin verschieben, bis nur noch der Pupillenteil der Kugel aus dem  Bild  ragt  {siehe Abbildung 4. 28 links).  Sie  können  dann den entsprechen­ den  Punktkreis  schnell  identifizieren,  der  am  ehesten  die  äußere  Begrenzung  der Pupille darstellen soll. Stellen Sie im  KOORDINATEN­MANAGER entweder die Weit­Z­Ko­ ordinate  oder die lokale Y­Koordinate des selektierten  Punktes fest. Markieren  und kopieren  Sie  den  entsprechenden  Wert  im  KOORDINATEN­MANAGER. Selektieren Sie dann den vorderen Po! der Kugel, also den Punkt, der von vorne gesehen  innerhalb  der  Ins  liegt.  Übertragen  Sie  auf diesen  Punkt  den  soeben  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 CINEMA­4D­eigenen  Werkzeugen  lässt sich dies  leider nicht vollbringen, deshalb

kommt nun das CUTTER — Plugin zum Zuge. Selektieren Sie im P gone  des  abgeflachten  Bereichs  (siehe  Abbildung 4. 29  links).  Rufen  Sie  per  Icon oder im PLUG­INS­Menü den  CUTTER auf. Fast augenblicklich sollten Sie das Resultat erkennen  können  (Abbildung 4. 29  rechts).  Es  ist  ein  kreisförmiger Schnitt  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  PUNKTE­BEARBEITEN­ Modus erkennen können.  Benutzen Sie das SKALIEREN­Werkzeug, 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 Y­Achse auf den Mittelpunkt des Auge zu.  Es entsteht ein Trichter, der später das Schwarz der Iris darstellen soll. Sie können es sich auch einfach machen und gleich den Wert o für die Y­Koordinate eingeben.  Der Polpunkt landet dann exakt im  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 Y­Wert von z. B. 69 m im  KOORDINATEN­MANAGER ein (siehe  Abbildung  4. 33).  Der  Punktring  wird  dadurch  leicht  nach  vorne  aus  der Ebene  herausgehoben.  Es  entsteht ein  kreisförmiger Wall  um die  Iris  herum,  der eine andere Schattierung hervorrufen wird. Ein kleiner Wulst um die Iris ist 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 PUNKTE­BEARBEITEN­Modus  m  der seitlichen Ansicht einen  Rahmen  um  den hinteren Teil der Kugel. Achten Sie darauf, nicht auch den verschobenen Pol mit zu selektie­ ren.  Dieser muss erhalten  bleiben.  Der Selektionsrahmen  könnte also so wie in Ab­ bildung  4. 36  aussehen.  Durch  Betätigen  der  [Entf]­/[