Skip to content

Commit 8668521

Browse files
committed
Update release_nores.rst for v1.5.0
1 parent 1de5c3e commit 8668521

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

docs/source/about/release_notes.rst

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,155 @@ Release Notes
66
.. role:: cmake(code)
77
:language: cmake
88

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>`_
157+
9158
v1.4.0 (July 22, 2025)
10159
----------------------
11160

0 commit comments

Comments
 (0)