Wie IK-Fußziele beim Bewegen des Charakters an ihrer Position bleiben
Damit die IK-Füße an ihrer Position bleiben, halte die Weltposition jedes Fußziels konstant, während du die Körpersteuerung des Charakters bewegst. Lass den Beinsolver die Gelenke zwischen dem bewegten Körper und dem festen Ziel anpassen. Wenn ein Ziel Bewegungen des Körpers übernimmt, trenne diese Transformationsbeziehung oder gleiche sie vor der IK-Berechnung aus.
Diese Anleitung richtet sich an Kreative, die einen geriggten virtuellen Charakter posieren möchten, dessen Körper wippen, sich neigen oder verschieben soll, während beide Füße an ihrer Position bleiben. Der folgende Workflow kombiniert dokumentiertes Verhalten von Transformationen und IK mit einer praktischen Diagnoseabfolge. Unity- und Godot-Begriffe dienen als konkrete Bezugspunkte.
Warum bewegen sich Fußziele mit dem Körper?
Ein Ziel kann unveränderte lokale Koordinaten haben und sich trotzdem durch die Szene bewegen. Lokale Transformationen beschreiben ein Objekt relativ zu seinem übergeordneten Objekt. Bewegt sich also ein übergeordnetes Objekt, ändert sich auch die Welttransformation des untergeordneten Objekts. Godot dokumentiert diesen Unterschied anhand von transform und global_transform. 3D-Transformationen verwenden — Godot Engine
Blende zunächst die Steuerungen der Fußziele ein und bewege den Körper leicht zur Seite. Beobachte die Ziele unabhängig von den sichtbaren Füßen. Bewegt sich ein Ziel mit dem Körper, prüfe seine übergeordneten Objekte: Es könnte dem Becken, der Körpersteuerung oder einer anderen beweglichen Gruppe untergeordnet sein.
Beurteile den Aufbau nicht allein anhand der Felder für die lokale Position. Notiere die Weltposition des Ziels vor und nach der Bewegung. So lassen sich zwei wichtige Fragen unterscheiden: Hat das Ziel seine vorgesehene Position verlassen, oder ist das Bein einem stationären Ziel nicht gefolgt?
Wie solltest du die Körper- und Fußsteuerungen organisieren?
Verwende getrennte Steuerungszweige für Körperbewegungen und fixierte Fußziele. Ein praktischer Aufbau ordnet das Skelett und die Körpersteuerungen einem Zweig zu und die linken und rechten Fußziele einem anderen Zweig unter einer stationären Szenensteuerung. Entscheidend ist, dass die Körpersteuerung, die du bewegst, den Zweig mit den Zielen nicht mitbewegt.
Eine gemeinsame übergeordnete Charaktersteuerung kann weiterhin beide Zweige enthalten, wenn du nur den darunterliegenden Körper bewegst. Bewegst du jedoch diese übergeordnete Steuerung, verschieben sich beide Zweige. Entscheide vor der Wahl der Steuerung, ob du „den Körper über den fixierten Füßen verschieben“ oder „den gesamten Charakter versetzen“ möchtest.
Wenn die Anwendung eine unabhängige Vererbung von Transformationen unterstützt, bietet das eine weitere Möglichkeit. Beispielsweise sorgt Node3D.top_level in Godot dafür, dass ein Knoten die Transformationen seines übergeordneten Knotens nicht mehr übernimmt. Dies ist eine dokumentierte Transformationsfunktion; sie konfiguriert nicht von selbst einen IK-Solver. Node3D — Godot Engine
Wenn du das übergeordnete Objekt eines Ziels oder den Vererbungsmodus änderst, bewahre seine bestehende Weltpose. Notiere zuerst seine Weltposition und -ausrichtung, ändere dann die Beziehung und stelle anschließend diese Pose wieder her. Überprüfe das Ergebnis, bevor du den Körper erneut bewegst.
Was ist, wenn das Ziel einem beweglichen übergeordneten Objekt untergeordnet bleiben muss?
Speichere die fixierte Weltpose unabhängig und berechne die erforderliche lokale Pose des Ziels anhand der aktuellen Transformation des übergeordneten Objekts. Für die Position gilt: lokale Position des Ziels = inverse aktuelle Welttransformation des übergeordneten Objekts × gespeicherte Weltposition des Ziels. Unity bietet die Umrechnung von Welt- in lokale Koordinaten mit InverseTransformPoint. Transform.InverseTransformPoint — Unity
Betrachte ein vereinfachtes Beispiel, in dem nur Verschiebungen vorkommen. Ein Ziel ist bei Welt-X = 1.0 fixiert, und sein übergeordnetes Objekt beginnt bei X = 0.0. Seine lokale X-Position beträgt daher 1.0. Verschiebe das übergeordnete Objekt auf X = 0.3. Damit das Ziel bei Welt-X = 1.0 bleibt, muss seine lokale X-Position nun 0.7 betragen. Bleibt die lokale X-Position bei 1.0, verschiebt sich das Ziel auf Welt-X = 1.3.
Diese Subtraktion funktioniert nur im vereinfachten Beispiel. Bei einem gedrehten oder skalierten übergeordneten Objekt ist die vollständige Transformationsumrechnung erforderlich. Unitys TransformPoint rechnet eine lokale Position in den Weltraum um und berücksichtigt ausdrücklich die Skalierung. Deshalb sollte für die Positionsumrechnung eine Punkt- und keine Richtungsoperation verwendet werden. Transform.TransformPoint — Unity
Speichere die fixierte Pose, sobald der Fuß in den fixierten Zustand wechselt. Verwende diesen gespeicherten Wert weiter, während sich der Körper bewegt. Wenn du das Ziel erneut speicherst, nachdem es die Bewegung übernommen hat, wird die Abweichung einfach zum neuen Referenzwert. Muss auch die Ausrichtung unverändert bleiben, bewahre neben der Position ebenso die Ausrichtung des Ziels und rechne sie um.
Wie richtest du die Bein-IK so ein, dass sie den Zielen folgt?
Prüfe die Kettenzuweisungen des Solvers, bevor du eine große Poseänderung testest. In Unity Animation Rigging 1.4.1 verwendet Two Bone IK die Transforms Root, Mid und Tip, ein Target und optional einen Hint. Bei einem einfachen Charakterbein mit zwei Segmenten entsprechen diese dem Oberschenkelgelenk, dem Kniegelenk und dem Sprunggelenk. Der Hint steuert die Beugerichtung. Two Bone IK — Unity Animation Rigging
Verwende für den ersten Test den vollen Einfluss der Constraint und den vollen Positionsanteil des Ziels. Prüfe den Einfluss der Zielrotation separat. Unity bietet dafür getrennte Gewichtungen, sodass sich das Folgen der Position und das Anpassen der Ausrichtung unabhängig voneinander testen lassen. Die Einstellung „Maintain Target Offset“ in Unity bewahrt einen anfänglichen Positions- oder Rotationsunterschied zwischen dem Kettenende und dem Ziel. Two Bone IK — Unity Animation Rigging
Richte die Ziele vor dem Aktivieren der Constraints an den vorgesehenen Sprunggelenkposen aus. Wenn du bewusst einen Versatz verwendest, halte fest, wofür er steht. Ein unerklärter anfänglicher Versatz erschwert spätere Vergleiche zwischen Ziel und berechnetem Gelenk.
Lege mit dem Hint oder dem Pol-Steuerelement die gewünschte Kniebeugung fest und bewege dann den Körper ein wenig. Achte darauf, dass die Position des Hints während des Tests nachvollziehbar bleibt. Wenn du Ziel, Körper und Beugungssteuerung gleichzeitig veränderst, ist es schwieriger, die Ursache eines unerwarteten Ergebnisses zu erkennen.
Wie weit kann sich der Körper bewegen, während beide Füße fixiert bleiben?
Feste Ziele machen nicht jede Körperposition erreichbar. Bei einer idealen Kette aus zwei Segmenten mit uneingeschränkten Gelenken und ohne Dehnung muss der Abstand zwischen Beinansatz und Ziel aus geometrischen Gründen zwischen |Länge des oberen Segments − Länge des unteren Segments| und Länge des oberen Segments + Länge des unteren Segments liegen. Tatsächliche Gelenkgrenzen können diesen Bereich verkleinern.
Bei einem beispielhaften Charakter mit Segmentlängen von 0.45 und 0.45 Szeneneinheiten beträgt die maximale geometrische Reichweite 0.90 Einheiten. Befindet sich die Hüfte 0.80 Einheiten über dem Sprunggelenkziel und 0.30 Einheiten horizontal davon entfernt, beträgt der Abstand √(0.80² + 0.30²), also ungefähr 0.854 Einheiten. Das liegt im idealen Bereich. Vergrößert sich der horizontale Abstand auf 0.50 Einheiten, beträgt er ungefähr 0.943 Einheiten und liegt damit außerhalb dieses Bereichs.
Nutze diese Berechnung, um ein Reichweitenproblem von einem Transformationsproblem zu unterscheiden. Bleibt das Ziel fixiert, kann die Kette es aber nicht erreichen, reduziere die Körperbewegung oder positioniere den Körper so, dass beide Beine ihre Ziele erreichen können. Beurteile jedes Bein einzeln: Eine seitliche Verschiebung kann ein Ziel näher heranbringen und das andere zugleich weiter entfernen.
Lass in der ersten funktionierenden Pose beide Beine sichtbar gebeugt und teste nur kleine Bewegungen. Vergrößere den Bewegungsbereich des Körpers erst, nachdem du geprüft hast, an welchen Stellen jedes Bein an seine Reichweitengrenzen kommt. Betrachte diesen Bereich als rig-spezifisches Ergebnis, statt einen Verschiebungswert von einem anderen Charakter zu übernehmen.
Wie bleibt der ganze Fuß fixiert und nicht nur das Sprunggelenk?
Lege fest, was „fixiert“ für dein Rig bedeutet. Ein stationäres Sprunggelenkziel legt die Position eines Gelenks fest, aber auch die Ausrichtung des Fußes muss berücksichtigt werden. Ein Kontaktpunkt an der Sohle und ein Drehpunkt am Sprunggelenk sind unterschiedliche Bezugspunkte. Bewahre beim Platzieren der Steuerung den vorgesehenen Versatz zwischen ihnen.
Ein nützlicher Diagnosetest besteht darin, die Position des Sprunggelenks konstant zu halten und nur den Körper zu drehen. Beobachte Ferse und Zehen. Bewegen sie sich um das Sprunggelenk herum, prüfe die Steuerungen für die Fußausrichtung und etwaige separate Zehensteuerungen. Dieser Test trennt den sichtbaren Bodenkontakt von der Zielposition.
Speichere die vorgesehene fixierte Ausrichtung zusammen mit der Position. Vergleiche während der Körperbewegung beide Werte mit der gespeicherten Pose. Godots Dokumentation zu Transformationen erklärt, dass eine Transformation einen Ursprung mit einer Basis kombiniert, die Ausrichtung und Skalierung darstellt. Das hilft dabei, eine vollständige Pose zu verstehen. 3D-Transformationen verwenden — Godot Engine
Wie kannst du Rutschen in einer wiederholbaren Reihenfolge diagnostizieren?
Verwende die folgende Abfolge als praktische Diagnosehilfe, abgeleitet aus dem oben beschriebenen Verhalten von Transformationen und Solvern. Ändere jeweils nur eine Bedingung und beginne mit der kleinsten Körperbewegung, die das Problem hervorruft.
| Beobachtung | Zuerst prüfen | Nächster Schritt |
|---|---|---|
| Das Ziel bewegt sich mit dem Körper | Bewegliche übergeordnete Objekte und vererbte Transformationen | Steuerungszweige trennen oder die gespeicherte Weltpose wiederherstellen |
| Das Ziel bleibt fixiert, das Sprunggelenk verfehlt es | Kettenzuweisungen, Positionseinfluss und Reichweite | Aufbau überprüfen und dann die Körperbewegung verringern |
| Das Sprunggelenk bleibt fixiert, Ferse oder Zehen bewegen sich | Fußausrichtung und Kontaktversatz | Die vorgesehene fixierte Ausrichtung wiederherstellen |
| Das Knie beugt sich unerwartet in eine andere Richtung | Position des Hints oder Pols | Die Beugungssteuerung bei geringer Körperbewegung testen |
| Das Ergebnis unterscheidet sich zwischen Ziehen und Wiedergabe | Welches System welche Steuerung wann verändert | Die berechneten Transformationen während der Wiedergabe untersuchen |
Verwende für einen animierten oder prozeduralen Aufbau eine klare Abhängigkeitsreihenfolge: Lege die Körperpose fest, stelle die gespeicherten Ziele wieder her oder rechne sie um und berechne dann die Bein-IK. Prüfe, wie deine Anwendung diese Vorgänge zeitlich einordnet. Ein Callback-Name allein belegt nicht, dass der Solver das aktualisierte Ziel während derselben Auswertung verwendet.
Schließe den Test mit einer kurzen Schleife ab: Verschiebe den Körper zur Seite, senke ihn ab, drehe ihn leicht und kehre zur Ausgangspose zurück. Vergleiche währenddessen die Weltpose jedes Ziels mit seiner gespeicherten Referenz. Sobald die Ziele fixiert bleiben, kannst du die übrigen Anpassungen gezielt vornehmen: erreichbare Körperbewegungen, eine gleichbleibende Kniebeugungsrichtung und die Fußausrichtung, die für den gewünschten Kontakt erforderlich ist.
