ppf-contact-solver:100%无穿透保证的GPU物理接触求解器
你是否曾经被物理模拟中布料与物体互相穿透、网格交叉缠绕的“穿模”问题所困扰?传统的接触求解器往往只能“尽量”减少穿透,却无法从根本上杜绝。ppf-contact-solver(ZOZO s Contact Solver)的出现,旨在彻底解决这个棘手的难题。它是一款基于Python的高性能GPU接触求解器,专为涉及👚壳、🪵固体、🪢杆、🧱刚体乃至⏳沙子的物理模拟而设计。从日本最大的时尚电商ZOZO的内部物理引擎起步,如今正与全球社区共同进化,且完全开源。本文将带你全面了解这个潜力新星。
截至收录:
ppf-contact-solver stars数:4431
ppf-contact-solver forks数:327
ppf-contact-solver项目目录截图

ppf-contact-solver核心亮点
🌟 亮点一(绝对无穿透保证):凭借三次势垒理论,该求解器在构造上保证了100%无穿透,而非启发式近似。运行结束后还会执行交集检查器逐一验证,绝不留任何隐蔽缠绕。
🚀 亮点二(大规模并行扩展):接触求解与弹性求解均在GPU上运行,采用单精度浮点,缓存效率极高。极端的测试场景中可处理超过1.8亿个接触,轻松超越“百万级”的常规预期。
📐 亮点三(严格形变边界):采用有限元方法(FEM)处理可变形体,并提供符号形式的力雅可比矩阵。三角形网格的应变永远不会超出严格的硬性上限(例如1%),杜绝“橡皮糖”式的不真实形变。
🎨 亮点四(生态集成丰富):提供开箱即用的Windows原生可执行程序(约320MB,无需安装Python/Docker/CUDA)、Docker镜像、Blender插件以及JupyterLab前端。还支持MCP协议,让LLM通过自然语言驱动模拟。
ppf-contact-solver快速开始
无论你选择Blender插件还是JupyterLab界面,都需要先部署求解器引擎。最简单的方式是通过Docker启动(以Linux为例):
- 拉取并运行容器(前置要求:NVIDIA驱动与NVIDIA Container Toolkit):
bash
MY_WEB_PORT=8080 # JupyterLab端口
MY_BLENDER_PORT=9090 # Blender插件通信端口
IMAGE_NAME=ghcr.io/st-tech/ppf-contact-solver-compiled:latest
docker run --rm -it \
--name ppf-contact-solver \
--gpus all \
-p ${MY_WEB_PORT}:${MY_WEB_PORT} \
-p ${MY_BLENDER_PORT}:${MY_BLENDER_PORT} \
-e WEB_PORT=${MY_WEB_PORT} \
$IMAGE_NAME # 镜像大小约1GB - 启动JupyterLab:看到
==== JupyterLab Launched! 🚀 ====后,在浏览器中访问http://localhost:8080,即可开始探索。 - 运行你的第一个模拟:在JupyterLab中新建Notebook,执行以下代码,就能在球体上覆盖一块布料,并固定两个角落:
python
from frontend import App
app = App.create("drape")
V, F = app.mesh.square(res=128, ex=[1, 0, 0], ey=[0, 0, 1])
app.asset.add.tri("sheet", V, F)
V, F = app.mesh.icosphere(r=0.5, subdiv_count=4)
app.asset.add.tri("sphere", V, F)
scene = app.scene.create()
obj = scene.add("sheet").at(0, 0, 0)
obj.pin(obj.grab([1, 0, -1]) + obj.grab([-1, 0, -1]))
scene.add("sphere").at(0, -0.5, 0).jitter().pin()
scene = scene.build().report()
session = app.session.create(scene)
session.param.set("frames", 100).set("dt", 0.01)
session.build().start().animate()
ppf-contact-solver应用场景
场景一:Blender高质量布料与特效模拟:借助官方Blender插件,艺术家可以在熟悉的三维界面中构建场景,远程连接高性能GPU服务器完成模拟后取回结果。即便是macOS用户,也能流畅使用CUDA物理模拟。CGMatter等知名YouTuber已发布教程,展示了风筝、斑马、褶皱布料等惊艳效果。
场景二:大规模工业级数值分析:求解器可部署于AWS、vast.ai、Scaleway等云平台,按需租用GPU实例(利率低于每小时0.5美元)。超大规模测试中,超过300万顶点、1.8亿接触的模拟依然稳定运行,适合工程与科研场景中的高保真物理验证。
场景三:AI与自动化驱动:借助内置的MCP(Model Context Protocol)支持,可以让Claude、Codex等LLM通过自然语言指令完成从场景搭建、参数调整到模拟运行的全流程,为自动化实验开辟了全新的想象空间。
用户案例:知名技术媒体频道 Two Minute Papers 评价其“解决了游戏中一个由来已久的严重Bug”;School of Motion 在Motion Mondays中专门介绍了它;CGMatter 发布了Blender布料模拟的深度教程,在日本及海外社区获得广泛关注。
ppf-contact-solver链接
st-tech / ppf-contact-solver项目地址:https://github.com/st-tech/ppf-contact-solver
本文地址:https://www.tgoos.com/46131
