IPC Toolkit is a set of reusable functions to integrate Incremental Potential Contact (IPC) into a simulation.
- IPC barrier function and its derivatives and adaptive barrier stiffness algorithm
- Broad- and narrow-phase continuous collision detection (CCD) of linear and nonlinear trajectories
- Distance computation and derivatives between edges in 2D and triangles in 3D
- Distance barrier potential and its derivatives
- Smooth and lagged dissipative friction potential and its derivatives
This is not a full simulation library. As such it does not include any physics or solvers. For a full simulation implementation, we recommend PolyFEM (a finite element library) or Rigid IPC (rigid-body dynamics) both of which utilize the IPC Toolkit.
Instruction for building and including the IPC Toolkit in your CMake project can be found on the website here.
The IPC Toolkit depends on a handful of third-party libraries, which are used to provide various functionality.
All required dependencies are downloaded through CMake depending on the build options, and are built automatically when you build the IPC Toolkit. You do not need to install them separately.
A full list of dependencies can be found on the dependencies page.
We provide Python bindings for functions in the toolkit using pybind11.
For more information see the Python documentation.
See the tutorial for a quick introduction to the toolkit, or the documentation for a full reference.
This project is open to contributors! Contributions can come in the form of feature requests, bug fixes, documentation, tutorials, and the like. We highly recommend filing an Issue first before submitting a Pull Request.
Simply fork this repository and make a Pull Request! We would appreciate:
- Implementation of new features
- Bug Reports
- Documentation
- Testing
IPC Toolkit is created and maintained by academics: citations let us know our work is having impact! Please cite the IPC Toolkit or otherwise give a shout-out if and when it contributes to published works.
@software{ipc_toolkit,
author = {Zachary Ferguson and others},
title = {{IPC Toolkit}},
url = {https://github.com/ipc-sim/ipc-toolkit},
year = {2020},
}
Additionally, you can cite the original IPC paper:
@article{Li2020IPC,
author = {Minchen Li and Zachary Ferguson and Teseo Schneider and Timothy Langlois and
Denis Zorin and Daniele Panozzo and Chenfanfu Jiang and Danny M. Kaufman},
title = {Incremental Potential Contact: Intersection- and Inversion-free Large Deformation Dynamics},
journal = {{ACM} Trans. Graph. (SIGGRAPH)},
year = {2020},
volume = {39},
number = {4},
articleno = {49}
}
MIT License © 2020, the IPC-Sim organization (See LICENSE
for details).