Skip to content
← All articles
Project introduction

IPC Toolkit: collision and friction inside a simulation

Listen to the audio story

IPC Toolkit and the friction that depends on direction · 1:42 · AI-written script, synthetic voices

Transcript

Ava: When two objects touch in a simulation, somebody has to work out when they collide and how much they rub. That's a lot of math to get right.

Andrew: So is IPC Toolkit the thing that does that?

Ava: It's a C plus plus library for exactly that. It does collision detection, distance derivatives, and friction potentials. But it's not a full physics engine. The application still owns the time-stepping loop and the solver.

Andrew: So the library answers questions, and the simulation drives.

Ava: Right. The simulation hands over collision geometry and how the vertices moved. The library runs a broad phase to find candidate pairs, then a narrow phase with continuous collision detection, and sends the result back.

Andrew: Where does Antoine come in?

Ava: He contributes upstream, staging changes on his own fork first. Two of his pull requests were merged in 2026. One adds anisotropic friction, and another lets you pass parameters to the Scalable CCD narrow phase.

Andrew: Anisotropic friction. Say that in plain words.

Ava: Friction that depends on direction and on which two materials are touching. Think of dragging something along the grain of wood versus across it. His thesis work on surface wear needed exactly that from the contact model.

Andrew: And the other pull request?

Ava: That one is about the GPU path for continuous collision detection. An earlier fix to the Windows CUDA build in the Scalable CCD project, plus the parameter pass-through, helped unblock it.

Andrew: Were all of them accepted?

Ava: No, a couple were closed without merge, and the page lists them honestly. The full write-up has the diagram and the whole table.

Table of contents

IPC Toolkit is a C++ library for contact calculations. It provides collision detection, distance derivatives and friction potentials. The application supplies the time-stepping loop and solver.

1. Where it fits

A simulation passes collision geometry and vertex motion to the contact library. The diagram follows that query through broad-phase candidates and narrow-phase continuous collision detection (CCD), then back to the application.

Contact query flow from an external simulation through broad-phase candidates and narrow-phase continuous collision detection to the result

A contact query starts and ends in the calling simulation. Time stepping and solving remain the application’s responsibility.

2. What it computes

The routines cover several parts of contact handling:

AreaAvailable calculations
Collision detectionBroad- and narrow-phase continuous collision detection.
DistanceDistance derivatives for edges and triangles.
Contact barriersBarrier functions and derivatives, distance barrier potentials, and adaptive barrier stiffness.
FrictionSmooth or lagged dissipative friction potentials.

IPC Toolkit is not a complete physics engine. The upstream project points to PolyFEM and Rigid IPC as complete simulation implementations that use the library.

3. My contributions

The fork at antoinebou12/ipc-toolkit[1] is where I stage changes before proposing them upstream. The pull requests below are the public record (GitHub, retrieved 2026-11-05); status is as GitHub reports it.

Pull requestOpenedStatus
ipc-sim/ipc-toolkit #210 — Anisotropic friction[2]2026-02Merged 2026-04-16
ipc-sim/ipc-toolkit #208 — Option to pass parameters to the Scalable CCD narrow phase[3]2026-01Merged 2026-01-26
ipc-sim/ipc-toolkit #144 — Draft adhesion documentation[4]2024-11Merged 2024-12-11
ipc-sim/ipc-toolkit #139 — Static and kinetic coefficients in the tangential collision force[5]2024-11Closed without merge
ipc-sim/ipc-toolkit #128 — Pairwise kinetic and static friction for different materials[6]2024-11Closed without merge
Continuous-Collision-Detection/Scalable-CCD #5 — Remove -fpic for the Windows CUDA build (vcpkg)[7]2024-09Merged 2024-09-27
Continuous-Collision-Detection/Scalable-CCD #6 — Multiple CUDA version tests[8]2024-09Closed without merge

Two staging pull requests remain open on the fork: #3 — extract tolerance and max iterations from TightInclusionCCD for GPU CCD[9] and #4 — anisotropic friction[10], the branch behind upstream #210.

The thread through these changes is friction that depends on direction and material pair, which is what my thesis work on surface wear needed from the contact model, plus the GPU continuous-collision-detection path (Scalable CCD) that the Windows build and the parameter pass-through unblocked.

4. Read the code and build instructions

The project documentation covers the repository structure. Use the upstream README[11] for build instructions and the contributor fork[1] for changes in that fork.

References

  1. antoinebou12. (). ipc-toolkit. [Software repository] github.com.
  2. ipc-sim. (). ipc-sim/ipc-toolkit #210 — Anisotropic friction. [Source file or documentation] github.com.
  3. ipc-sim. (). ipc-sim/ipc-toolkit #208 — Option to pass parameters to the Scalable CCD narrow phase. [Source file or documentation] github.com.
  4. ipc-sim. (). ipc-sim/ipc-toolkit #144 — Draft adhesion documentation. [Source file or documentation] github.com.
  5. ipc-sim. (). ipc-sim/ipc-toolkit #139 — Static and kinetic coefficients in the tangential collision force. [Source file or documentation] github.com.
  6. ipc-sim. (). ipc-sim/ipc-toolkit #128 — Pairwise kinetic and static friction for different materials. [Source file or documentation] github.com.
  7. Continuous-Collision-Detection. (). Continuous-Collision-Detection/Scalable-CCD #5 — Remove -fpic for the Windows CUDA build (vcpkg). [Source file or documentation] github.com.
  8. Continuous-Collision-Detection. (). Continuous-Collision-Detection/Scalable-CCD #6 — Multiple CUDA version tests. [Source file or documentation] github.com.
  9. antoinebou12. (). #3 — extract tolerance and max iterations from TightInclusionCCD for GPU CCD. [Source file or documentation] github.com.
  10. antoinebou12. (). #4 — anisotropic friction. [Source file or documentation] github.com.
  11. ipc-sim. (). ipc-toolkit. [Software repository] github.com.

References use this article’s publication date.