|
Tutorial: Clothilde IV (Teil 1: Vorbereitungen)
Willkommen beim vierten Cloth-Tutorial auf Jack's Secret Stash! Im Rahmen dieses Tutorials werden wir uns erneut mit Clothilde's Gürtelfunktion beschäftigen, die Funktionalität aber mit Hilfe von XPresso ein wenig aufbohren ...
Nachdem wir im zweiten Cloth-Tutorial an einem liegenden Tuch gezogen haben, dürfte klar sein, dass die Gürtelfunktion von Clothilde eine große Einschränkung hat: Man kann nur ein einziges Gürtelobjekt definieren! Was ist aber, wenn man das Tuch an mehreren unabhängigen Punkten beeinflussen will? Wenn sich in einer Animation z.B. zwei Charaktere um ein Tuch streiten, und in verschiedene Richtungen an ihm ziehen sollen; geht das überhaupt?
Nun, die Frage war natürlich rein rhetorisch. In diesem Tutorial wird eine Herangehensweise gezeigt, mit der man das Problem mit mehrfachen Gürteln lösen kann. Mit meiner Methode kann man theoretisch beliebig viele unabhängige Gürtelobjekte festlegen, solange Rechenleistung und Geduld ausreichen.
Hier mal ein mögliches Ergebnis:
(QuickTime MOV, Sorenson3, 1.758 KBytes)

Ein wenig Theorie ...
Die hier vorgestellte Methode beruht darauf, die Punktpositionen einzelner Polygone des Gürtelobjektes an separate Greifer-Objekte (z.B. Null-Objekte) zu binden. Das Gürtelobjekt fungiert also lediglich als "Schnittstelle" zwischen den definierten Greifern und dem Stoff.
Das Binden von Punkten an ein Greifer-Objekt wird über eine einfache XPresso-Schaltung realisiert, welche über Benutzerdaten mit den entsprechenden Objekten verlinkt wird. Für jedes weitere Greifer-Objekt benötigen wir lediglich eine Kopie der Schaltung. Außerdem muß das Gürtelobjekt eine geeignete Anzahl an Polygonen zur Verfügung stellen.
Am Ende dieses Tutorials werden wir eine Animation haben, in welcher an zwei Enden eines Tuchs gezerrt wird. Los geht's, viel Spaß und gutes Gelingen wünsche ich...
1. Zu allererst basteln wir uns ein geeignetes Gürtelobjekt. Dazu erzeugen wir ein leeres Polygon-Objekt und wechseln in den Punktmodus. Hier erzeugen wir in der Draufsicht (Oben) 12 Punkte. Das Aktivieren der Snapping-Funktion hilft beim Plazieren.
Wichtig: Es muß unbedingt auf die korrekte Reihenfolge beim Erzeugen der Punkte geachtet werden!!
Man muß die Punkte 'im Zickzack' erzeugen, wie die Zahlen im Bild andeuten.
 |
2. Jetzt erzeugen wir mit dem Brücke-Tool fünf Polygone aus unseren Punkten. Dabei sollten die Punkte in derselben Reihenfolge abgearbeitet werden, in der wir sie auch erzeugt haben. Im Strukturmanager überzeugen wir uns anschließend, dass die Punkte in der richtigen Reihenfolge sind.
Warum erzeugen wir fünf Polygone? Der Grund ist, dass es sich in der Praxis einfach bewährt hat, drei Polygone Abstand zwischen den Polygonen zu lassen, die wir später per XPresso kontrollieren werden. Von diesen drei Polygonen werden zwei für die Streckung benötigt, und eines nur als Sicherheitsabstand.

|
3. Jetzt erzeugen wir der Übersicht halber ein Null-Objekt, und nennen es "Clothsim". Hier werden wir alle benötigten Objekte unterordnen, und die XPresso-Tags ablegen. Jetzt benennen wir das Polygon-Objekt in "Interface" um, und ziehen es in das Clothsim-Null-Objekt. Zusätzlich erzeugen wir noch zwei weitere Null-Objekte, die wir "Greifer 1" und "Greifer 2" nennen. Das werden unsere 'Anfasser' für den Stoff. Jetzt verlassen wir den Punktmodus, und gehen zurück in den Objekt-Modus.
Mancher wird sich fragen, warum wir nicht einfach ein Ebenen-Objekt mit entsprechenden Attributen genommen haben. Der Grund dafür ist, dass beim Ebenen-Objekt die Punkte in einer ungeeigneten Reihenfolge numeriert sind. Nur mit einer Punktreihenfolge, wie wir sie erzeugt haben, funktioniert die hier gezeigte Methode.

|
4. Jetzt erzeugen wir für das Clothsim-Null-Objekt ein XPresso-Tag. Für das Tag erzeugen wir die Benutzerdaten "Greifer" (Typ: Link), "Interface" (Typ: Link) und "Punkt-Index" (Typ: Integer, Minimum=0). Wenn wir das erledigt haben, ziehen wir mit der Maus unser Greifer-Objekt "Greifer 1" in das Feld "Greifer" und das Polygon-Objekt in das Feld "Interface". Den Wert für "Punkt-Index" lassen wir bei "0".

|
5. Per Doppelklick auf das XPresso-Tag öffnen wir den XPresso-Editor. Das XPresso-Tag ziehen wir mit der Maus vom Objektmanager in das Editorfeld und erzeugen damit unseren ersten Node. Jetzt erzeugen wir noch schnell die Ausgangsports für unsere drei Benutzerdaten "Interface", "Punkt-Index" und "Greifer".

|
6. Als nächstes klicken wir mit der rechten Maustaste in das Editorfeld, und wählen aus dem Kontextmenü "Neuer Node >> XPresso >> Berechne >> C.O.F.F.E.E.". Der neue Node bekommt die Ausgangsports "Output1" bis "Output4". Alle Ports sind vom Typ "Integer". Der Eingangsport "Input1" wird mit dem Ausgangsport "Punkt-Index" des Nodes "Xpresso" verbunden. Als letztes geben wir den unten gezeigten Code in den Coffee-Node ein, und prüfen mit dem "Kompilieren"-Button, ob wir alles korrekt abgetippt haben.
Was macht der Code? Er gibt den vier Ausgangsports aufeinanderfolgende Werte, angefangen bei dem Wert, den wir über den Eingangsport einspeisen. Das machen wir uns später zunutze, um aus unserem Interface-Polygon-Objekt gezielt die Punkte einzelner Polygone ansprechen zu können.

|
7. Als nächstes ziehen wir mit der Maus unser Null-Objekt "Greifer 1" in den XPresso-Editor. Es entsteht nun ein neuer Objekt-Node, der automatisch mit dem Greifer verlinkt ist. Da wir aber flexibel sein wollen, holen wir uns den Objekt-Verweis zur Laufzeit aus den Benutzerdaten des XPresso-Tags. Dazu erzeugen wir einen Eingangsport für "Objekt" und verbinden ihn mit dem Ausgangsport "Greifer" des Nodes "XPresso". Danach erzeugen wir am Greifer-Node noch einen Ausgangsport für "Globale Position".

|
8. Mit einem Rechtsklick auf das Editorfeld öffnen wir wieder das Kontextmenü und wählen "Neuer Node >> XPresso >> Allgemein >> Punkt" aus. Für den entstandenen Punkt-Node erzeugen wir Eingangs-Ports für "Objekt", "Punkt-Index" und "Punkt-Position". Im Attributemanager stellen wir sicher, dass der Matrix-Modus auf "Global" gesetzt ist. Zu guter Letzt verbinden wir den Eingangsport "Objekt" mit dem Ausgangsport "Interface" des Nodes "Xpresso", den Eingangsport "Punkt-Index" mit dem Ausgangsport "Output1" des Coffee-Nodes, und den Eingangsport "Punkt-Position" mit dem Ausgangsport "Globale Position" des Greifer-Nodes.
Damit können wir jetzt bereits die Position eines Punktes an ein Objekt binden. Da die Gürtelfunktion von Clothilde aber nur auf Polygone reagiert, müssen wir insgesamt vier Punkte bewegen.

|
9. Da wir noch drei weitere Punkt-Nodes benötigen, können wir die Nodes einfach bei gedrückter STRG-Taste mit der Maus ziehen, um sie zu klonen. Alle Eingangsports "Objekt" müssen mit dem Ausgangsport "Interface" des Nodes "XPresso" verbunden werden, alle Eingangsports "Punkt-Position" an den Ausgangsport "Globale Position" des Greifer-Nodes. Die Eingangsports "Punkt-Index" werden jeweils mit einem der vier "Output"-Ausgangsports des Coffee-Nodes verbunden.
Damit ist unsere kleine XPresso-Schaltung komplett. Sie ermöglicht es uns jetzt, die 4 Punkte eines Polygons des Interface-Objekts an die Position eines beliebigen Objekts zu binden. Dabei lassen sich die Punkte über den Punkt-Index, und die Objekte über die Links in den Benutzerdaten des XPresso-Tags auswählen. Man muß nichts mehr in der Schaltung ändern.

|
10. Jetzt haben wir den ersten Greifer schon fertig eingerichtet. Fehlt noch der zweite. Wir machen es uns einfach, und kopieren das XPresso-Tag. In den Benutzerdaten ersetzen wir "Greifer 1" durch "Greifer 2", und erhöhen den Wert für "Punkt-Index" um 8.
Wenn wir noch mehr Greifer-Objekte hätten, würden wir für jedes einzelne den Punkt-Index wieder um 8 erhöhen, damit zwischen den von unseren Schaltungen kontrollierten Polygonen immer 3 Polyone 'Sicherheitsabstand' sind.

|
10. Wenn wir jetzt die Controller-Objekte im Objekt-Modus mal testweise ein wenig durch die Gegend schieben, können wir schnell erkennen, ob alles geklappt hat.

|
So, jetzt haben wir unser Interface-Objekt und die beiden Greifer eingerichtet, und können endlich zum vergnüglichen Teil übergehen, der Cloth Simulation.
Weiter geht es dann im nächsten Teil...
Zurück zum Tutorial-Index
|