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
Barrier
class to enable dynamic selection of barrier function. - Add a
NarrowPhaseCCD
class 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_*
fromCollision
andCollisions
- Add a new class hierarchy
Potential
which represents computing the sum of individual potentials per collision- Implement the barrier potential and friction dissipative potential as Potentials:
BarrierPotential
andFrictionPotential
- Implement the barrier potential and friction dissipative potential as Potentials:
- Now,
Collisions
serve 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 onlyEdgeEdgeCollision
overrides this
- The default mollifier is
- Remove versions of
compute_distance
andccd
from 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
Barrier
as an interface for generic barriers - Add
ClampedLogBarrier
class which implements the smoothly clamped log barrier functions from [Li et al. 2020] -
barrier_gradient
andbarrier_hessian
renamed tobarrier_first_derivative
andbarrier_second_derivative
respectively - Co-authored by @arvigj
- Update compiler warnings in #88
- Add
-Werror=enum-conversion
and-Wfloat-conversion
- Add
- Fix 🐛 hash when not using Abseil in #90
- Clean-up SpatialHash Broad Phase in #91
- Replace
IPC_TOOLKIT_WITH_CORRECT_CCD
withIPC_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
camelCase
withsnake_case
inSpatialHash
andHashGrid
- 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_QUEUE
toSWEEP_AND_PRUNE
to 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_GPU
toSWEEP_AND_TINIEST_QUEUE
to 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
CollisionMesh
in #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
tolerance
andmax_iterations
parameters withconst NarrowPhaseCCD& narrow_phase_ccd
parameter -
NarrowPhaseCCD
is a virtual class containing the CCD methods for point-point, point-edge, edge-edge, and point-triangle CCD -
NarrowPhaseCCD
is implemented byInexactCCD
,TightInclusionCCD
, andAdditiveCCD
classes -
[Breaking] The optional parameter order to
is_step_collision_free
andcompute_collision_free_stepsize
is 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