Skip to content

v1.1.0

Compare
Choose a tag to compare
@zfergus zfergus released this 25 Jul 16:05
· 131 commits to main since this release

Large refactoring to make the code more object-oriented rather than passing objects to functions. Other changes include the friction potential now being a function of velocity, bug fixes, and a new tutorial.

What's Changed

  • Large Refactor in #25
    • construct_collision_candidates(..., candidates) -> candidates.build(...)
    • is_step_collision_free(candidates, ...) -> candidates.is_step_collision_free(...)
    • compute_collision_free_stepsize(candidates, ...) -> candidates.compute_collision_free_stepsize(...)
    • compute_barrier_potential*(constraints, ...) -> constraints.compute_potential*(...)
    • compute_shape_derivative(constraints, ...) -> constraints.compute_shape_derivative(...)
    • compute_minimum_distance(constraints, ...) -> constraints.compute_minimum_distance(...)
    • construct_friction_constraint_set(..., friction_constraints) -> friction_constraints.build(...)
    • compute_friction_*(..., friction_constraints, ...) -> friction_constraints.compute_*(...)
    • Generic CollisionStencil parent class to Candidates, CollisionConstraints, and FrictionConstraints.
    • Renamed Constraints to CollisionConstraints
    • Replaced single letter variable names V, E, F with vertices/positions, edges, faces
    • Renamed *_index -> *_id
    • Replaced inflation_radius = min_distance / 1.99 with inflation_radius = min_distance / 2 and use rounding mode to conservativly inflate AABBs
    • CollisionConstraints::use_convergent_formulation and are_shape_derivatives_enabled must now be accessed through getter and setter functions
    • Friction potentials are now functions of velocity. Previously V0 and V1 were passed and U = V1-V0. This limited the integration scheme to implicit Euler. Upstream this means you need to multiply the potential by 1/(dv/dx) to get the correct friction force.
      • Change input $\epsilon_vh$ to $\epsilon_v$ in #37 to reflect the fact that friction is defined in terms of velocity instead of displacement now.
  • Changed default project_hessian_to_psd to false in #30
  • Update website with a tutorial (#31) and version dropdown list (#34)
  • Switch from templates to using Eigen::Ref in #28
  • Speed up the CCD by limiting the maximum minimum distance to 1e-4 in #43
  • Fix the bug pointed out in #41 in #42. Namely, to get units of distance in the barrier we should divide the original function by $\hat{d}\cdot(\hat{d} + 2d_\min)^2$ when using distance squared. Before it was being divided by $2d_\min \hat{d} + \hat{d}^2$.
  • Fix build for IPC_TOOLKIT_WITH_CORRECT_CCD=OFF in #44
  • Switched from FetchContent to CPM in #48. This provides better caching between builds. Additionally, made robin-map and Abseil optional dependencies.
  • Add the CFL-Inspired Culling of CCD as described in Section 3 of the Technical Supplement to IPC in #50

Full Changelog: v1.0.0...v1.1.0