home
     
 

Basic Character Rig

Hier nun ein kleines "Quick-Rig" Tutorial.
Die hier beschriebenen Methoden sind natürlich nicht der einzige Weg zum Ziel, vielleicht auch nicht der Beste, aber es ist ein Anfang.

 

01_ Bein und Fuß:

01_01 IK Solver

Nachdem die Bones fertiggestellt sind und die Pivot-Points (Gelenke) alle an den richtigenstellen liegen kommen für die Beine erstmal 3 IK-Chains dran. ( Animation/IK Solvers/HI Solver )

Ein HI-IK Solver vom Oberschenkel zum Fuß-Bone, einer vom Fuß zum Zehen-Bone und der letze vom Zehen zum Terminator/Nub-Bone ganz am Ende der hierarchie.

 

 

 

01_02 ControlShapes

Jetzt muss das alles Sinnvoll miteinander verlinkt werden um ein funktionales Rig zu ergeben. Dazu kommen ein paar Hilfsobjekte ins Spiel, Control Shapes, die später als einzige wirklich animiert werden sollen (ein Hilfsmittel um nicht alle Bones, IK Goals, Helpers, etc. animieren zu müssen, sondern nur eine überschaubare Anzahl klar definierter CTRL-Shapes).

Für den Fuß, bzw. das Bein werden 4 CTRL Shapes benötigt.
Ein MASTER CTRL-Foot (darean soll der ganze Fuß und somit das Bein bewegt werden), ein CTRL_ToeTip (zum Abrollen des Fusses über die Zehenspitzen), ein CTRL-Ball (zum Abrollen über den Fußballen / heben der Ferse) und ein CTRL-Toe (um mit den Zehen wackeln zu können) Diese CTRL-Shapes werden an den Pivot Points der Bones oder der IK-Goals ausgerichtet (align Position xyz Pivot-Pivot)

 

 

 

01_03 Links

 

Jetzt werden die CTRL-Shapes mit den IK-Goals und untereinander Verlinkt. (Select and Link)

Das erste IK -Goal am Fußgelenk bekommt den CTRL-Ball als Parent zugewiesen.

Das Mittlere IK Goal (Fußballen) wird ebenfalls an CTRL-Ball gelinkt.

Das letzte IK-Goal an der Zehenspitze wird an das CTRL-Toe Shape gelinkt.

Die BEIDEN CTRL-Shapes CTRL-Ball und CTRL-Toe werden an CTRL-TOE-TIP gelinkt.

und zuletzt wird CTRL-ToeTip an das CTRL-Foot gelinkt.

Somit ist CTRL-Foot das Root-Objekt für das gesamte Fuß-Rig (das oberste Objekt in der Hierarchie).

 

 

01_04 Transformation Lock

Um zu verhindern das die CTRL-Shapes versehentlich verschoben, oder in einer falschen achse rotiert werden, können diese in Ihrer Bewegungsfreiheit beschränkt werden:

 

 

01_05 Knie Control

Jetzt ist noch je ein CTRL-Shape für die Kontrolle der Knie nötig. Dieses CTRL-Shape soll den sog. Swivel-Angel der IK-Chain Oberschenkel-Fuß vorgeben, also die Richtung in die das Knie zeigt.

Einfach das CTRL-Knee am Kniegelenk alignen (Align Position xyz), dann wieder etwas nach Vorne schieben, über den Fuß.und an das CTRL-Foot Shape linken.

Anschliessend das IK-Goal am Fußgelenk auswählen und im MotionPanel in den IK Solver Properties das CTRL-Knee als Target für den Swivel Angel definieren.

um ein 'flippen der Fuß-Bones beim Bewegen des Beines zu verhindern kann es nötig sein den" Parent Space" des mittleren IK-Goals von 'Start Joint' auf 'IK Goal' umzustellen und die dabei wahrscheinlich auftretende Verdrehung mit dem 'Swivel Angle' Wert wieder auszugleichen.

02. Wirbelsäule

Die Wirbelsäule soll hier ganz simpel mit gerigt werden mit je einem CTRL-Shape pro Bone, das in die Hierarchie eingefügt wird.

Zunächst das CTRL-Hip, das als Root für nahezu den ganzen Character fungieren wird: hierdran werden die Oberschenkel gelinkt (bzw. die Null-Helper oberhalb der Oberschenkel, das Root-Objekt der Bone Kette 'Bein' eben) und ebenso der unterste Wirbelsäulen-Bone / die Hüfte.
Jeder Spine Bone bekommt nun sein eigenes CTRL Shape (Align Position xyz, Pivot-Pivot) zugewiesen das immer als Parent des nächst höheren Bones und als Child des unteren Bones verlinkt wird, also zwischen die Bones in die Hierarchie eingefügt wird. Damit der Rücken an den CTRL-Objekten nicht auseinandergerissen werden kann, sollten alle CTRL_Spine Objekte in allen Bewegungsachsen gelockt werden (Hierachy Panel/Link Info/Locks/Move xyz), nur das Hip CTRL muss auch verschiebbar bleiben.

Für den Kopf ist es manchmal sinnvoll unabhängig vom Hals drehbar zu sein, wenn also der Kopf -Bone seine rotation NICHT automatisch vom übergeordneten Objekt (Hals) übernimmt, sondern individuell zu steuern ist.

Dafür wird zunächst wieder ein CTRL-Shape zwischen Hals und Kopf eingefügt, im 'Link Info' Menü wird für dieses aber das 'Erben' (inherit) der Rotation in allen Achsen deaktiviert.

Zuletzt werden noch die NullHelper (oder die SchulterBones, die Root-Objekte der Arme eben) an den entsprechenden RückenBone gelinkt.

3. Arme

Für Die Arme gibt es natürlich auch wieder mehrere Möglichkeiten : Mit normaler FK (so wie die Wirbelsäule) oder mit einem IK-Solver (wie bei den Beinen).

Die IK-Version ist immer dann hilfreich, wenn der Character sich an irgendwas festhalten können soll.

Wie auch immer, zunächst kommen die Schulterbones dran, und zwar als FK mit einem CTRL-Shape zum Animieren.

Dieses wird wie bei der Wirbelsäule zwischen den Schulter-Bone und dessen Parent gelinkt, also der Schulter-Bone wird an das CTRL_Shoulder Objekt gelinkt und dieses dann an dan entsprechenden Bone der Wirbelsäule (bzw an den dazwischen liegenden Null-Helper). Um den Arm nicht auseinander zu reissen wird die Bewegungsfreiheit wieder eingeschränkt (lock Move XYZ)

Nun kommt eine IK Chain vom Oberarm zum Handgelenk (bzw zum End Nub-Bone hinter dem Unterarm) zum Einsatz. Und noch ein Control-Shape, CTRL_Hand.

Das IK Goal wird an das CTRL_Hand Shape gelinkt.

Jetzt lässt sich der Arm mit dem CTRL_Hand bewegen, aber die Hand soll damit auch rotiert werden können. Den Hand-Bone einfach an das CTRL zu linken würde zwar funktionieren, dann könnte man aber die Hand vom Arm trennen wenn man das CTRL-Shape zu weit weg bewegt. Die Hand soll also die Rotation des CTRL übernehmen ohne dabei die Hierarchie der Bones zu ändern.

Das geht mit einem Orientation Constraint: Den Hand Bone selektieren, im Animation Menü /Constraints/OrientationConstraint wählen und das CTRL_Hand -Shape anklicken. Jetzt übernimmt die Hand die Orientierung des CTRL-Objekts, ist aber immer noch Childojekt des Unterarms und kann somit nicht so einfach von diesem weg bewegt werden.

Was noch fehlt ist ein CTRL Shape für den Swivel-Angle des Ellbogens. Einfach ein Rectangle am Pivot des Unterarm Bones alignen, etwas nach hinten schieben, an das CTRL_Shoulder Objekt linken und im MotionPanel als SwivelAngle Target der IKSolverPlane definieren. (wie bei den Knien)

Im jetztigen Zustand bewegt sich das CTRL-Hand objekt nicht mit dem Rest des Characters mit, sondern bleibt an seiner position stehen bis es selbst animiert wird. Das ist praktisch wenn die Hand auf einem Gegenstand (z.B. Tisch ) ruhen soll, während die Schultern und der ganze Rest in Bewegung ist. Allerdings ist es auch störend weil man beispielsweise beim Laufen des Charakters die Position der Hand immer nachführen muss, da sie nicht automatisch mit den Schultern mitbewegt wird. Die folgende (Optionale!) Konstruktion soll es ermöglichen zwischen diesen beiden Modi zu wechseln.

Dazu sind ein paar Hilfsobjekte nötig: Ein Dummy (Point_HLP_Link2Spine) der an die Schulter oder Wirbelsäule gelinkt ist und deshalb mit dem Character mitbewegt wird; Ein Dummy (Point_HLP_Link2World) der zunächst kein Parentobjekt bekommt und somit unabhängig vom Rest des Characters ist; Und schliesslich ein Dummy (Point_HLP_Tween) der per Position Constraint zwischen den ersten beiden hin und her geschaltet werden kann.

Alle diese Point-Helper werden zunächst am IK-Goal der Hand aligned. Dann wird Point_HLP_Link2Spine an die Wirbelsäule gelinkt (wie der Name ja schon vermuten lässt) oder Alternativ an den Null-Helper am Anfang der Arm Hierarchie. (jedenfalls so, dass er sich mit dem rücken des Characters mitbewegt). Point_HLP_Link 2 World wird später noch an den MasterPOS_CTRL gelinkt, ein Helper zur initialen Positionierung des Characters in einer Szene.

Das CTRL_Hand Shape kann dann bereits an den Point_HLP_Tween gelinkt werden

Der Trick besteht jetzt darin, den Point_HPL_Tween per Position Constraint entweder an Point_HLP_Link2World oder Point_HLP_Link2Spine zu binden.

Dazu benötigt der Position Constraint lediglich Beide *Link2 Objekte als mögliche Position Targets und die Gewichtung kann von 0-100% gesteuert werden.

Unter Animation/Constraints/Position Constraint findet sich das gewünschte Tool. Wichtig ist sich zu merken in welcher Reihenfolge man die Targets vergibt! Hier ist als erstes der Point_HLP_Link2World Helper als Target definiert worden.

Im Motionpanel wird jetzt einfach noch ein weiteres Target, der Point_HLP_Link2Spine hinzugefügt. Die Gewichtung (Weight) ist per default auf je 50 % eingestellt, das kann auch so bleiben, da dieser Wert nacher mit einem Custom Attribute und ParameterWiring direkt vom CTRL_Hand Objekt aus gesteuert wird.

Damit nun auch die Rotation relativ zum Rücken übernommen wird (oder eben relativ zur Welt ) muss noch ein Orientation Constraint mit den selben zwei Targets eingerichtet werden. wichtig: auch hier muss die gleiche Reihenfolge eingehalten werden!!! Also hier zuerst Point_HLP_Link2World und als zweites Target Point_HLP_Link2Spine.

Um jetzt bequem zwischen den beiden möglichen Parent-Positionen hin und her schalten zu können wird in das CTRL_Hand Objekt ein Regler eingebaut, der per Parameter Wiring die Gewichtung der PositionContraint Targets ändert. Am Ende hat man dann nur noch das CTRL_Hand objekt zu animieren und findet dort alle Parameter für World/Local und später auch sämtliche Kontrollen der Finger.

Als Träger/Container für diese Parameter bekommt das CTRL_Hand Shape den 'Attribute Holder' Modifier zugewiesen. Das ist zunächst nur ein Platzhalter, der nichts anderes macht, als platz für kommende Attribute/Parameter Regler (Slider oder Spinner) zur Verfügung zu stellen.

Nun müssen diese Attribute (Regler) definiert und erstellt werden: Im Menü Animation/Parameter Editor öffnet sich der Parameter Editor, mit dessen Hilfe der Regler zum Wechsel zwischen Fixierten Händen (World) und relativ zur Wirbelsäule arbeitenden Händen (Lokal) erstellt wird.

Der Neu definierte Spinner World/Lokal ist noch ohne jede Funktion. Die muss jetzt mit Parameter Wiring implementiert werden.

Nochmal kurz zum Verständnis: der Regler soll den Prozentwert der Gewichtung zwischen den Constraint-Targets steuern (Weight).
Das erste Target definiert den Link2World Status, das zweite den Link 2Spine Status und zwar sowohl für die Orientierung als auch die Position.
Der SpinnerWert des Custom Attributes 'World/Lokal' muss also mit den Position und Orientation Constraint Weight 0 (World) und Weight 1 (Lokal) Werten des Point_HLP_Tween Objektes verbunden werden.

Mit einem Rechtsklick auf dem selektierten CTRL_Hand Objekt öffnet sich das QuadMenü mit dem Parameter Wiring Befehl. Jetzt muss man sich in dem Wiring dialog zu dem gewünschten, zu verbindenden, Parameter durchhangeln, hier ist es

Modified Object/Attribute Holder/Custom Attributes/World/Lokal

Dann muss der damit zu verbindende Parameter definiert werden: Also auf den Point_HLP_Tween klicken und dort auf:

Transform/Position/Position Constraint/Position Weight 0

Daraufhin öffnet sich das Wiring Dialogfenster, in dem auch die weiteren Verknüpfungen gemacht werden können. Hier wird nun definiert in welche Richtung die Verbindung der Werte stattfinden soll, wer Master und wer Slave ist. Das Custom Attribute soll hier Master sein und die Werte für Wieght 0 diktieren.

Das gleiche Custom Attribute soll aber auch den Wert für Weight 1 vorgeben. Allerdings muss Weight 1 bei 0 liegen wenn Weight 0 bei 100 ist und umgekehrt. Eine kleine mathematische Erweiterung erledigt das :

Einfach den aktuellen Parameter Wert von 100 subtrahieren lassen. Dann ist die Summe aus Weight 0 und Weight 1 immer 100%

Das Gleiche muss nun noch für die Rotation Weights wiederholt werden.

04 Finger

Um nicht jeden FingerBone einzeln animieren zu müssen ist folgende Methode hilfreich: Per Parameter Wiring soll die Rotation des ersten Fingergliedes auf die Nachfolgenden übertragen werden. So muss nur der unterste Bone, bzw. ein CTRL-Shape animiert werden um den ganzen Finger zu bewegen.

Damit das richtig funktioniert sind ein paar Vorbereitungen nötig:
Ein CTRL-shape 'CTRL_Finger_Index_R' , das am untersten Fingerglied aligned ist und ein Null-Helper 'Point_Null_Finger_Index_R' , ebenfalls aligned am untersten Finger-Bone. Der Point_Null Helper wird an den Handknochen gelinkt, das CTRL_Finger Objekt wiederum an den Null-Helper und der Finger-Bone an das CTRL_Finger Objekt.

Nun werden alle Objekte in der Fingerhierarchie ausgewählt (doppelklick auf den Point_Null-Helper) und mit ALT+Rechtsklick im Animation-Quadmenü 'Freeze Rotation' gewählt.

Dadurch wird die aktuelle Rotation der Bones (im Initial Pose Controller) gespeichert und ein weiterer Controller ( Keyframe XYZ ) nimmt die kommenden Rotationen auf.

Somit ist alles für das Parameter Wiring vorbereitet. Die Y-Achse des CTRL_Finger_Index_R soll mit der Y-Achse des zweiten Finger-Bones verbunden werden, sodass dieser die Rotation des CTRL-Shapes übernimmt und zusätzlich noch die Drehung des übergeordneten Bones. Es gibt also eine doppelte Rotation.

Genauso wird die Y-Achse des zweiten Bones die Y-Rotation des letzten Fingergliedes bestimmen (Der Nub-Bone ganz am Ende kann hier glöscht werden).

Dadurch rollt sich der Finger ein wenn das CTRL-Shape rotiert wird.

Das Ganze jetzt noch für die verbleibenden Finger wiederholen und das Rig ist fast fertig.

Ein paar Problemzonen gibt es noch die mit den bereits bekannten Werkzeugen leicht behoben werden können:

Der Unterarm besteht im echten Leben ja aus Elle und Speiche, die sich um ca 180 Grad verdrehen können, das Handgelenk selbst ist eigentlich nur um 2 Achsen beweglich. In dem Jetzigen Rig ist die Verdrehung des Unterarmes beim Drehen der Hand um die Längsachse noch nicht implementiert, was zu unschönen Verzerrungen im geskinnten Mesh führt.

Abhilfe schaffen 4 Bones die alle an den Unterarm gelinkt werden und per Parameter Wiring mit unterschiedlichen Multiplikatoren die (X) Rotation der Hand gleichmässig entlang des Unterarms verteilen.

Jetzt verläuft dir X Rotation des Unterarms schrittweise zum Ellenbogen hin aus: der erste WristTwist Bone übernimmt noch fast die ganze Drehung der Hand, der zweite WristTwistBone noch die Halbe, der Dritte nur noch 20% und der letzte WristTwist Bone dreht sich schliesslich gar nicht mit der Hand mit. Beim Skinnen des Characters werden dann nur diese WristTwist-Bones berücksichtigt, der eigentliche Unterarm-Bone dient nur noch als Träger dieser Bones und wird beim Skinning ignoriert.

Als letzes fehlt nur noch das CTRL_MASTER_Pos Objekt, das zum plazieren und verschieben des Characters dient. An dieses CTRL-Shape werden dann das CTRL_Hip, die CTRL_Foot und die Point_HLP_Link2World Helper gelinkt.

viel Spass beim riggen!

Ich hoffe ich konnte mit diesem kleinen Tutorial ein wenig helfen.