ppf-contact-solver
Libraryst-tech/ppf-contact-solver
A GPU-accelerated contact solver for physics-based simulations of shells, solids, and rods.
Overview
It provides robust, penetration-free contact resolution with scalability to over 180M contacts. Uses finite element method for deformables, runs entirely on GPU in single precision, and includes Python APIs, a Blender add-on, and Docker deployment.
README Preview
# ZOZO's Contact Solver 🫶\n\nA contact solver for physics-based simulations\ninvolving 👚 shells, 🪵 solids and 🪢 rods. All made by [ZOZO, Inc.](https://corp.zozo.com/en/), the largest fashion e-commerce company in Japan.\n\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/getting-started.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/run-all-once.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/run-all-once-win.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/make-docs.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/build-docker.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/release-win.yml)\n[](https://github.com/st-tech/ppf-contact-solver/actions/workflows/blender.yml)\n\n\n> 🤖 We **highly** respect that readers expect to hear the author's original voice and tone, which we work to retain throughout. Our use of LLMs is clarified in [(Markdown)](./articles/llm_transparency.md).\n\n## 👀 Quick Look\n\n🎨 Simulate remotely from our [Blender add-on](https://st-tech.github.io/ppf-contact-solver) (screenshots taken on macOS; you can also run locally if you have a modern NVIDIA GPU on Windows or Linux)\n\n\n\n🚀 Or double click `start.bat` (Windows) or run a Docker command (Linux/Windows) to get it running\n\n\n\n🌐 Click the URL and explore our examples\n\n\n\n## ✨ Highlights\n\n- **💪 Robust**: Contact resolutions are penetration-free. No snagging intersections.\n- **⏲ Scalable**: An extreme case includes beyond 180M contacts. Not just one million.\n- **🚲 Cache Efficient**: All on the GPU runs in single precision. No double precision.\n- **🥼 Not Rubbery**: Triangles never extend beyond strict upper bounds (e.g., 1%).\n- **📐 Finite Element Method**: We use FEM for deformables and symbolic force jacobians.\n- **⚔️ Highly Stressed**: We run GitHub Actions to run stress tests [10 times in a row](#️-ten-consecutive-runs).\n- **
FAQ (2)
TroubleshootingHow to fix an Armature modifier not being applied when starting a Blender simulation?
Upgrade to **Blender Add-on 1.0.11 (addon-2026-06-01-1511)** or later and **ZOZO Contact Solver 2026-06-01-13-25** or later; this bug was officially fixed in those releases. As a temporary workaround, animate the armature from its rest position on frame 1 to the desired pose on frame 2, then create a pin group opposite to your actual pin groups with a two-frame duration so the mesh does not simulate until the armature deformation is ready. The actual pin group deformations are also cached during this setup.
TroubleshootingWhy does Blender PPF Contact Solver transfer fail with 'PanicException: index out of bounds' on Windows?
This error often occurs when the Blender project file path or addon installation directory contains spaces. Save your .blend file to a path without spaces (e.g., C:\\Projects) and ensure the plugin is installed in a directory without spaces. Restart Blender and try transferring again. If the issue persists, check your Windows username for spaces, as the temporary directory may also be affected.