Blender Dokumentation: Soft Bodies: Kollisionen
Diese Seite bezieht sich auf Blender v2.43 |
Es wird zwischen zwei verschiedenen Kollisionstypen unterschieden - der Kollision mit anderen Objekten und der Kollision des Objektes mit sich selbst.
Kollisionen mit anderen Objekten
BearbeitenDamit ein Softbodyobjekt mit einem anderen Objekt kollidieren kann, müssen zwei Voraussetzungen erfüllt sein:
- Beide Objekte müssen einen Layer teilen.
- Ein Beispiel: der Softbody befindet sich auf Layer 1 und 2, das Kollisionsobjekt befindet sich auf Layer 2. Gerendert wird Layer 1. Dann ist das Kollisionsobjekt unsichtbar.
- Für das Kollisionsobjekt muss die Option Deflection auf dem Soft Body Collision oder auf dem Fields and Deflection Panel in den Physics-Buttons aktiviert sein (Abbildung 1). Benutzen Sie nicht Ev.M.Stack (Evaluate Modifier Stack) wenn das Kollisionsobjekt einen SubSurf-Modifier trägt. Die Strafe wären extrem hohe Softobdyberechnungszeiten.
Motivierende Beispiele
BearbeitenProbiert man das ganze mit einem Würfel (Softbody anstellen, Goal ausstellen) und einer größer skalierten Ebene aus, funktioniert das eigentlich auch ganz gut, bis auf die Tatsache, dass der Würfel immer noch nachzittert, und später aufgrund fehlenden Zusammenhalts in sich zusammenfällt (Abbildung 2).
Ein Würfel lässt sich mit der Option StiffQuads recht stabil machen. Das Zittern liegt an der zu geringen Berechnungsgenauigkeit der Softbody Simulation. Diese wird vorsichtig erhöht, indem man den Parameter MinS auf dem Soft Body Collision-Panel auf 40 stellt (Ergebnis in Abbildung 3).
Dreht man das ganze System aber auf den Kopf, und lässt eine Softbody-Ebene auf einen Würfel fallen, durchdringt die Ebene den Würfel problemlos (Abb. 4). Und es gibt keine einzige Einstellung in Blender, die das vollständig verhindern wird.
Um zu verstehen warum das so ist, und wie man jemals eine vernünftige Animation hinbekommen kann, schauen wir uns an, wie die Kollisionen berechnet werden.
Wie die Kollisionen berechnet werden
BearbeitenNur noch mal zur Erinnerung: die Softbody Berechnung wird (zunächst ausschließlich) auf der Ebene der Vertices durchgeführt. Solange dann nicht mindestens ein Vertex des Softbody-Objektes mit dem Kollisionsobjekt zusammenstößt, werden sich beide Objekte einfach durchdringen.
In Abbildung 5 ist gezeigt, wie ein Vertex eines Softbody-Objektes mit einer Fläche kollidiert. Dringt ein Vertex in die durch die Deflection-Parameter Outer und Inner definierte Zone ein, wird er durch eine Kraft in Richtung der Flächennormalen wieder zurückgestoßen. Da in diesem Fall die Schwerkraft weiter auf den Vertex wirkt, wird der Vertex nicht bis zum äußeren Rand der Outer-Zone zurückgestoßen, sondern nur so weit, bis sich die beiden Kräfte aufheben. Die Geschwindigkeit mit der ein Vertex zurückgestoßen wird, kann mit dem Parameter Choke (Abbildung 8) eingestellt werden.
Nun wollen wir uns anschauen was passiert, wenn der Vertex schneller und schwerer ist, auf ihn also eine größere konstante Kraft wirkt. In Abbildung 6 haben die Vertices eine unterschiedliche Geschwindigkeit, die beiden Vertices rechts außen sind so schnell, dass Sie die Kollisionszone durchqueren, bevor ihre Anwesenheit in ihr "bemerkt" wird. Der zweite, dritte und vierte Vertex von links sind so schwer, dass sie voll in die Kollisionszone eintauchen, Vertex 4 ist sogar so schwer, dass er durch die Fläche des kollidierenden Objektes nach innen vordringt.
Aber nicht nur Vertices können kollidieren, auch Edges und sogar Flächen des Softbody-Objektes sind zur Kollision fähig (Abbildung 7). Die Kollisionsabfrage erfolgt aber nicht im Volumen Outer und Inner, sondern es wird überprüft, ob es einen Schnittpunkt mit einer Fläche des kollidierenden Körpers gibt. Sind die Flächen parallel zueinander, gibt es keinen Schnittpunkt, daher funktioniert auch das Beispiel aus Abbildung 4 nicht, die Flächen sind dort parallel zueinander.
Richtig kollidieren lassen
BearbeitenFür fehlerhafte Kollisionsberechnung gibt es also unterschiedliche Gründe, und unterschiedliche Lösungsansätze.
Es gibt keine bessere Methode fehlerhafte Kollisionen zu heilen, als sorgfältig gesetzte Loopcuts für das Softbody-Objekt!
- Das Softbody-Objekt muss stärker unterteilt sein als das kollidierende Objekt.
- Achten Sie auf die richtige Ausrichtung der Flächennormalen. Sie bestimmen die Richtung, in der der Softbody bewegt wird.
- Das kollidierende Objekt darf keine scharfen Spitzen aufweisen, da diese sonst den Softbody durchdringen.
- Die zeitliche Auflösung der Softbody-Berechnung muss an die Geschwindigkeit der Softbody-Vertices angepasst sein. Verringern Sie zunächst den Parameter Error Lim, und erhöhen dann den Parameter MinS vorsichtig.
- Die Outer- und Inner-Zonen des Collision-Objektes müssen ausreichend groß sein, die Zonen gegenüberliegender Faces dürfen sich aber nicht überlappen.
- Wirken starke Kräfte, müssen die Zonen groß genug gewählt werden.
- Stellen Sie den Choke-Parameter hoch genug ein, wenn Schwierigkeiten mit zu stark zurückprallenden Edges oder Faces auftreten. Choke bremst die Zurückstoßung.
- Colliding Faces sind extrem schwer zu kontrollieren. Benutzen Sie sie nicht.
Der beste Tip kann daher nur lauten, nicht direkt mit einem eventuell kompliziert geformten Mesh kollidieren zu lassen, sondern ein einfacher aufgebautes Ersatzobjekt zu benutzen, das nicht mitgerendert wird. Das ist natürlich leichter gesagt als getan, insbesondere wenn das Mesh animiert ist.
Self Collision
BearbeitenDie Voreinstellungen funktionieren eigentlich sehr gut. Einfach anschalten.
Links
BearbeitenDie Kollisionsparameter vom Programmierer erklärt.