v1.3.0
Highlights
- Separated the collision set and potential computations. This allows us to more easily add new potentials in the future. This will require updating calls to
compute_potential_*. See the tutorial for details. - Add a
Barrierclass to enable dynamic selection of barrier function. - Add a
NarrowPhaseCCDclass to enable dynamic selection of narrow-phase CCD method.
What's Changed
- Refactor potentials by @zfergus in #83
- Replace "constraint" and "contact" names with "collision"
- Removed
compute_potential_*fromCollisionandCollisions - Add a new class hierarchy
Potentialwhich represents computing the sum of individual potentials per collision- Implement the barrier potential and friction dissipative potential as Potentials:
BarrierPotentialandFrictionPotential
- Implement the barrier potential and friction dissipative potential as Potentials:
- Now,
Collisionsserve solely as the set of active collisions - Add the distance mollifier to all collisions with a
is_mollified()function- The default mollifier is
$m(x) = 1$ , and onlyEdgeEdgeCollisionoverrides this
- The default mollifier is
- Remove versions of
compute_distanceandccdfrom CollisionStencil which take the full mesh as input- Instead, expose the versions that take the collision stencil's vertex positions directly
- Polymorphic barrier in #84
- Make the barrier function an object so it can be changed at runtime
- Add a virtual class
Barrieras an interface for generic barriers - Add
ClampedLogBarrierclass which implements the smoothly clamped log barrier functions from [Li et al. 2020] -
barrier_gradientandbarrier_hessianrenamed tobarrier_first_derivativeandbarrier_second_derivativerespectively - Co-authored by @arvigj
- Update compiler warnings in #88
- Add
-Werror=enum-conversionand-Wfloat-conversion
- Add
- Fix 🐛 hash when not using Abseil in #90
- Clean-up SpatialHash Broad Phase in #91
- Replace
IPC_TOOLKIT_WITH_CORRECT_CCDwithIPC_TOOLKIT_WITH_INEXACT_CCD- Always include Tight Inclusion CCD because it is used by Nonlinear CCD
- Add support for face-face collision (not used anywhere but for completeness and future-proof nonlinear face-face)
- Add and use generic functions to
SpatialHash - Replace
camelCasewithsnake_caseinSpatialHashandHashGrid
- Replace
- Update Scalable CCD in #92
- Updated Scalable CCD (i.e., Sweep and Tiniest Queue and CUDA Tight Inclusion CCD) to the unified repository with support for generic collision pairs.
- Renamed
SWEEP_AND_TINIEST_QUEUEtoSWEEP_AND_PRUNEto reflect that it is a standard implementation of the sweep and prune algorithm (see, e.g., "Real-Time Collision Detection" [Ericson 2004]) - Renamed
SWEEP_AND_TINIEST_QUEUE_GPUtoSWEEP_AND_TINIEST_QUEUEto reflect that it is the only existing implementation of the sweep and tiniest queue algorithm
- Mark single argument constructors explicit in #93
- Mark
BarrierPotential(double)andFrictionPotential(double)as explicit constructors to avoid implicit conversions from double
- Mark
- Fix compatibility with the latest Eigen by @teseoch in #94
- Add clang-format check action in #96
- Add new project PSD option by @Huangzizhou in #95
- Instead of clamping the negative eigenvalues to zero, add the option to flips the sign of negative eigenvalues according to [Chen et al. 2024]
- Fix 🐛 Python bindings for Numpy 2 in #100
- Make faces an optional parameter to
CollisionMeshin #105 - Fix Python documentation by @rc in #108
- Polymorphic CCD in #110
- Add narrow phase CCD parent class; pass CCD object to choose method
- Replace
toleranceandmax_iterationsparameters withconst NarrowPhaseCCD& narrow_phase_ccdparameter -
NarrowPhaseCCDis a virtual class containing the CCD methods for point-point, point-edge, edge-edge, and point-triangle CCD -
NarrowPhaseCCDis implemented byInexactCCD,TightInclusionCCD, andAdditiveCCDclasses -
[Breaking] The optional parameter order to
is_step_collision_freeandcompute_collision_free_stepsizeis changed fromtoconst BroadPhaseMethod broad_phase_method = DEFAULT_BROAD_PHASE_METHOD, const double min_distance = 0.0, const double tolerance = DEFAULT_CCD_TOLERANCE, const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS);
const double min_distance = 0.0, const BroadPhaseMethod broad_phase_method = DEFAULT_BROAD_PHASE_METHOD, const NarrowPhaseCCD& narrow_phase_ccd = DEFAULT_NARROW_PHASE_CCD);
- The inexact floating-point CCD can be enabled beside the Tight Inclusion CCD rather than replacing it
New Contributors
- @Huangzizhou made their first contribution in #95
- @rc made their first contribution in #108
Full Changelog: v1.2.1...v1.3.0