关于 physics-rendering-expert
physics-rendering-expert 是面向实时物理模拟开发者的技能,聚焦绳索动力学与约束求解。它涵盖 PBD、积分和旋转表示的选择,并提供常见实现问题的指导。
主要功能
- 01绳索与缆线动力学
- 02PBD 约束求解
- 03Gauss-Seidel 与 Jacobi 选择
- 04Verlet 积分指导
- 05四元数与双四元数旋转
适用场景
- 01实现实时绳索或链条模拟
- 02为粒子系统选择积分方法
- 03处理多绳索缠绕检测
- 04选择布料模拟的并行求解器
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill physics-rendering-expert安装后在 Claude Code 中输入/physics-rendering-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CHANGELOG.md.claude-plugin/plugin.jsonreferences/tangle-physics.mdimplementations.mdknot-garden-physics.mdcore-algorithms.md详细介绍
物理与渲染专家:绳索动力学与约束求解
专攻实时绳索/缆绳动力学、约束求解和基于物理的模拟的计算物理专家。
何时使用此技能
适用于:
- 实时绳索/缆绳/链条模拟(牵引绳、攀岩绳)
- 基于位置的动力学(PBD)实现
- 约束求解器(Gauss-Seidel、Jacobi)
- 四元数/双四元数旋转数学
- 粒子系统的 Verlet 积分
- 缠绕检测(多条绳索之间的碰撞)
不适用于:
- 流体动力学 → 专用 SPH/MPM 求解器
- 断裂模拟 → 需要 FEM 或 MPM
- 离线电影级物理 → 约束方式不同
- Unity/Unreal 物理 → 使用内置系统
专家与新手的辨别要点
| 主题 | 新手 | 专家 |
|---|---|---|
| 约束方法 | 使用弹簧力(F=ma) | 使用 PBD(直接操作位置) |
| 为何使用 PBD | “弹簧效果不错” | 弹簧需要极小的时间步;PBD 无条件稳定 |
| 求解器选择 | “一直迭代到完成就行” | 链条用 Gauss-Seidel,GPU 用 Jacobi |
| 迭代次数 | 迭代 20 次以上 | 5-10 次最理想;之后收益递减 |
| 旋转 | 使用欧拉角 | 使用四元数(无万向节锁) |
| 积分 | 前向欧拉 | Verlet(辛积分、能量守恒) |
常见反模式
使用基于力的弹簧处理刚性约束
| 表现形式 | 错误原因 |
|---|---|
force = k * (distance - rest_length),其中 k 很大 | k 很大时需要极小的 dt 才能保持稳定;k 较小时绳索会显得松软 |
| 改用:使用 PBD——直接移动粒子以满足约束 |
使用欧拉角表示旋转
| 表现形式 | 错误原因 |
|---|---|
rotation = vec3(pitch, yaw, roll) | 俯仰角为 90° 时会发生万向节锁;组合不稳定 |
| 改用:使用四元数——4 个数值、无万向节锁、SLERP 稳定 |
迭代过多
| 表现形式 | 错误原因 |
|---|---|
solver_iterations = 50 | 5-10 次之后收益递减;浪费计算资源 |
| 改用:使用 5-10 次迭代;若仍不够,则使用 XPBD 柔顺性 |
大型系统使用单线程 Gauss-Seidel
| 表现形式 | 错误原因 |
|---|---|
| 对 1000 个以上的约束使用 Gauss-Seidel | Gauss-Seidel 本质上是顺序执行的 |
| 改用:使用 Jacobi 求解器进行 GPU 并行化 |
快速参考
PBD 为何优于基于力的物理
- 无条件稳定(可使用较大的时间步)
- 可直接控制约束满足情况
- 无需调节弹簧常数
- 行为可预测
求解器选择
| 求解器 | 可并行化 | 收敛速度 | 适用场景 |
|---|---|---|---|
| Gauss-Seidel | 否 | 快 | 链条、绳索 |
| Jacobi | 是(GPU) | 较慢 | 大型网格、布料 |
旋转表示
- 3D 旋转 → 四元数(切勿使用欧拉角)
- 旋转 + 平移 → 双四元数
- 骨骼蒙皮/混合 → 双四元数(无糖果包装变形伪影)
性能目标
| 系统 | 预算 | 说明 |
|---|---|---|
| 单根绳索(100 个粒子) | <0.5ms | 5 次迭代即可 |
| 三犬牵引绳(60 个粒子) | <0.7ms | 包含缠绕检测 |
| 布料(1000 个粒子) | <2ms | 在 GPU 上使用 Jacobi |
发展时间线
| 时期 | 关键进展 |
|---|---|
| 2006 年以前 | 质点弹簧系统,存在稳定性问题 |
| 2006-2015 | 引入 PBD(Müller 等人),实现无条件稳定 |
| 2016-2020 | XPBD 为软约束加入柔顺性 |
| 2021-2024 | ALEM(2024 SIGGRAPH)、BDEM、神经物理 |
| 2025 年以后 | XPBD 成为标准、CPU/GPU 混合、学习式修正 |
决策树
选择约束求解器:
- 顺序结构(绳索/链条)?→ Gauss-Seidel
- 大型并行系统(布料/毛发)?→ Jacobi(GPU)
- 需要软约束?→ 使用带柔度的 XPBD
选择积分方法:
- 只需要位置?→ 基础 Verlet
- 需要速度来计算力?→ Velocity Verlet
- 需要高精度?→ RK4(但 PBD 通常已足够)
集成
- metal-shader-expert - 用于 Jacobi 求解器的 GPU 计算着色器
- native-app-designer - 可视化和调试 UI
参考文件
| 文件 | 内容 |
|---|---|
references/core-algorithms.md | PBD 循环、Verlet、四元数、求解器实现 |
references/tangle-physics.md | 多绳索碰撞、Capstan 摩擦、TangleConstraint |
请记住:实时物理关注的是稳定性和视觉上的合理性,而非物理精度。使用 5-10 次迭代的 PBD,以 60fps 运行,效果出色且速度很快。
评论
支持 Markdown