v1.6.0 #243
zfergus
announced in
Announcements
v1.6.0
#243
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Highlights
ipc::BarrierPotentialand simplify the tangential API (Add barrier stiffness and simplify tangential API #215).Broad Phase
Set the default broad phase to
ipc::LBVH(Set Default Broad Phase to LBVH #212).Total broad-phase performance across methods; LBVH is roughly 1.5× faster than the fastest existing method. Benchmarked on an Apple M2 Max (12 cores).
Remove the SimpleBVH dependency and the deprecated
BVHbroad phase (Remove SimpleBVH dependency and references #213).LBVH construction is more than 3× faster than the removed BVH method. Benchmarked on an Apple M2 Max (12 cores).
Add rightmost-leaf pruning to LBVH self-collision traversal, skipping subtrees fully left of the query. 39% average speed-up in edge-edge traversal across benchmark scenes (Add Rightmost-Leaf Pruning to LBVH Traversal #222).
Optimize LBVH construction with a single bottom-up pass [Apetrei 2014], building the hierarchy and bounding boxes simultaneously instead of the two-pass build of [Karras 2012]. Up to 10% faster to build (Optimize LBVH Construction using Bottom-up Build #230).
Bottom-up [Apetrei 2014] vs. two-pass [Karras 2012] LBVH construction, benchmarked on an Apple M3 Pro (11 cores).
Refactor the AABB, HashGrid, and LBVH parallel loops to use
tbb::parallel_forwith index ranges directly (Divide and Truncate #228).New Features 🚀
💥 [Breaking] Add barrier stiffness and simplify the tangential API (Add barrier stiffness and simplify tangential API #215).
ipc::BarrierPotential: new constructors, member, and getter/setter, scaling the potential, gradient, and Hessian bynormal_stiffnessparameter from the tangential collision constructors andipc::TangentialPotentialinterfaces, updating all call sites and Python bindings.Add analytic plane-vertex collision support (Add analytic plane-vertex collision support #216).
ipc::PlaneVertexCandidateand normal and tangential plane-vertex collisions, integrated into the collision builders.ipc::CollisionMesh::planes(a list ofEigen::Hyperplane<double, 3>) to represent infinite analytic planes such as a ground plane, with Python bindings.implicitsmodule.Add anisotropic friction by @antoinebou12 (Anisotropic friction #210).
ipc::TangentialCollisions::update_lagged_anisotropic_friction_coefficientsafterbuildand whenever the lagged state changes.Implement the Gauss-Newton preconditioner from [Shen et al. 2024] (Implement Preconditioner from Shen et al. [2024] #221).
ipc::CollisionStencildistance-vector utilities (compute_distance_vector,compute_distance_vector_jacobian, and diagonal/Jacobian-contraction helpers).ipc::NormalPotentialGauss-Newton routines (diagonal and quadratic form), parallelized with TBB.Add the Planar Divide-and-Truncate (Planar-DAT) trust-region filter for OGC [Chen et al. 2026] (Divide and Truncate #228).
ipc::ogc::TrustRegion::planar_filter_stepis a direction-aware alternative to isotropic filtering: it computes a division plane per collision pair and truncates only motion toward the opposing primitive, reducing artificial damping and deadlock in dense-contact scenarios.Add composable collision filters (Collision filter #235).
ipc::CollisionFilter(C++ and Python) wraps anybool(int, int)callable and composes via|(union),&(intersection), and!(negation).make_vertex_patches_filter,make_static_obstacle_filter,make_codim_cross_filter, andmake_connected_components_filter.Add support for nonmanifold smooth edges (Add Support for Nonmanifold Smooth Edges #223).
Edge3primitive andsmooth_edge3_term(and its derivatives) to an arbitrary number of adjacent faces.edges_to_facesfrom a fixed-size matrix to a vector of vectors and increaseN_EDGE_NEIGHBORS_3Dfrom 4 to 6.API Changes 🔧
Configurable derivative layout (Configurable derivative layout #217).
VERTEX_DERIVATIVE_LAYOUTconstant toipc/config.hppand parameterize the gradient, sparse-gradient, Hessian-triplet, and Jacobian-triplet assembly helpers with an optional row- or column-major global ordering (defaulting toVERTEX_DERIVATIVE_LAYOUT).💥 [Breaking] Update the local 3rd-order tensor Jacobian layout (Update Local 3rd-Order Tensor Jacobian Layout #219).
*_matrix/*_matrix_jacobianto*_jacobian/*_dx_dbetaacross C++, Python, and documentation.💥 [Breaking] Refactor the nonlinear CCD into a
ipc::NonlinearCCDclass (Refactor Nonlinear CCD Implementation into a Class #218).Eigen::ConstRefand adjust the conservative-rescaling parameter handling.Bug Fixes 🐛
PARALLEL_THRESHOLDinedge_edge_distance_typeto correctly classify nearly-collinear coplanar edges, and add defensive guards for mollified collisions atEdge2active check by @udaykusupati (2d bug fix #227).PrimitiveDistanceby adding explicit specialization declarations (Fix MSVC duplicate symbol errors for PrimitiveDistance #237).Profiling ⏱️
IPC_TOOLKIT_WITH_TRACYCMake option (Add Optional Tracy Frame Profiler #234).Python 🐍
TBB_NUM_THREADSenvironment variable, applied on import ofipctk(Allow the thread limit to be set globally via an environment variable. #242).IPCTK_WITH_SIMDenvironment variable to disable SIMD in Python builds (Add env var to disable SIMD in setup.py #231).Miscellaneous
maybe_parallel_forwrapper with directtbb::parallel_forandtbb::enumerable_thread_specific(Replace maybe_parallel_for with TBB APIs #214).nbstripoutpre-commit hook (Strip notebook outputs and add nbstripout pre-commit hook #240).v1.0.3tov1.0.4.New Contributors
Full Changelog: v1.5.0...v1.6.0
This discussion was created from the release v1.6.0.
All reactions