BulletSim/Functionality/de
From OpenSimulator
Languages: |
English Deutsch |
Contents |
BulletSim-Funktionalität
Diese Seite listet die Physik-Operationen von OpenSimulator auf und insbesondere die detaillierten Fahrzeugparameter. Der Implementierungsstatus von BulletSim wird ebenso aufgeführt wie einige Kommentare zur Funktionalität.
Funktion | Impl | Kommentar |
---|---|---|
osGetPhysicsEngineType | Y | Gibt "BulletSim" zurück. |
linksets | Y | BulletSim hat zwei Implementierungen von Linksets: Constraints und Compound. Der Standard ist "Compound". Der Typ wird durch eine INI-Datei-Einstellung ausgewählt. "Constraint" erstellt das Linkset durch das Erstellen statischer physikalischer Verbindungen zwischen den Objekten des Linksets. Dies ist gut für kleine Linksets und wird in Zukunft erweitert, um andere als statische Verbindungen zu ermöglichen (Scharniergelenke, Schiebegelenke, ...). "Compound" erstellt das Linkset, indem alle Kind-Netze zu einer einzigen zusammengesetzten physikalischen Form kombiniert werden. Dies schafft eine sehr stabile physikalische Form und funktioniert gut für große Linksets. |
llApplyImpulse | Y | Abgestimmt, sodass die Impulswirkung ähnlich wie bei SL ist. |
llApplyRotationalImpulse | N | |
llMoveToTarget | semi | BulletSim implementiert eine Bewegung zum Ziel, die derzeit (20130120) durch Änderung der Position des Objekts erfolgt. |
llCastRay | N | |
llGetAccel | N | |
llGetBoundingBox | semi | Die aktuelle Implementierung (20130117) berechnet die Begrenzungsbox des Haupt-Prims oder des Avatars. Linksets sind nicht implementiert. Diese Berechnung erfolgt im LSL-Implementierungscode und nicht durch die Physik-Engine. |
llGetCenterOfMass | Y | OpenSimulator implementiert dies derzeit (20130120), indem der geometrische Mittelpunkt des Prims oder Linksets zurückgegeben wird, nicht der tatsächliche Schwerpunkt. |
llGetForce | Y | |
llGetGeometricCenter | Y | |
llGetMass | Y | Berücksichtigt Formschneiden oder -aushöhlen. |
llGetMassMKS | N | Diese Funktion ist noch nicht in OpenSimulator implementiert (20130117). |
PRIM_TYPE_* | Y | Der OpenSimulator Meshmerizer erstellt Netze für alle Arten von Primformen, einschließlich Sculpties. Für bessere Speicherung und Leistung verwendet BulletSim native Physik-Engine-Formen für Würfel, Rechtecke und Kugeln. Die Netzformen werden einmal erstellt und dann für alle Instanzen derselben Größe gemeinsam genutzt. |
PRIM_SLICE | N | |
PRIM_PHYSICS_SHAPE_CONVEX | semi | OpenSimulator setzt oder gibt diesen Wert nicht zurück. BulletSim konvertiert intern alle physikalischen Formen zu konvexen Hüllen für die Leistung. Dies wird mit dem | HACD : Hierarchical Approximate Convex Decomposition Algorithmus gemacht. Derzeit (20130117) ist der Code in C# und in OpenSimulator-Core eingecheckt, aber zukünftige Versionen werden die in Bullet enthaltene Version verwenden. Zukünftige Implementierungen sollten jede mit dem Netz gelieferte konvexe Hülle verwenden. |
PRIM_MATERIAL_* | Y | Das Festlegen von Materialien ändert die Reibung und Rückprallkraft des physikalischen Prims. Die Dichte wird nicht verändert. |
PRIM_PHANTOM | Y | |
llGetTorque | Y | |
llGetVel | Y | |
llGround | Y | Intern wandelt BulletSim die Höhenkarte der Region in ein Netz um, sodass das Gelände tatsächlich ein statisches Netz ist. |
llPushObject | Y | Der Hauptteil dieser Funktionalität ist in LSL_Api implementiert. |
llSetAngularVelocity | Y | |
llSetBuoyancy | Y | Der Auftrieb wird durch Variieren der Schwerkraft auf das einzelne Prim/Linkset implementiert. |
llSetForce | Y | Die Kraft wird kontinuierlich angewendet, bis die Kraft auf Null gesetzt wird. |
llSetForceAndTorque | N | |
llSetHoverHeight | semi | Verwenden Sie dies nicht mit Fahrzeugen, da sonst Chaos entsteht. |
llSetPhysicsMaterial | N | OpenSimulator fügte die Möglichkeit hinzu, diese Eigenschaften aus V3-Viewer-Dialogen festzulegen, aber hat diese Funktion noch nicht (Stand 20130207). |
: DENSITY | Y | Durch PRIM_MATERIAL auf Materialwert gesetzt. |
: FRICTION | Y | Durch PRIM_MATERIAL auf Materialwert gesetzt. |
: RESTITUTION | Y | Durch PRIM_MATERIAL auf Materialwert gesetzt. |
: GRAVITY_MULTIPLIER | Y | |
llSetScale | Y | |
llSetStatus | Y | |
: STATUS_PHYSICS | Y | |
: STATUS_ROTATE_X | Y | |
: STATUS_ROTATE_Y | Y | |
: STATUS_ROTATE_Z | Y | |
: STATUS_PHANTOM | Y | |
llVolumeDetect | Y | Grundlegende Volumenerkennung funktioniert (statisches Prim/Linkset). Phantom- und physische Volumenerkennungsobjekte fallen auf Nullhöhe, bevor sie stoppen. |
llSetVelocity | Y | |
llSetVehicleType | Y | Alle Fahrzeugtypen werden unterstützt. |
: VEHICLE_FLAG_NO_DEFLECTION_UP | N | |
: VEHICLE_FLAG_LIMIT_ROLL_ONLY | N | |
: VEHICLE_FLAG_HOVER_WATER_ONLY | Y | |
: VEHICLE_FLAG_HOVER_TERRAIN_ONLY | Y | |
: VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT | Y | |
: VEHICLE_FLAG_HOVER_UP_ONLY | Y | |
: VEHICLE_FLAG_LIMIT_MOTOR_UP | semi | Wenn das Fahrzeug mit nichts kollidiert, wird jede positive Z-Kraft (nach oben) aus der Fahrzeuggeschwindigkeit entfernt. Die Schwerkraft sollte dann dafür sorgen, dass das Fahrzeug zu Boden fällt. |
: VEHICLE_FLAG_MOUSELOOK_STEER | N | |
: VEHICLE_FLAG_MOUSELOOK_BANK | N | |
: VEHICLE_FLAG_CAMERA_DECOUPLED | N | |
: VEHICLE_LINEAR_MOTOR_DIRECTION | Y | Richtungsfunktionen wurden so skaliert, dass sie ähnlich wie bei SL sind. |
: VEHICLE_LINEAR_MOTOR_TIMESCALE | Y | |
: VEHICLE_LINEAR_FRICTION_TIMESCALE | Y | |
: VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE | Y | |
: VEHICLE_LINEAR_MOTOR_OFFSET | N | |
: VEHICLE_REFERENCE_FRAME | N | |
: VEHICLE_ANGULAR_MOTOR_DIRECTION | Y | Die Winkelrichtung wurde so skaliert, dass sie ähnlich wie bei SL ist. DIES IST ANDERS ALS BEI ODE. Die ODE-Motor-Richtungsfunktion war um den Faktor 10 falsch, sodass auf ODE abgestimmte Fahrzeuge sich sehr schnell drehen, wenn sie auf einer BulletSim-basierten Region betrieben werden. |
: VEHICLE_ANGULAR_MOTOR_TIMESCALE | Y | |
: VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE | Y | |
: VEHICLE_ANGULAR_FRICTION_TIMESCALE | Y | |
: VEHICLE_LINEAR_DEFLECTION_TIMESCALE | Y | |
: VEHICLE_LINEAR_DEFLECTION_EFFICIENCY | Y | |
: VEHICLE_ANGULAR_DEFLECTION_TIMESCALE | Y | |
: VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY | Y | |
: VEHICLE_BANKING_TIMESCALE | N | |
: VEHICLE_BANKING_EFFICIENCY | N | |
: VEHICLE_BANKING_MIX | N | |
: VEHICLE_HOVER_HEIGHT | Y | |
: VEHICLE_HOVER_TIMESCALE | Y | |
: VEHICLE_HOVER_EFFICIENCY | N | |
: VEHICLE_VERTICAL_ATTRACTION_TIMESCALE | Y | |
: VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY | Y | |
Objektkollisionen | Y | |
Linkset-Kind-Kollisionen | N | |
Energielimits | N | |
Top-Kollidierer
|
Y | Versucht, die Anzahl der Kollisionen anhand der vergangenen Zeit zu skalieren, sodass die Liste die jüngsten Kollisionen enthalten sollte. |
AKTUELLE PROBLEME, DIE ZU BEHEBEN ODER ANZUSCHAUEN SIND
- Fahrzeug-Auftrieb* : Wird dieser korrekt berechnet? Möglicherweise wird eine zu große effektive Masse erzeugt.
- Interaktion zwischen `llSetBuoyancy` und Fahrzeugauftrieb: Sollten diese additiv wirken? - Wird negativer Auftrieb korrekt berechnet?
- Schwerpunkt* : Berechnung des Schwerpunktes und deren Einfluss auf Fahrzeuge.
- Massenberechnung für Meshes* : Wie wird die Masse von Meshes berechnet, und wie sollte sie berechnet werden?
- Fahrzeug-Regionenüberquerungen ermöglichen* : Mindestens auf ODE-Niveau verbessern.
* Geländesäume* . - Wenn ein Avatar eine Regionsgrenze überschreitet, wird er in der vorherigen Region erstellt, nicht in der neuen. - Fahrzeuge werden in der neuen Region bei geringem Z-Wert neu erstellt (leicht versetzt vom ursprünglichen Wert). (ERLEDIGT)
- Benutzerdefinierbare Terrain-Meshes* : Möglichkeit bieten, das Terrain als konvex oder konkav festzulegen und je nach Form unterschiedliche Höhenfunktionen verwenden.
- Boote, die bei Wendungen vorne ins Wasser eintauchen* :
- Bei Drehung um die Z-Achse scheint auch eine Rotation um X und Y zu erfolgen.
- Löschen eines Linksets, auf dem man steht* : Hinterlässt die physische Form des Root-Objekts.
- Unsicher, ob dies daran liegt, dass man darauf steht. Problem tritt bei großen Prim-Linksets auf.
- Kindrotationen in Linksets* : Fehlerhafte Drehungen bei einigen Linksets, wie dem Spiralrohr von Nebadon.
- Fehlerbehebung des `llMoveToTarget`-Skripts (Teravus)* :
- Mischung von Schweben, Auftrieb/Schwerkraft, `moveToTarget` in einer Kraft. - Wenn die Schwebehöhe auf Null gesetzt wird, wird das Schweben deaktiviert, auch wenn die Flags aktiv sind (aus dem SL-Wiki).
- Kalibrierung von `limitMotorUp`* .
- Umwandlung in ein Avatar-Mesh-Kapselobjekt* : Einbeziehung der Rotation der Kapsel.
- Feinabstimmung und Fehlerbehebung bei Fahrzeugskripten* : Beispiele wie das Geschwindigkeits- und Waffenskript von Avanti.
- Materialdefinitionen in den Simulator verschieben* : Eigenschaften wie Reibung, ...
- Mesh als geschlossenes Objekt?* : Überprüfen, ob Terrain als geschlossenes Mesh gebaut werden sollte.
- Kleine physische Objekte* : Probleme bei der Interaktion (Beispiel: Kettenobjekte).
FAHRZEUGE TO-DO-LISTE
- Begrenzen der `LINEAR_MOTOR_DIRECTION`-Werte auf sinnvolle Zahlen.
- Verbesserungen durch `UBit`, um das Gummibandverhalten von Avataren auf Fahrzeug-Kindprims zu reduzieren: - [Link zu Verbesserungen](https://github.com/UbitUmarov/Ubit-opensim).
- Einige Fahrzeuge sollten sich nicht drehen können, wenn sie sich nicht bewegen oder in der Luft sind.
- Fahrzeuge können nicht bearbeitet oder bewegt werden, wenn sie besetzt sind.
- Nebadon-Fahrzeug* : Wackelt beim Fahren hin und her.
- Implementieren des `referenceFrame` für alle Bewegungsroutinen.
- Sicherstellen, dass `llGetVel()` für die Fahrzeugbewegung glatte und zuverlässige Werte zurückgibt.
ALLGEMEINE TO-DO-LISTE
- Prallen auf Terrain* : Physische Prims prallen auf anderen Prims ab, aber nicht auf dem Terrain.
- Kollisionskonsistenz* : Pfeile sollen bei Kollision eine Meldung geben, was jedoch oft nicht geschieht.
- Objekte, die `llMoveToTarget` verwenden* : Diese werden von der Schwerkraft nicht beeinflusst, bis das Ziel entfernt wird.
- Effizientere Speicherverwendung* : Speichern der Hüllinformationen von BSPrim in BulletSim.
LINKSETS
- Kinderprims in Linksets melden keine Kollisionen. - Erlauben, dass Kinderprims eines Linksets Phantom sein können: - Siehe: [Nabble-Thread](http://opensim-dev.2196679.n2.nabble.com/Setting-a-single-child-prim-to-Phantom-tp7578513.html).
- Optimierung von Linksets bei großen physischen Fahrzeugen.
WEITERE PUNKTE
- Optimierung der Avatar-Skalierung und -Kollisionsform* : Genauere Berechnung der Kapselgröße.
- Tests für verschiedene Interface-Komponenten: - Objekte/Skripte erstellen, die sich selbst messen und ihre Farbe ändern, wenn sie korrekt/falsch sind.
- Grenzprüfungen und Optimierung* : Verbessern der Leistungsfähigkeit und Stabilität bei Kollisionen und Grenzüberschreitungen.
INTERNER VERBESSERUNGS- UND AUFRÄUM-PROZESS
- Wrapper-Klassen für physikalische Objekte erstellen* : Vereinheitlichung des Zugriffs und Strukturierung der Bullet-Klassen.
- Vereinfachen der Linksets und Fahrzeuge zu "PropertyManagers".
- Bessere Mechanismen zum Zurücksetzen von Linkset- und Fahrzeugeinstellungen, wenn der Körper neu erstellt wird.
Diese Liste ist eine Übersicht über bekannte Probleme und geplante Aufgaben, die bei der Entwicklung von OpenSim’s BulletSim-Physik-Engine bearbeitet und verbessert werden sollen.
Hier ist die strukturierte Übersicht der Einträge, bei denen * THREADING* hervorgehoben wurde. Die Beschreibungen zu Thread-spezifischen Implementierungen und Überarbeitungen wurden angepasst, um ihre Ziele und Lösungen zu verdeutlichen:
---
THREADING
---
- Aktion bei Taint sofort ausführen, wenn Bullet nicht tatsächlich ausgeführt wird.*
- Lösung:* Sperre um Bullet-Ausführung hinzugefügt; führt Taint-Aktionen sofort aus, wenn die Simulation nicht läuft.
- Status:* ERLEDIGT
---
- Cleanup des Codes in BSDynamics durch die Verwendung von Motoren.*
- Aufgabe:* Implementierung der Motorensteuerung für vereinfachte Codebasis in BSDynamics.
- Status:* Angefangen
- Erwägen, das Terrain als Mesh anstatt als Heightmap zu implementieren.*
- Vorteil:* Bessere und anpassbare Auflösung.
- Status:* ERLEDIGT für den Mesh-Bereich, jedoch nicht für die Höhezentrierung im Quadratmuster (SL und ODE definieren Meterquadrate anders).
---
- Höhenmesh für Terrain so aufbauen, dass die Höhe in der Mitte des Quadrats liegt.*
- Status:* NICHT ERLEDIGT aufgrund unterschiedlicher Meter-Definition in SL und ODE.
---
- Wie werden statische Linksets von der Physik-Engine behandelt?*
- Lösung:* Sie werden nicht physisch verknüpft; alle Kinder werden bei Bewegung repositioniert.
- Status:* Implementiert