v1.2.0
Various new features 🚀 and some bug fixes 🐛.
Highlights
- Implement the improved max approximator as described in [Li et al. 2023]
- Add a port of the Additive CCD method from [Li et al. 2021]
- Add a generic implementation of the nonlinear CCD (of linear geometry) algorithm from [Ferguson et al. 2021]
- Add missing codimensional collision support (point-point and point-edge)
What's Changed
- Update website URL to ipctk.xyz in #54
- Simplify tangential basis Jacobian calculation thanks to @halehOssadat and @jpanetta in #56
- Update
FindSIMD.cmake
to now add support for Neon (Arm/Apple Silicon SIMD instruction set) in #58- Credit:
FindSIMD.cmake
from Project CHRONO under BSD 3-Clause "New" or "Revised" License.
- Credit:
- Improve the max approximator used (i.e., sum over constraints) as described in [Li et al. 2023] in #55
- Add a
dtype
to EE collisions to keep track of the distance type for mollified constraints - Initialize mesh adjacencies by default
- Use edge length as the area weighting for codimensional edges
- Add a
- Improve documentation and tutorials in #61
- Add documentation describing the convergent formulation
- Add documentation describing the constraint offset/minimum distance
- Add documentation for broad- and narrow-phase CCD
- Add documentation for High-Order IPC
- Also, renames
CollisionConstraint::minimum_distance
toCollisionConstraint::dmin
- Add a port of the Additive CCD method from [Li et al. 2021] in #62
- This is a modified version of the original open-source implementation which is under the Appache-2.0 License.
- Modifications: remove broad phase functions, refactor code to use a single implementation of the
additive_ccd
algorithm, utilize our distance function rather than porting the Codim-IPC versions, returntrue
if the initial distance is less than the minimum distance, and add an explicittmax
parameter rather than relying on the initial value oftoi
. - This is mostly for reference comparison and it is not integrated into the full code. This also includes the ability to pull the sample CCD queries and run them in a unit-test (requires GMP).
- This adds missing feature mentioned in #63
- Add Codecov to get a report of unit test code coverage in #64
- Add more tests to improve code coverage and fix small bugs in #65
- Fix the symmetric matrix assertion in
project_to_psd
andproject_to_pd
in #67 - Handle codim. point-point collisions in #66
- This adds missing feature as discussed in #63
- Add tests of Python bindings using nose2 in #69
- In CCD, check the initial distance when no motion occurs in #71
- Add a generic implementation of the nonlinear CCD (of linear geometry) algorithm from [Ferguson et al. 2021] in #72
- Generic nonlinear trajectories are specified through a
NonlinearTrajectory
virtual class. By default the maximum distance between the trajectory and a linearized version is computed using interval arithmetic. That is$\max_{t \in [0, 1]} \Vert p(\mathrm{lerp}(t_0, t_1, t)) - \mathrm{lerp}(p(t_0), p(t_1), t) \Vert_2 \leq \sup(\Vert p([t_0, t_1]) - \mathrm{lerp}(p(t_0), p(t_1), [0, 1]) \Vert_2)$ where$p$ is the point's position over time,$\mathrm{lerp}(a, b, t) := (b - a) t + a$ and$\sup([a,b]):=b$ . Because this can be an overly conservative approximation, users can override theNonlinearTrajectory::max_distance_from_linear
function to compute the max directly in closed form, if known. - We perform interval arithmetic using filib which has been shown to be "the only library that is correct, consistent, portable, and efficient" [Tang et al. 2022].
- Add a nonlinear CCD tutorial to the docs in #78
- Generic nonlinear trajectories are specified through a
- Add additional compiler warnings and resolve them to be warning-free in #73
- Add Python bindings for
igl::predicate::segment_segment_intersect
in #74 - Integrate SimpleBVH as a broad-phase method in #75
- Fix the shape derivative of mollified edge-edge contact in #76
- Additionally, this makes the shape derivative computation object-oriented.
- Update Python bindings with recent changes and unified comments in #77
- Add support for collision between codimensional edges and points in 3D in #79
- Implements missing features discussed in #63.
Full Changelog: v1.1.1...v1.2.0
New Contributors
- @halehOssadat made their first contribution in #56
- @jpanetta made their first contribution in #56