Blender Dokumentation: Soft Bodies: Kombination mit Armatures
Diese Seite bezieht sich auf Blender v2.43 |
Schaukel
[Bearbeiten]Eine Schaukel kann man leicht über eine Animation von Hand realisieren, das hier gezeigte System taugt aber auch für ein Bungee-Seil.
- Der Softbody besteht aus zwei durch eine Kante verbundene Vertices. Dazu entfernt man an einer Plane zwei Vertices.
- Der "obere" Vertex wird durch eine Goalgroup mit einem Gewicht von 1 an seinem Platz festgehalten.
- Das Objektzentrum liegt auf dem "oberen" Vertex (Abbildung 1). Dazu muss man entweder die Vertices, oder das Objektzentrum verschieben.
- Unter Use Goal wird die Goalgroup eingetragen. Da der Softbody waagerecht liegt, fällt der linke Vertex nach unten, schwingt nach rechts, wieder zurück usw.
Der Softbody kommt irgendwann zum Stehen, auch wenn man sämtliche Reibung ausschaltet. Um das zu verhindern, wird die Berechnungsgenauigkeit erhöht.
- MinS auf 50 stellen.
- Nun fügen wir eine Armature mit einem Bone hinzu, deren Objektzentrum auf dem Softbodyzentrum liegt.
- Die Spitze des ersten Bones wird auf das Ende des Softbodys gebracht.
Der Bone soll zusammen mit dem Softbody rotieren, das lässt sich aber nicht direkt erreichen, da Vertices nicht Target eines Constraints sein können. Stattdessen benutzen wir ein zusätzliches Empty.
- Man bringt den Cursor auf den letzten Vertex des Softbodys und fügt ein Empty hinzu.
- Im Edit-Modus wählt man den Vertex aus, dann mit Strg-RMT das Empty.
- Mit Strg-P macht man den Vertex zum Parent des Emptys.
Das Empty bewegt sich nun immer schön mit dem Vertex mit.
- Wählen Sie die Armature aus und bringen Sie sie in den Pose-Modus.
- Mit RMT wird das Empty ausgewählt, mit Shift-RMT der Bone der Armature.
- Mit Strg-I fügen Sie einen IK-Solver Constraint zum Bone hinzu.
Der Bone schwingt mit dem Softbody mit, allerdings kann sich der Softbody verlängern, der Bone noch nicht.
- Auf dem Armature Bones-Panel muss noch Stretch angestellt werden (auf 1).
Der Bone fängt an um seine y-Achse zu rotieren, wenn er den gegenüberliegenden Scheitelpunkt seiner Bahn erreicht hat.
- Mit LocYRot (wenn Sie die Objekte entsprechend angeordnet haben) gewöhnen wir dies dem Bone ab.
- Ein senkrecht zum ersten Bone extrudierter Bone liefert die Rotation für die Sitzfläche der Schaukel.
Die Idee den senkrecht stehenden Bone zum Parent der Sitzfläche zu machen funkioniert leider nicht, da die Bones ihre Größe ändern.
- Ein Copy-Location und ein Copy-Rotation Constraint sorgen für die Übertragung der Bewegung des Bones auf das Objekt.
Wenn Sie alle Objekte gleich ausrichten, das Objekt also die gleiche Ausrichtung hat wie der Bone im Pose-Modus, ersparen Sie sich Überraschungen bei der Rotation.
Die Aufhängung für die Schaukel sind auch Softbodys, diese werden aber von der Sitzfläche angetrieben. Zwei Hooks - je einer am Anfang und Ende der Schnur - sorgen für die auf die Objekte abgestimmte Bewegung.
Zyklische Abhängigkeit
[Bearbeiten]Im nebenstehend gezeigten Beispiel befindet sich eine Armature, die aus drei Bones besteht. Der Rootbone (SomeBone) dient dabei nur zur Positionierung seiner Childbones und besitzt ansonsten keine Funktion. An dem ParentToSoftbody benannten Bone wurde der Softbody geparentet. Dadurch bewegt sich der Softbody mit diesem Bone mit. Der Softbody selbst ist ein einfaches Konstrukt aus sieben Vertices die wie ein allseitiger Federschwinger fungieren. Die äußeren 6 Vertices halten dabei den Mittelpunkt fest, der in der Lage ist zu schwingen. Der verbliebene Bone AimsForVertex besitzt ein Track To Constraint, welches den Bone veranlasst per Vertexgroup-Target auf den Mittelpunkt des Softbodys zu zeigen.
Bewegt sich nun der Bone ParentToSoftbody wird ebenfalls der Softbody bewegt und bei der Simulation reagiert dessen Mittelpunkt (Vertex) träge auf die Positionsveränderung. Er fängt an zu schwingen. Der Bone AimsForVertex sollte nun in der Lage sein immer zum Mittelpunkt des Softbodies zu zeigen. Dies funktioniert allerdings nicht, da Blender von einer zyklischen Abhängigkeit ausgeht und somit keine Auswertung innerhalb eines Schrittes erfolgt. Folge dessen sind Instabilitäten und ein verzögertes Verhalten.
Möglicher Ausweg
[Bearbeiten]Eine Möglichkeit dieses Problem zu umgehen ist es eine weitere Armature zu verwenden. Diese beinhaltet in diesem Fall nur einen Bone und ersetzt den bestehenden Bone AimsForVertex'. Mit Hilfe des Copy-Location Constraints ist es möglich diesen Bone, unabhängig von der Position der zweiten Armature an einen der Bones zu verschieben. Er erhält zusätzlich das Track To Constraint und folgt nun ebenfalls dem Softbody. Dadurch kann der Bone ohne vermeintliche zyklische Abhängigkeit ausgewertet werden und folgt exakt und ohne Verzögerung seinem Ziel. Nachteilig daran ist jedoch, das ein Mesh in diesem Fall von zwei verschiedenen Armatures beeinflusst werden müsste.
Zusammenfassung
[Bearbeiten]- Softbody-Vertices können zum Vertex-Parent eines Emtpys gemacht werden, dieses Empty dient als Target eines IK-Solvers.
- Mit Bone-Stretching können sich Bones der Längenänderung eines Softbodies anpassen.
- Wenn die Bones ihre Größe ändern können, kann man einen Bone nicht mehr zum Parent eines statischen Objektes machen. Über weitere Constraints kopiert man die entsprechenden Eigenschaften auf das Objekt.
- Um einen Softbody an ein Armature getriebenes Objekt zu binden, können Sie einen Hook benützen.