Skip to content

v1.3.0

Latest
Compare
Choose a tag to compare
@zfergus zfergus released this 03 Aug 05:01
· 12 commits to main since this release

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_* from Collision and Collisions
    • 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 and FrictionPotential
    • 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 only EdgeEdgeCollision overrides this
    • Remove versions of compute_distance and ccd 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 and barrier_hessian renamed to barrier_first_derivative and barrier_second_derivative respectively
    • Co-authored by @arvigj
  • Update compiler warnings in #88
    • Add -Werror=enum-conversion and -Wfloat-conversion
  • Fix 🐛 hash when not using Abseil in #90
  • Clean-up SpatialHash Broad Phase in #91
    • Replace IPC_TOOLKIT_WITH_CORRECT_CCD with IPC_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 with snake_case in SpatialHash and HashGrid
  • 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 to SWEEP_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 to SWEEP_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) and FrictionPotential(double) as explicit constructors to avoid implicit conversions from double
  • 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 and max_iterations parameters with const 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 by InexactCCD, TightInclusionCCD, and AdditiveCCD classes
    • [Breaking] The optional parameter order to is_step_collision_free and compute_collision_free_stepsize is changed from
      const 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);
      to
      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

Full Changelog: v1.2.1...v1.3.0