Skip to content

ENH: Multi body PBD and Rigid Body PBD

Andrew Wilson requested to merge andrew.wilson/iMSTK:RigidBodyPbd into master

Overview

  • Multi body PBD: Allows multiple PbdObjects to be placed/solved in the same system. This also means systems with mixed geometries (ex: LineMesh ligaments attached to a TetrahedralMesh organ).
  • PBD Rigid Bodies: Adds rigid body pbd according to Muellers recent paper ("Detailed Rigid Body Simulation with Extended Position Based Dynamics"). Allowing angular constraints (hinges and joints), rigid on rigid, and rigid on deformable.
  • PbdConstraint Refactor: Reworks collision constraints to share a base, allowing collision constraints internally and internal constraints for collision. Eliminates the need for a separate PbdCollisionSolver. Only one PbdSolver exists.
  • Implicit Collision Solve: Now that all PbdObjects can shared a PbdModel and solve together their collision can solve together. Additionally grasping, stitching, etc all solve together. For example, this allows smooth solution when using collision and grasping. Whereas existing one jitters when both happen simultaneously.
  • PbdCollisionHandling Simplify: Reworks the PbdCollisionHandling to further reduce complexities via function table.
  • PbdObjectController: For pbd virtual coupling.
  • Cutting Refactor: SurfaceMeshCut was generalized into MeshCut and LineMeshCut was setup sharing code between them.
  • LineMeshCut Added: LineMeshCut computes the separations/remeshing of line meshes and returns them for reworking the constraints in the PbdModel. See PbdLigamentCutExample.
  • Also fixes the csharp wrappings for the CellMesh update.

Future Work

  • Swap multi body constraint with full on pbd model. This requires figuring out pbd virtual coupling.
  • Still think the initialization of rigid PbdBody's could be improved but this will probably work better in an ECS.
  • Combine the Body Contact Constraints with the Collision Constraints. PbdVertexTriangleConstraint and PbdBodyTriangleConstraint share some code.
Edited by Andrew Wilson

Merge request reports