Blender - Handbuch zur Spiel-Engine: Der Umgang mit Bullet
Diese Seite bezieht sich auf Blender v2.45 |
Tipps im Umgang mit Bullet
Bearbeiten1. Vermeide Skalierungen
Möglichst keine skalierten Objekte verwenden, Skalierungen immer mit [Strg+A] anwenden. Wenn Sphere-Bounds verwendet werden, sicherstellen dass der Radius des Bounds (gestrichelte Linie) zur Größe der Sphere passt. (siehe Bild)
2.Massen von dynamischen Objekten ähnlich halten
Wenn ein Objekt mit 100 kg auf einem Objekt mir 0.1 kg liegt, wird die Simulation Probleme damit haben. Um diese großen Unterschiede zu vermeiden, die Massen der Objekte ähnlich halten (im Bereich von einigen kg).
3.Den richtigen Bounds-Typ zuordnen
Für einen Zylinder wählt auch eine zylindrische Bounding Box, sogar für unbewegliche Objekte. Das 12.Gleiche bei einem Quder usw... Convex Hull kann sowohl für statische als auch dynamische Objekte eine gute Wahl sein.
4.Verwende nicht zu viele Vertices pro Convex Hull
4-32 Vertices sollten reichen.
5.Die Objekt-Center sollten im Mittelpunkt des Objekts sein
Siehe Bild. Sicherstellen, dass sich die Objekt-Center auch wirklich im inneren des Objekts befinden und nicht ausserhalb.
6.Die Gravitation auf 10 belassen
Die Physik-Simulation funktioniert besser mit kleiner Erdanziehung, also wann immer möglich, die Erdanziehung (Grav in den World-Buttons) nicht größer als 10 machen.
7.Sehr kleine dynamische Objekte vermeiden (<0.2 Units)
Objekte, die kleiner als 0.2 Blender Units sind, können zu Problemen führen.
Die Default-Einstellung der Schwerkraft ist: 1 Meter = 1 Blender Unit, für eine korrekte Physikberechnung sollten Objekte mindestens diese Größe haben.
8.Keine riesigen Objekte
Vermeide große Objekte oder Triangles(Dreiecke).
9.Keine degenerierten Triangles verwenden
Triangles mit sehr langen sowie sehr kurzen Seiten können zu Problemen führen.
10.Das Objekt bewegt sich nach einigen Sekunden nicht mehr
Man kann Objekte manuell reaktivieren, mit dem Python-Kommando "object.restoreDynamics".
Oder man aktiviert den No sleeping Button, man muss damit allerdings sparsam umgehen, zB nur für den Hauptcharakter usw.
11.Wie man ein Fahrzeug erstellt
TODO
12.Hinzufügen dynamischer Objekte als Children funktioniert nicht
Dynamische Objekte sollten keinen Parent haben. Wenn es nötig ist eine Gruppe Rigid Bodies hinzuzufügen, seht mal in die addObject2.blend Demo, da wird die Methode "instantAddObject" am AddObjectActuator verwendet.
Wenn ein komplexes Setup mit Constraints benötigt wird (Ragdoll oder Fahrzeug), kann man dieses nicht mit einem AddObjectActuator realisieren. Entweder man nutzt Python um die Constraints nach dem Hinzufügen der Objekte zu erstellen, oder man wartet auf ein zukünftiges "Constraint Userinterface" in Blender.
13.Da ist ein kleiner Spalt zwischen Boden und dem Objekt
Außer für Box- und Sphere-Bounds gibt es diesen Spalt tatsächlich (0.04 Default).
Er erlaubt es der Physik-Simulation stabiler und glatter abzulaufen.
Obwohl es nicht empfohlen ist, kann man diesen Spalt mit Python verkleinern:
controller = GameLogic.getCurrentController()
owner = controller.getOwner()
owner.setCollisionMargin(0.01)
Auch möglich wäre es, den Abstand statischer Objekte auf Null zu setzen und bei Dynamischen zu belassen.
14.Ich will qualitativ bessere Simulationen für die Keyframe-Erstellung bei IPOs
Wenn nur Gerendert/Keyframes erstellt werden und kein Augenmerk auf Echtzeit liegt, kann man die Zwischenschritte erhöhen, um eine bessere Qualität der Simulation zu erzielen.
import PhysicsConstraints
PhysicsConstraints.setNumTimeSubSteps(2)
Default ist 1, 2 oder mehr erhöhen die Genauigkeit.
Quelle: Bullet tipps