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/frictionto genericipc/tangentialandipc/collisions/tangentialfolders. - Renamed
Collisionclasses toNormalCollision - Renamed
FrictionCollisionclasses toTangentialCollision - Renamed
DistanceBasedPotentialtoNormalPotential- Added
force_magnitudeandforce_magnitude_gradientmethods toNormalPotential
- Added
- Added
TangentialPotentialparent class toFrictionPotentialandTangentialAdhesionPotential - Tutorial added by @antoinebou12 in #144
- Use normal potential in tangential collisions by @maxpaik16 in #142
- Replaces the
const BarrierPotential¶meter with aconst NormalPotential& - This allows tangential adhesion to be properly set up in simulation.
- Replaces the
- Add
NormalizedClampedLogBarrierby @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()toCollisionStencil– computes the coefficients$\vec{c}$ s.t.$d(x) = \Vert \sum c_i x_i\Vert^2$ - Add
compute_distance()toCollisionStenciltaking$V$ ,$E$ ,$F$ directly
- Replace
BroadPhaseMethodenum withshared_ptr<BroadPhase>by @zfergus in #152 - Remove
ContinuousCollisionCandidateinheritance by @zfergus in #156- Replace it with the
CollisionStencilclass.
- Replace it with the
- Replace
const Eigen::Matrix&withEigen::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_sandmu_k) and implementing smooth transitions between them. - Updated
TangentialCollisionclass to replacemuwith separatemu_s(static friction coefficient) andmu_k(kinetic friction coefficient). This change applies to the class definition and all related methods. -
New
smooth_mufunctions: 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
- Enhancements to tangential collision handling by distinguishing between static and kinetic friction coefficients (
Python Specific
- Add faster
can_collidefunctions to Python by @zfergus in #135 - Add
PyBroadPhaseandPyNarrowPhaseCCDclasses to wrap theBroadPhaseandNarrowPhaseCCDclasses, 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::atexitto reset the thread limiter upon program exit to ensure proper cleanup. ⚠️ PythonNarrowPhaseCCDimplementations will not work with multi-threading because of GIL locking.- Switch from
py::argto_aliterals by @zfergus in #168
Miscellaneous
- Add
/Walland/MPcompiler 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_errorfunction to improve error handling. - Improved documentation in the style guide for naming conventions.
- Move generated
config.hppfile fromsrc/ipctobuild/include/src/ipc - Update CUDA builds in
CMakePresets.json - Remove
virtualtag fromBroadPhase::detect_collision_candidates
- Index typedef by @zfergus in #161
- Add a
index_ttypedef for vertex/edge/face ids. Changes default fromlongtoint32_t.
- Add a
- 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
- @maxpaik16 made their first contribution in #142
- @sin3point14 made their first contribution in #167
Full Changelog: v1.3.1...v1.4.0