物理引擎约束系统解析:约束建模、求解路线与工程调参 引言:绳子为什么不能只靠距离判断实现一个绳摆 Demo 时,最直觉的做法是每帧检查Vector3.Distance maxLen,超长了就把位置拽回来。结果往往是绳子像弹簧一样持续抖动,或者摆锤直接飞离锚点。问题在于:事后修正位置并不满足动力学规律,被强行挪动的刚体在下一帧仍带着原来的速度继续越界,形成"越界—硬拽—再越界"的振荡。这揭示了约束系统的本质:约束不是几何规则,而是带求解器的动力学方程。引擎每帧根据当前状态计算约束偏差,求出"纠正冲量"直接修改速度(或做位置修正),使刚体在满足约束的同时保持动量与能量的合理传递。一、约束的建模:自由度与方程1.1 从自由度角度理解约束三维空间中一个自由刚体有 6 个自由度(3 平移 + 3 旋转)。约束的本质是削减或限制自由度:约束类型限制内容剩余自由度典型应用距离约束(Distance Joint)两点间距离5(可绕锚点摆动、自转)绳索、刚性拉杆铰链约束(Hinge Joint)相对位置 + 2 个旋转轴1(绕轴转动)门、吊桥、车轮悬挂