Spline Controller

Was tut er?

Diese Expression setzt einen Splinepunkt und/oder seine Tangenten in Abhängigkeit von der Position eines anderen Objekts (pro Punkt/Tangente, also maximal dreier Objekte). Bewegen Sie einen der Controller, und der Punkt oder die Tangente bewegt sich mit. Dies entspricht dem Tag "Kopiere Transformation", wobei nur die Translation angewendet wird und das Ziel ein einzelner Punkt ist.

Warum muß man einen Splinepunkt durch ein Objekt kontrollieren können? Ganz einfach: Wenn der Spline beweglich sein soll, etwa ein Schlauch zwischen zwei Maschinen, dann muß der eine Endpunkt an einem Zielobjekt befestigt sein, der andere Endpunkt aber an einem anderen. Bewegt man die Zielobjekte gegeneinander, muß der Schlauch sich verformen. Das ist mit den normalen Funktionen nicht zu bewerkstelligen: ein Spline kann nur einem Objekt zur Zeit untergeordnet sein, und das Tag "Kopiere Transformation" wirkt nur auf das gesamte Objekt.

Obwohl XPresso bei den meisten Problemen, die die Kinematik-Tools lösen, ebenso helfen kann, stößt dieses Konzept hier an seine Grenzen: XPresso kann keine Tangenten kontrollieren! (Stand: Release 9!) Eine Kontrolle der Tangenten ist jedoch nötig, um die Richtung des Schlauches zu bestimmen. Gleiche Tangentenlänge und -Richtung ist nicht immer erwünscht.

Es liegen bereits mehrere Lösungen dieses Problems in Form anderer Plugins vor, die jedoch meines Wissens leider nicht auf R8/R9 angepaßt wurden. Um mit den Collie Tools eine Komplettlösung anzubieten, wurde auch dieses Tag hier nochmals integriert.

Welche Parameter müssen gesetzt werden?

Das Tag wirkt nur, wenn man es auf ein Spline setzt. Bei anderen Objekten wird in der Konsole eine Fehlermeldung ausgegeben. Jedes Tag kontrolliert genau einen Splinepunkt, es ist jedoch möglich, mehrere Tags auf denselben Spline zu setzen und damit auch mehrere Punkte zu kontrollieren. Es spielt keine Rolle, wie viele der Splinepunkte man kontrolliert; der Spline kann mit kontrollierten und nicht kontrollierten Punkten gleichzeitig existieren.

Zunächst muß der Index des kontrollierten Punktes gesetzt werden. Wie finden Sie diesen Index? Entweder zählen Sie die Splinepunkte, oder Sie markieren den Splinepunkt im Punktmodus und schlagen dann den Index des markierten Punktes im Struktur-Manager nach.

Achtung: Sie sollten den kontrollierten Punkt als erstes wählen, bevor Sie die Quelle (den Controller) wählen. Wenn der Controller erst einmal gesetzt wurde, beginnt das Tag sofort zu wirken und setzt den Splinepunkt um. Wenn Sie nun den Index ändern, bleibt der vorige kontrollierte Punkt an der gesetzten Stelle stehen (das Tag merkt sich nicht die Ursprungsposition!), und der neue kontrollierte Punkt springt an dieselbe Stelle! Das ist logisch, aber meist nicht gewünscht.

Sowohl der Punkt als auch die Tangenten haben jeweils ihren eigenen Controller (ihr eigenes Quellobjekt), die unabhängig voneinander gesetzt werden können. Die Controller müssen entweder über ein Link identifiziert werden oder über eine lokale Namenssuche (Details finden sich auf der Seite über Kinematische Tools). Das Flag "Aktiv" entscheidet, ob die Expression überhaupt angewendet wird, und schließlich der Modus befindet darüber, ob die Werte aus dem lokalen oder globalen Koordinatensystem genommen (und dahin zurückgeschrieben) werden. Wenn Sie nicht ganz spezielle Anwendungen haben, sollten Sie das globale Koordinatensystem verwenden.

Tips: Die Controller sollten Nullobjekte sein, da jeweils der Ursprung des Controller-Koordinatensystems auf den Splinepunkt oder die Tangente übertragen wird. Nimmt man hier ein Objekt mit Geometrie, würde der Splinepunkt im Nullpunkt des Controllers, also in dessen Zentrum liegen. Das dürfte meist nicht gewünscht sein. Hängt man den Spline an ein Nullobjekt, das wiederum dem Zielobjekt untergeordnet ist, kann man den Spline wesentlich besser kontrollieren.

Verwendet man die Tangenten, so empfiehlt es sich auch, die Controller als Unterobjekte des Splinepunkt-Controllers zu setzen. Auf diese Weise reagiert der Spline erwartungsgemäß korrekt auf ein Rotieren des Controllers. (Ansonsten reagiert das Tag überhaupt nicht auf Rotation, lediglich die Translation wird übertragen.)

Möchte man darüber hinaus, daß die Tangenten stets beide gleich lang sind und in dieselbe Richtung weisen (Stichwort Stetigkeit der Kurve), so kann man die eine Tangente mittels eines "Kopiere Transformation"-Tags an die andere binden. Wählen Sie in diesem Tag "Translation" für x, y und z, und setzen Sie einen Faktor von -1, damit die Tangente in die gegenüberliegende Richtung zeigt.

Und noch ein Tip. Das Tag kontrolliert nur die Splinepunkte, es simuliert keinen physikalischen Schlauch. Ziehen Sie an einem Punkt, so wird der "Schlauch" kürzer oder länger. Das ist bestenfalls für Gummibänder akzeptabel. Um hier mehr Realismus zu erzielen, sollten mehrere Splinepunkte kontrolliert werden, die dann ein "Durchhängen" und "Biegen" des Schlauches optisch emulieren. Im einfachsten Fall kann das mit "Kopiere Transformation", "Zeige Auf" und "Abstand" erreicht werden; ist die Situation komplexer, werden Sie um XPresso nicht herumkommen.

Beispiel

In der Demoszene "spline_controller.c4d" wurde ein komplettes Setup für solch eine Verbindung inklusive Kontrolle der Tangentenlänge realisiert.

Rotieren Sie "Arm2" um die blaue Achse B und beobachten Sie, wie der Schlauch "Pipe" sich ändert. Der Schlauch-Spline, der aus drei Punkten besteht, ist mit drei Controllern versehen. Die Endpunkte hängen an den "Armen", während der Mittelpunkt an einer speziellen Controller-Struktur aus Nullobjekten hängt ("Midpoint"). Diese Struktur ist so gestaltet, daß:

Diese Konstruktion stellt sicher, daß mit abnehmendem Winkel der Knick im Schlauch immer schärfer wird. (Man könnte hier noch den Punkt-Controller näher an das Gelenk rücken, um eine gleichbleibende Schlauchlänge zu simulieren; darauf habe ich hier verzichtet.)

Zusätzlich besitzt "Arm2" ein Beschränkungs-Tag, das die Rotation auf einen sinnvollen Bereich begrenzt. Jenseits dieses Bereichs wird entweder der Schlauch eingeklemmt oder überdehnt.

   

Beachten Sie hier bitte auch, daß die Reihenfolge der Objekte relevant ist. Die Tags werden von oben nach unten ausgewertet. Das Objekt, das die ganze Kinematik steuert - hier "Arm2" - muß als erstes kommen. "Midpoint" hängt von "Arm2" ab, kommt also als nächstes. "Pipe" schließlich wird durch die neun Nullobjekt-Controller in der darüberliegenden Hierarchie kontrolliert, kommt also als letztes. Hält man diese Reihenfolge nicht ein, werden evtl. Werte aus dem vorigen Transformationsschritt durch ein Tag berechnet, und das kontrollierte Objekt hinkt dem Controller um einen Schritt (bzw. Bild) hinterher.


Zurück zur Kinematische Tools-Seite

Zurück zur Handbuch-Hauptseite