Skip to content

v1.4.0

Latest
Compare
Choose a tag to compare
@zfergus zfergus released this 22 Jul 12:12
· 3 commits to main since this release
dac3b97

Highlights

  • Add adhesion potentials for sticky interactions, allowing for more realistic simulations of contact between objects.
    • Based on the paper "Augmented Incremental Potential Contact for Sticky Interactions" by Fang et al. [2023]
  • Implement new barrier functions from the literature.
    • NormalizedClampedLogBarrier: unit-less clamped log barrier function.
    • ClampedLogSqBarrier: clamped log barrier with a quadratic log term from [Huang et al. 2024]
    • CubicBarrier: cubic barrier function from [Ando 2024]
  • Add support for separate static and kinetic coefficients in tangential collisions.

What's Changed

  • Adhesion by @zfergus in #85
    • Implement the adhesion potentials from "Augmented Incremental Potential Contact for Sticky Interactions" [Fang et al. 2023]
    • Files moved from ipc/friction to generic ipc/tangential and ipc/collisions/tangential folders.
    • Renamed Collision classes to NormalCollision
    • Renamed FrictionCollision classes to TangentialCollision
    • Renamed DistanceBasedPotential to NormalPotential
      • Added force_magnitude and force_magnitude_gradient methods to NormalPotential
    • Added TangentialPotential parent class to FrictionPotential and TangentialAdhesionPotential
    • Tutorial added by @antoinebou12 in #144
    • Use normal potential in tangential collisions by @maxpaik16 in #142
      • Replaces the const BarrierPotential& parameter with a const NormalPotential&
      • This allows tangential adhesion to be properly set up in simulation.
  • Add NormalizedClampedLogBarrier by @zfergus in #143
  • Add max_iterations parameter to Additive CCD by @zfergus in #145
  • Add cubic barrier with elasticity-inclusive dynamic stiffness by @zfergus in #148
    • Implement the cubic barrier and elasticity-inclusive dynamic stiffness from [Ando 2024]
    • Implement $log^2$-barrier from GIPC [Huang et al. 2024]
    • Add compute_coefficients() to CollisionStencil – computes the coefficients $\vec{c}$ s.t. $d(x) = \Vert \sum c_i x_i\Vert^2$
    • Add compute_distance() to CollisionStencil taking $V$, $E$, $F$ directly
  • Replace BroadPhaseMethod enum with shared_ptr<BroadPhase> by @zfergus in #152
  • Remove ContinuousCollisionCandidate inheritance by @zfergus in #156
    • Replace it with the CollisionStencil class.
  • Replace const Eigen::Matrix& with Eigen::ConstRef<Matrix> by @zfergus in #157
    • This allows for more efficient passing of matrices to functions.
  • Separate Static and Kinetic Coefficients of Friction by @zfergus in #177
    • Enhancements to tangential collision handling by distinguishing between static and kinetic friction coefficients (mu_s and mu_k) and implementing smooth transitions between them.
    • Updated TangentialCollision class to replace mu with separate mu_s (static friction coefficient) and mu_k (kinetic friction coefficient). This change applies to the class definition and all related methods.
    • New smooth_mu functions: Added functions to compute smooth transitions between static and kinetic friction coefficients, including derivatives and related mathematical formulations. These functions improve the modeling of friction forces at varying tangential velocities.
    • Integration with adhesion module: Incorporated smooth friction coefficient calculations into the adhesion module.
    • Tutorial added by @zfergus in #178

Python Specific

  • Add faster can_collide functions to Python by @zfergus in #135
  • Add PyBroadPhase and PyNarrowPhaseCCD classes to wrap the BroadPhase and NarrowPhaseCCD classes, respectively, allowing for custom implementations of these classes in Python.
  • Add new constructors to candidate classes (EdgeEdgeCandidate, EdgeFaceCandidate, EdgeVertexCandidate, FaceFaceCandidate, FaceVertexCandidate, VertexVertexCandidate) that accept tuples for easier initialization.
  • Include a call to std::atexit to reset the thread limiter upon program exit to ensure proper cleanup.
  • ⚠️ Python NarrowPhaseCCD implementations will not work with multi-threading because of GIL locking.
  • Switch from py::arg to _a literals by @zfergus in #168

Miscellaneous

  • Add /Wall and /MP compiler flags for MSVC by @zfergus in #134
  • Enable CUDA by default if CUDA is detected by CMake by @zfergus in #134
  • Devcontainer by @antoinebou12 in #136
  • Update dependencies for CMake 4.0 by @zfergus in #158
  • Organize folder structure for generated Xcode project by @zfergus in #159
    • Refactor CMake configurations and improve project structure
    • Updated CMake recipes for third-party libraries to set appropriate folder properties for IDE organization.
    • Changed the CPMAddPackage references for scalable-ccd to a more recent commit.
    • Enhanced logging functionality by adding a new log_and_throw_error function to improve error handling.
    • Improved documentation in the style guide for naming conventions.
    • Move generated config.hpp file from src/ipc to build/include/src/ipc
    • Update CUDA builds in CMakePresets.json
    • Remove virtual tag from BroadPhase::detect_collision_candidates
  • Index typedef by @zfergus in #161
    • Add a index_t typedef for vertex/edge/face ids. Changes default from long to int32_t.
  • Update Tight Inclusion package version to 1.0.6 by @zfergus in #165
  • Fix cmake for non-top-level inclusion by @sin3point14 in #167
  • Improve and clean up documentation:

New Contributors

Full Changelog: v1.3.1...v1.4.0