v1.1.0
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
CollisionStencilparent class toCandidates,CollisionConstraints, andFrictionConstraints. - Renamed
ConstraintstoCollisionConstraints - Replaced single letter variable names
V,E,Fwithvertices/positions,edges,faces - Renamed
*_index->*_id - Replaced
inflation_radius = min_distance / 1.99withinflation_radius = min_distance / 2and use rounding mode to conservativly inflate AABBs -
CollisionConstraints::use_convergent_formulationandare_shape_derivatives_enabledmust now be accessed through getter and setter functions - Friction potentials are now functions of velocity. Previously
V0andV1were passed andU = V1-V0. This limited the integration scheme to implicit Euler. Upstream this means you need to multiply the potential by1/(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.
- Change input
-
- Changed default
project_hessian_to_psdtofalsein #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-4in #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