Teil 2: IK-Setup

Ob wir jetzt fertig sind? Mitnichten, wir fangen gerade erst an, und zwar mit einer Vielzahl von Komponenten, die wir für unser IK-Setup benötigen werden. Als Erstes sind hier natürlich die IK-Solver zu nennen. 3ds max bietet die vier folgenden IK-Solver-Typen an:

  • History Dependent Solver: Dieser Solver wurde in den früheren Versionen von 3ds max eingesetzt und sollte aus Performance-Gründen wenn überhaupt nur für kurze Sequenzen oder technische Animationen genutzt werden. Der Algorithmus berechnet die Rotation der Gliedmaßen mittels der zugrunde liegenden Bewegungsgeschichte, also basierend auf vorherigen Keyframes. Je länger die Animation dauert, desto weiter muss dieser zurückgehen und benötigt dementsprechend mehr Zeit für die Berechnung der IK-Solution.
  • Limb Solver: Aufgrund der guten Performance- Eigenschaften im Viewport und der Exportmöglichkeiten zu Game-Engines wird dieser im Spielebereich genutzt. Der Limb Solver unterstützt allerdings nur Bone-Ketten mit nicht mehr als zwei Elementen.
  • History Independent Solver: Der HI-Solver ist schnell, zuverlässig und unterstützt mehrere IK-Ketten innerhalb einer Hierarchie - also das Mittel der Wahl für unsere Belange.
  • Spline Solver: Seit Release 5 ist der Spline Solver endlich auch Bestandteil von 3ds max, damit sind wir im Hinblick auf Solver-Reichtum gleichauf mit Maya. Wie der Name schon sagt, wird die Verformung der Bone-Kette über ein Spline gesteuert. Die Vertices auf dem Spline werden Nodes genannt und automatisch mit einem Helper- Objekt, so genannten “Nodes”, versehen. Die Anzahl der Nodes muss nicht mit der Zahl der Bones übereinstimmen. Deren Position bestimmt die Form des Splines und damit die Kurvatur der Bone-Kette - Rotation oder Skalierung haben auf diese keinerlei Effekt.

Neben den IK-Solver-Typen werden wir auf Animation Constraints zurückgreifen. Diese werden uns behilflich sein, die Position, Rotation oder Skalierung eines Objekts durch die Kopplung an ein anderes zu kontrollieren. Objekt “A” wird an “B” gekoppelt und übernimmt dessen Position oder Rotation. Mehrere “Constraints” können mittels unterschiedlicher Gewichtung auf ein Objekt Einfluss nehmen. Die folgenden “Constraints” werden wir verwenden:

  • Position Constraint: Das Objekt folgt der Bewegung des Objekts, an das es angekoppelt wurde.
  • Look-at Constraint: Die Orientierung wird stets auf das Objekt ausgerichtet, an das dieses gekoppelt wurde.
  • Orientation Constraint: Die Rotation eines Objekts folgt der Rotation des Objekts, an das dieses gekoppelt wurde.

Abgerundet wird das Setup mit einigen Custom Attributes, individualisierten Tools, die mittels Parameter-Wiring bidirektional “Controller” miteinander verdrahten und den Einsatz von Expressions unterstützen.

IK-Setup anlegen

Los geht es mit einem Spline-IK-Solver, mit dem wir die Kurvatur der Wirbelsäule steuern werden. Wir erstellen hierzu im linken Konstruktionsfenster ein Spline (Initial-/Drag-Type: Smooth), das aus vier Vertices besteht, die jeweils am Pivot der Spine-Bones positioniert werden. Die Ausgangssituation ist einsehbar in der Szene “IK_01_start.max”.

Wir selektieren den Bone “nils_spine1”, aktivieren im Animationsmenü unter IK Solvers die Option Spline IK (eine gestrichelte Linie entsteht), wählen “nils_spine3_nub” als Ende der IK-Kette aus. Um den Vorgang abzuschließen, müssen wir noch ein Control Spline anwählen. Ist dies getan, werden auf der Position der Vertices automatisch Helper-Objekte, auch “Nodes” genannt, generiert. Der Spline IK Solver ist jetzt einsatzbereit und kann nach Belieben durch die “Nodes” verformt werden.

Siehe Szene “IK_02_spine_a.max”.

Jetzt müssen die Spline-IK-Solver-Komponenten noch benannt werden. Den Solver (das blaue Kreuz) nennen wir “IKchain_spine”, die Helper- Objekte “nils_IKspine_helper1” bis “nils_IKspine_ helper1” und das Spline “control_spline”. Dann erstellen wir das Point Helper-Objekt und aktivieren die folgenden Display-Optionen: Center Marker • Box, Size • 10.

Den Point Helper benennen wir “nils_IKspine_ constraint” und positionieren diesen mittels dem Align-Tool in XYZ auf den Bone “nils_ spine_1” (Current-/Target-Object: Pivot Point). Immer noch selektiert, wählen wir aus dem Animationsmenü unter Constraints die Option Link Constraint aus (eine gestrichelte Linie entsteht) und koppeln das Point Helper-Objekt durch einen Mausklick an den “pelvis”-Bone. Wenn wir nun den “pelvis” bewegen oder rotieren, folgt der Point Helper. Als Letztes binden wir das Root “nils_IKspine_helper1” mittels des Link-Tools an das “Point Helper”-Objekt.

Siehe Szene “IK_03_spine_b.max”.

Nachdem wir den einfachen Teil bewältigt haben, folgt nun das IK-Setup für den Arm. Von hier an kann es stellenweise vielleicht etwas kompliziert werden, da diverse Schritte nur schlecht visualisierbar sind. Wir selektieren den Bone “nils_upperarmRT”, wählen im Animationsmenü unter IK Solvers die Option HI Solver (eine gestrichelte Linie entsteht) aus und selektieren “nils_ forearmRT_nub” als Ende der IK-Kette. Über das entstandene Kreuz, das so genannte IK-Goal, kann der Arm jetzt bewegt werden.

Als Nächstes erstellen wir zwei Point Helper- Objekte. Das erste nennen wir “nils_hand_noInheritRT” und vergeben die folgenden Darstellungseigenschaften CenterMarker, Box • Size • 10. Das zweite nennen wir “nils_handcontrolRT”, aktivieren Box und stellen Size • 10 ein. Die Point Helper positionieren wir mittels des Align-Tools auf den Bone “nils_ forearm_nub”. Im Align-Dialog aktivieren wir in Align Position Local alle Achsen, unter Current-/Target-Object • Pivot Point und in Align Orientation Local ebenfalls alle Achsen. Die Helper sind jetzt korrekt ausgerichtet.

Wir selektieren “nils_hand_noInheritRT”, das “noInherit” steht für die Nichtweitergabe der Rotationsachsen, binden diesen über das “Link”-Tool an den “nils_ forearmRT”-Bone und deaktivieren anschließend im Hierarchie-Panel unter Link Info alle Rotationsachsen in der Inherit- Sektion.

Nachdem die Rotationen des Arms nicht mehr an die Hand weitergegeben werden, müssen wir jetzt die Grundlage für eine bessere Handkontrolle schaffen. Hierzu selektieren wir das Point Helper-Objekt “nils_handcontrolRT” und binden dieses an den “nils_hand_noInheritRT”- Helper. Danach wählen wir alle Hand-Bones (nils_hand1RT, nils_hand2RT usw.) aus und binden diese wiederum an den “nils_handcontrolRT”-Helper.

Siehe Szene “IK_04_arm.max”.