Changelog

All notable changes to this project will be documented in this file.

2021-07-26 (1479aae)

Changed

  • Updated the CMake system to use modern FetchContent to download externals

2021-07-22 (e24c76d)

Fixed

  • Updated CCD strategy when using Tight Inclusion to only perform no_zero_toi=true when there is no minimum distance

2021-07-17 (a20f7a2)

Added

  • Added detect_edge_face_collision_candidates_brute_force for 3D intersection broad-phase

  • Added ability to save an obj of collision candidates

  • Added tests for has_intersection (all pass after fixes)

Fixed

  • Fixed possible numerical rounding problems in HashGrid AABB::are_overlapping

  • Fixed HashGrid’s function for getting edge-face intersection candidates

2021-07-15 (7301b42)

Fixed

  • Use ignore_codimensional_vertices in the brute force broad-phase method

  • Fixed AABB inflation in brute force and SpatialHash methods

2021-07-08 (86ae4e5)

Changed

  • Replaced vertex group ids with more powerful can_collide function. By default everything can collide with everything (same as before)

  • Reordered parameters in construct_constraint_set(), is_collision_free(), and compute_collision_free_stepsize()

  • update_barrier_stiffness now requires the constraint_set rather than building it

  • update_barrier_stiffness dropped dhat parameter

Fixed

  • SpatialHash for 2D

Removed

  • Verison of initial_barrier_stiffness that computes the constraint set and barrier gradient because there are a lot of parameters to these functions

2021-07-05 (4d16954)

Changed

  • Renamed directory src/spatial_hash/src/broad_phase/

  • Renamed files src/ccd/broad_phase.*src/ccd/aabb.*

2021-07-05 (b3808e1)

Added

  • Select the broad-phase method for CCD and distance constraints

    • Methods: HASH_GRID, SPATIAL_HASH, BRUTE_FORCE

  • CCD parameters for Tight Inclusion’s tolerance and maximum iterations

Changed

  • ignore_codimensional_vertices to false by default

  • CMake option TIGHT_INCLUSION_WITH_NO_ZERO_TOI=ON as default

2021-06-18 (aa59aeb)

Changed

  • construct_friction_constraint_set now clears the given friction_constraint_set

2021-05-18 (245b13b)

Changed

  • Use TightInclusion degenerate edge-edge for point-point and point-edge CCD

2021-05-11 (5c34dcd)

Changed

  • char* exceptions to std::exceptions

2021-05-06 (24056cc)

Changed

  • Gave dhat_epsilon_scale a default value of 1e-9 in update_barrier_stiffness

  • warning

    Changed order of parameters to update_barrier_stiffness

    • Flipped bbox_diagonal and dhat_epsilon_scale

2021-05-06 (81d65f3)

Fixed

  • Bug in output min distance of update_barrier_stiffness

2021-05-04 (59ec167)

Changed

  • Moved eigen_ext functions into ipc namespace

  • Renamed max size matrices with Max

    • Eigen::VectorX([0-9])ipc::VectorMax$1

    • Eigen::MatrixXX([0-9])ipc::VectorMax$1

    • Eigen::ArrayMax([0-9])ipc::ArrayMax$1

2021-05-03 (664d65f)

Added

  • Added utility function to check for edge-edge intersection in 2D and edge-triangle intersection in 3D.

  • Optionally: use GMP for exact edge-triangle intersection checks

2021-05-03 (9b4ebfc)

Added

  • voxel_size_heuristic.cpp which suggests a good voxel size for the SpatialHash and HashGrid

Changed

  • Changed HashGrid voxel size to be the average edge length not considering displacement length. This results in better performance, but can result in large memory usage.

2021-04-29 (293d0ad)

Added

  • Added TBB parallel loops to the main function (compute_potential, compute_friction_potential, compute_collision_free_stepsize, etc.)

  • Added function addVerticesFromEdges that adds the vertices connected to edges in parallel and avoids duplicates

Changed

  • Changed the HashGrid to use ArrayMax3 over VectorX3 to simplify the code

Fixed

  • Fixed some parameters that were not by reference

2021-04-21 (c8a6d5)

Added

  • Added the SpatialHash from the original IPC code base with some modification to get all candidates in parallel

    • Benchmark results indicate this SpatialHash is faster than the HashGrid with multithreading

    • TODO: Improve HashGrid or fully integrate SpatialHash into ipc.hpp

2021-02-11 (9c7493)

Changed

2021-02-01 (b510253)

Added

2021-02-01 (a395175)

Added

  • Added 2D friction model based on the 3D formulation.

    • TODO: Test this further

2021-01-12 (deee6d0)

Added

  • Added and optional parameter F2E to construct_constraint_set(). This is similar to F (which maps faces to vertices), but maps faces to edges. This is optional, but recommended for better performance. If not provided a simple linear search will be done per face edge!

    • TODO: Add a function to compute this mapping.

2021-01-09 (deee6d0)

Changed

  • Replaced VectorXd and MatrixXd with static size versions for local gradient and hessians

2020-11-20 (93143ad)

Changed

  • Removed TBB parallelization form the hash grid because we get better performance without it.

    • TODO: Improve parallelization in the hash grid or switch to the original IPC spatial hash

2020-11-06 (4553509)

Fixed

  • Fixed multiplicity for point-triangle distance computation to avoid duplicate point-point and point-edge pairs.

2020-10-22 (51f4903)

Fixed

  • Projection of the hessian to PSD. This was completely broken as the projected matrix was never used.

2020-10-22 (9be6c0f)

Fixed

  • Mollification of EE constraints that have a distance type of PP or PE

  • If there is no mollification needed then the PP and PE constraints are stored with multiplicity

  • Set the parallel EE friction constraint threshold to eps_x like in IPC

    • This avoid needing the mollification for the normal force and these forces are small anyways

2020-10-10 (cb8b53f)

Fixed

  • Assertions in compute_collision_free_stepsize

2020-10-10 (4a5f84f)

Fixed

  • Point-triangle distance type by replacing it with the one used in the original IPC code

2020-10-10 (1d51a61)

Added

  • Boolean parameter in compute_friction_potential_hessian that controls if the hessian is projected to PSD

2020-10-09 (b737fb0)

Added

  • Parameter for vertex group IDs to exclude some collisions (e.g., self collisions)

2020-10-08 (6ee60ae)

Added

  • Second version of update_barrier_stiffness() that takes an already computed minimum distance and world bounding box diagonal

2020-10-08 (cc3947d)

Added

  • Second version of initial_barrier_stiffness() that takes an already computed barrier gradient

  • Assertions on initial_barrier_stiffness() input

    • average_mass > 0 && min_barrier_stiffness_scale > 0

Changed

  • Fixed typo in initial_barrier_stiffness() name (was intial_barrier_stiffness())

2020-10-07 (5582582)

Added

  • FrictionConstraint structures to store friction information (i.e., tangent basis, normal force magnitude, closest points, and coefficient of friction)

  • Unit test that compares the original IPC code’s friction components with the toolkit’s

Changed

  • compute_friction_bases() is now construct_friction_constraint_set()

    • It now takes the coefficient of friction (mu)

    • It now puts all information inside of the FrictionConstraints (friction_constraint_set)

2020-10-06 (b48ba0e)

Changed

  • During construct_constraint_set() the constraints are added based on distance type

    • Duplicate vertex-vertex and edge-vertex constraints are handled by a multiplicity multiplier

    • Edge-edge constraints are always line-line distances

    • Point-triangle constraints are always point-plane distances

2020-10-05 (9a4576b)

Fixed

  • Fixed a bug in the point-triangle closest points and tangent basis computed in compute_friction_bases()

  • Fixed a bug in edge_edge_tangent_basis() used to compute the tangent basis for friction

2020-09-19 (31a37e0)

Added

  • spdlog for logging information

2020-09-19 (acb7664)

Changed

  • Headers are now include with the prefix ipc/

    • E.g., #include <ipc.hpp>#include <ipc/ipc.hpp>

2020-09-04 (7dd2ab7)

Added

  • Collision constraint to store distance constraint pairs

    • EdgeEdgeConstraint stores the edge-edge mollifier threshold (eps_x)

Changed

  • Input parameter dhat_squared is now dhat (i.e., non-squared value)

  • Input parameter epsv_times_h_squared is now epsv_times_h (i.e., non-squared value)

  • Constraints replaced Candidates

  • construct_constraint_set() now takes the rest vertex position (V_rest)

  • compute_barrier_potential*() no longer take the rest vertex position