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
CollisionStencil
parent class toCandidates
,CollisionConstraints
, andFrictionConstraints
. - Renamed
Constraints
toCollisionConstraints
- Replaced single letter variable names
V
,E
,F
withvertices
/positions
,edges
,faces
- Renamed
*_index
->*_id
- Replaced
inflation_radius = min_distance / 1.99
withinflation_radius = min_distance / 2
and use rounding mode to conservativly inflate AABBs -
CollisionConstraints::use_convergent_formulation
andare_shape_derivatives_enabled
must now be accessed through getter and setter functions - Friction potentials are now functions of velocity. Previously
V0
andV1
were 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_psd
tofalse
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