Skip to content

v1.2.0

Compare
Choose a tag to compare
@zfergus zfergus released this 12 Dec 03:11
· 74 commits to main since this release
f9969cb

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
  • 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
  • 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 to CollisionConstraint::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, return true if the initial distance is less than the minimum distance, and add an explicit tmax parameter rather than relying on the initial value of toi.
    • 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 and project_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 the NonlinearTrajectory::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
  • 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