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 genericipc/tangential
andipc/collisions/tangential
folders. - Renamed
Collision
classes toNormalCollision
- Renamed
FrictionCollision
classes toTangentialCollision
- Renamed
DistanceBasedPotential
toNormalPotential
- Added
force_magnitude
andforce_magnitude_gradient
methods toNormalPotential
- Added
- Added
TangentialPotential
parent class toFrictionPotential
andTangentialAdhesionPotential
- Tutorial added by @antoinebou12 in #144
- Use normal potential in tangential collisions by @maxpaik16 in #142
- Replaces the
const BarrierPotential&
parameter with aconst NormalPotential&
- This allows tangential adhesion to be properly set up in simulation.
- Replaces the
- 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()
toCollisionStencil
– computes the coefficients$\vec{c}$ s.t.$d(x) = \Vert \sum c_i x_i\Vert^2$ - Add
compute_distance()
toCollisionStencil
taking$V$ ,$E$ ,$F$ directly
- Replace
BroadPhaseMethod
enum withshared_ptr<BroadPhase>
by @zfergus in #152 - Remove
ContinuousCollisionCandidate
inheritance by @zfergus in #156- Replace it with the
CollisionStencil
class.
- 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_s
andmu_k
) and implementing smooth transitions between them. - Updated
TangentialCollision
class to replacemu
with separatemu_s
(static friction coefficient) andmu_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
- Enhancements to tangential collision handling by distinguishing between static and kinetic friction coefficients (
Python Specific
- Add faster
can_collide
functions to Python by @zfergus in #135 - Add
PyBroadPhase
andPyNarrowPhaseCCD
classes to wrap theBroadPhase
andNarrowPhaseCCD
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. ⚠️ PythonNarrowPhaseCCD
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 fromsrc/ipc
tobuild/include/src/ipc
- Update CUDA builds in
CMakePresets.json
- Remove
virtual
tag fromBroadPhase::detect_collision_candidates
- Index typedef by @zfergus in #161
- Add a
index_t
typedef for vertex/edge/face ids. Changes default fromlong
toint32_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