You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/source/about/release_notes.rst
+149Lines changed: 149 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,155 @@ Release Notes
6
6
.. role:: cmake(code)
7
7
:language: cmake
8
8
9
+
v1.5.0 (Febuary 5, 2026)
10
+
------------------------
11
+
12
+
Highlights
13
+
~~~~~~~~~~
14
+
15
+
- Implement "Geometric Contact Potential" :cite:t:`Huang2025GCP` by `@Huangzizhou <https://github.com/Huangzizhou>`_ in `#191 <https://github.com/ipc-sim/ipc-toolkit/pull/191>`_
16
+
- Implement "Offset Geometric Contact" :cite:t:`Chen2025Offset` by `@zfergus <https://github.com/zfergus>`_ in `#192 <https://github.com/ipc-sim/ipc-toolkit/pull/192>`_
17
+
- Implement fully parallel LBVH Broad Phase by `@zfergus <https://github.com/zfergus>`_ in `#188 <https://github.com/ipc-sim/ipc-toolkit/pull/188>`_
18
+
- Add geometry utilities for collision normals, signed distances, and dihedral angles with gradients and Hessians.
19
+
20
+
New Formulations
21
+
~~~~~~~~~~~~~~~~
22
+
23
+
- **Geometric Contact Potential (GCP)** by `@Huangzizhou <https://github.com/Huangzizhou>`_ in `#191 <https://github.com/ipc-sim/ipc-toolkit/pull/191>`_
24
+
25
+
- The implementation includes the collision and friction potential with gradients and Hessians.
26
+
- Tutorial available `here <https://ipctk.xyz/tutorials/gcp.html>`_.
27
+
28
+
- **Offset Geometric Contact (OGC)** by `@zfergus <https://github.com/zfergus>`_ in `#192 <https://github.com/ipc-sim/ipc-toolkit/pull/192>`_
29
+
30
+
- OGC is a penetration-free contact model that replaces continuous collision detection (CCD) with a trust-region-based approach.
31
+
- **New Namespace:** Introduced ``ipc::ogc`` to encapsulate OGC-specific functionality.
32
+
- **Trust Region Implementation:**
33
+
34
+
- Added ``TrustRegion`` class (``trust_region.hpp``, ``trust_region.cpp``) to manage per-vertex conservative bounds.
35
+
- Implemented ``warm_start_time_step`` to initialize the trust region and handle initial predictions.
36
+
- Implemented ``filter_step`` to scale optimization steps ensuring vertices stay within safe bounds.
37
+
- Implemented ``update`` and ``update_if_needed`` to dynamically resize trust regions based on motion.
38
+
39
+
- **Feasible Region Logic:**
40
+
41
+
- Added ``feasible_region.hpp`` and ``feasible_region.cpp`` containing geometric predicates (e.g., ``check_vertex_feasible_region``, ``is_edge_edge_feasible``) to verify if primitives are within valid non-penetrating regions.
42
+
- Integrated feasible region checks into the ``NormalCollisions`` class to filter out invalid collision candidates. Enabled via ``set_collision_set_type(NormalCollisions::CollisionSetType::OGC)``.
43
+
44
+
- **Step Scaling:** Unlike the original paper's projection method, ``TrustRegion::filter_step`` scales the descent direction $\beta$ to keep vertices on the trust region boundary. This preserves the descent direction, ensuring compatibility with line-search-based solvers.
45
+
- Tutorial available `here <https://ipctk.xyz/tutorials/ogc.html>`_.
46
+
47
+
Broad Phase
48
+
~~~~~~~~~~~
49
+
50
+
- Parallel CPU LBVH implementation by `@zfergus <https://github.com/zfergus>`_ in `#188 <https://github.com/ipc-sim/ipc-toolkit/pull/188>`_
51
+
52
+
- New broad phase collision detection method with memory optimizations on the AABB structure.
53
+
- LBVH Broad Phase:
54
+
55
+
- Implemented ``LBVH`` class in ``src/ipc/broad_phase/lbvh.hpp``, providing a Linear Bounding Volume Hierarchy method for broad phase collision detection.
56
+
- Fully parallel build and traversal routines using Intel TBB.
57
+
- SIMD optimizations for AABB overlap tests.
58
+
- Faster than the existing BVH method and all other broad phase methods in IPC Toolkit for large scenes.
59
+
60
+
- More than 3x faster to build.
61
+
- Up to 1.5x faster for candidate detection.
62
+
- Detailed performance charts available below.
63
+
64
+
- Added ``python/examples/lbvh.py`` to demonstrate usage and visualization.
65
+
66
+
- ⚡ Enhancements
67
+
68
+
- Performance Optimizations:
69
+
70
+
- Added ``DefaultInitAllocator`` to reduce overhead when allocating large arrays of POD types.
71
+
- Replaced ``std::vector<AABB>`` with ``std::vector<AABB, DefaultInitAllocator<AABB>>``.
72
+
- Memory Optimization:
73
+
74
+
- Switched ``AABB::min`` and ``AABB::max`` from ``ArrayMax3d`` to ``Eigen::Array3d``.
75
+
- Result: Reduces ``sizeof(AABB)`` from 76 to 64 bytes, allowing AABB to fit into a single cache line (assuming 64-byte lines).
76
+
77
+
- Replaced hardware rounding in ``AABB::conservative_inflation`` with software rounding using ``std::nextafter``.
78
+
79
+
- 💥 Breaking Changes
80
+
81
+
- API & Structural Changes:
82
+
83
+
- Moved dimension variable: Removed dim from ``AABB`` and moved it to ``BroadPhase`` to handle 2D/3D data more cleanly. ``dim`` is now set in ``BroadPhase::build``.
84
+
- Handle 2D data by setting AABB's z-components to zero.
85
+
- Constructor Removal: Removed the AABB default constructor and the initialization of ``AABB::vertex_ids``.
86
+
- Type Change: Changed ``to_3D`` in ``ipc/utils/eigen_ext.hpp`` to operate on ``Eigen::Array`` types instead of ``Eigen::Vector``.
87
+
- Deprecated ``BVH`` class in favor of the new ``LBVH`` class for better performance on large scenes.
88
+
89
+
- Refactor BroadPhase to Build from Vertex Boxes Directly in `#187 <https://github.com/ipc-sim/ipc-toolkit/pull/187>`_
90
+
- Rename ``sweep_and_tiniest_queue.cpp`` to ``.cu`` file by `@iiiian <https://github.com/iiiian>`_ in `#203 <https://github.com/ipc-sim/ipc-toolkit/pull/203>`_
91
+
- Fix vertex id assignment by `@iiiian <https://github.com/iiiian>`_ in `#204 <https://github.com/ipc-sim/ipc-toolkit/pull/204>`_
92
+
93
+
- Fix vertex id assignment logic in ``SweepAndTiniestQueue``.
94
+
95
+
- Replace optional ``const shared_ptr<BroadPhase>&`` parameters with ``BroadPhase*`` in `#205 <https://github.com/ipc-sim/ipc-toolkit/pull/205>`_
96
+
97
+
- Change ``make_default_broad_phase`` to return a ``unique_ptr``
98
+
99
+
- Pass parameters to Scalable CCD Narrow-Phase by `@antoinebou12 <https://github.com/antoinebou12>`_ in `#208 <https://github.com/ipc-sim/ipc-toolkit/pull/208>`_
100
+
101
+
- Replace hardcoded ``TightInclusionCCD::DEFAULT_TOLERANCE`` and ``TightInclusionCCD::DEFAULT_MAX_ITERATION`` with ``narrow_phase.tolerance`` and ``narrow_phase.tolerance`` if passed a ``TightInclusionCCD`` object.
102
+
- If ``narrow_phase_ccd`` is not a ``TightInclusionCCD`` instance, we fall back to default values to preserve backward compatibility.
103
+
104
+
- Add SIMD support via ``xsimd`` library in `#207 <https://github.com/ipc-sim/ipc-toolkit/pull/207>`_
105
+
106
+
- Cross-platform SIMD (Single Instruction, Multiple Data) support using the ``xsimd`` library in the LBVH code.
107
+
- Update the ``IPC_TOOLKIT_WITH_SIMD`` to be enabled by default, and improve CMake logic to detect SIMD capabilities and configure the build accordingly.
108
+
- Disable Eigen's internal vectorization to avoid crashes on Linux.
109
+
110
+
Math and Geometry Utilities
111
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
112
+
113
+
- Add normal computation and Jacobian methods for collision candidates in `#182 <https://github.com/ipc-sim/ipc-toolkit/pull/182>`_
114
+
- Collect normal utilities into ``geometry/normal`` files in `#197 <https://github.com/ipc-sim/ipc-toolkit/pull/197>`_
115
+
- Organize geometry and math utilities into ``geometry`` and ``math`` folders in `#198 <https://github.com/ipc-sim/ipc-toolkit/pull/198>`_
116
+
- Add signed distance computations for point-plane, point-line, and line-line geometries in `#206 <https://github.com/ipc-sim/ipc-toolkit/pull/206>`_
117
+
- Optimized edge_edge_mollifier.cpp with FMA operator in gradient calculations.
118
+
119
+
Miscellaneous
120
+
~~~~~~~~~~~~~
121
+
122
+
- Updated dependencies:
123
+
124
+
- Bump Abseil from ``20250512.1`` to ``20260107.0``
125
+
- Bump Catch2 from ``v3.8.1`` to ``v3.12.0``
126
+
- Bump Eigen from ``3.4.0`` to ``5.0.1``
127
+
- Bump JSON from ``v3.11.2`` to ``v3.12.0``
128
+
- Bump libigl from ``89267b4a80b1904de3f6f2812a2053e5e9332b7e`` to ``v2.6.0``
129
+
- Bump TBB from ``v2022.1.0`` to ``v2022.3.0``
130
+
- Bump Pybind11 from ``v2.13.1`` to ``v3.0.1``
131
+
- Bump robin-map from ``v1.4.0`` to ``v1.4.1``
132
+
- Bump spdlog from ``v1.15.3`` to ``v1.17.0``
133
+
134
+
- Make most dependencies private
135
+
136
+
- Added a figure for default dependencies of the ``ipc::toolkit`` library: https://ipctk.xyz/about/dependencies.html
137
+
- Refactored ``BVH`` class to use unique_ptr to hide ``SimpleBVH``
138
+
- Updated Sweep and Prune and Sweep and Tiniest Queue classes to use a Pimpl pattern for encapsulation.
139
+
- Mark ``tsl::robin_map`` and ``absl::hash`` as private dependencies in CMake. Update the dependency documentation accordingly.
140
+
- Convert ``SpatialHash`` to PImpl idiom to hide ``tsl::robin_map`` and ``absl::hash`` from the public API.
141
+
142
+
- Add Clang Tidy check
143
+
144
+
- Added a ``.clang-tidy`` configuration file with a comprehensive set of checks, exclusions, naming conventions, and options to enforce modern C++ practices and treat all warnings as errors.
145
+
- Introduced a GitHub Actions workflow (``.github/workflows/clang-tidy-check.yml``) to automatically run Clang-Tidy on relevant files for every push and pull request, improving code quality and review automation.
146
+
- Simplify CMake CUDA setup by `@iiiian <https://github.com/iiiian>`_ in `#201 <https://github.com/ipc-sim/ipc-toolkit/pull/201>`_
147
+
- Disable CUDA builds by default.
148
+
- Bump CMake minimum version to ``3.24`` to support ``CMAKE_CUDA_ARCHITECTURES="native"``
149
+
150
+
- Add performance profiling utilities in `#188 <https://github.com/ipc-sim/ipc-toolkit/pull/188>`_
151
+
152
+
- Added a (optional) profiler utility (``src/ipc/utils/profiler.hpp``) to measure/record metrics with CSV output support.
153
+
- Added Nlohmann JSON as a dependency for profiler storage.
154
+
- Use ``IPC_TOOLKIT_WITH_PROFILER`` CMake option to enable/disable profiling.
155
+
156
+
- Refactor to use ``Eigen::ConstRef`` for vertices in `#200 <https://github.com/ipc-sim/ipc-toolkit/pull/200>`_
0 commit comments