资讯动态

碰撞检测与动力学求解的深层分工

发布时间:2026/10/8 13:56:30 来源:尧图企业网站定制
PhysX 中碰撞检测和动力学求解是两个相互连接、但职责不同的系统碰撞检测负责确定“物体之间发生了什么接触”动力学求解负责决定“这些接触以及外力、关节会让物体怎样运动”。以箱子落到地面为例碰撞检测 箱子底部接近或接触地面 接触点在哪里 接触法线与分离距离是多少。 动力学求解 地面需要给箱子多大的支撑冲量 箱子是否反弹、滑动或旋转 下一时刻箱子的速度与位姿如何变化。以下以 PhysX 的 CPU 刚体模拟为主说明。一、整体分工形状、位姿、过滤规则 │ ▼ 碰撞检测 ├─ Broad Phase找候选对 └─ Narrow Phase生成接触 │ ▼ 接触数据 │ ├──── 质量、惯性、速度 ├──── 摩擦、恢复参数 ├──── 关节和驱动 └──── 外力、重力、力矩 │ ▼ 动力学处理 ├─ 外力与运动状态准备 ├─ 约束准备 ├─ 约束求解 └─ 状态积分 │ ▼ 新的速度与位姿实际执行可能并行或交织尤其 PGS、TGS 和 CCD 配置会影响具体时序。二、碰撞检测的目的与职责1. 目的建立可靠的接触事实碰撞检测需要回答哪些形状可能接触哪些形状需要进一步处理是否需要生成接触接触位置、方向和距离是什么它主要研究的是几何关系而不是物体受到接触后如何运动。2. Broad Phase筛选潜在碰撞对目的避免对整个场景中的形状执行两两精确检测。职责根据形状边界维护空间结构查找可能重叠的形状对识别新增和消失的候选关系尽量减少进入精确检测的配对数量。输入与输出输入 形状的世界空间边界及其变化 输出 潜在碰撞对例如箱子 A 与地面可能接触 箱子 A 与远处汽车排除宽相不确定真实接触点也不计算碰撞响应。3. 过滤与交互维护决定是否需要处理这部分是碰撞流水线中的管理职责不是纯粹的几何算法。目的让几何候选关系遵守应用的碰撞规则。职责排除不允许交互的对象对区分普通接触与触发器设置是否需要接触通知维护持续交互及其生命周期。例如子弹与发射者 忽略。 箱子与地面 检测接触并产生物理响应。 角色与任务触发区 检测重叠但不产生阻挡响应。因此发生几何重叠不代表一定生成求解约束生成接触也不代表默认会向应用发送所有接触事件。4. Narrow Phase计算接触细节目的将“可能碰撞”转化为实际可用的接触或重叠信息。职责对具体几何组合执行精确检测生成接触位置和法线计算分离距离或穿透相关信息维护和更新接触流形利用历史缓存降低重复计算。输入与输出输入 两个形状的几何和位姿 接触生成参数 历史接触缓存 输出 接触点 接触法线 分离距离 接触流形及相关信息PhysX 可以在物体尚未实际穿透时生成接触因此窄相不只是判断“是否已经相交”。不属于它的职责窄相不负责根据质量决定谁被撞开计算最终摩擦冲量维持关节更新最终刚体运动。这些由动力学相关阶段完成。三、动力学求解的目的与职责“动力学求解”有两种常见用法狭义约束求解器计算接触、摩擦、关节等约束冲量广义包括外力处理、约束准备、求解和运动积分的完整动力学流程。下面按广义流程说明同时明确各部分边界。1. 外力处理计算不考虑约束时的运动趋势目的确定重力、外力和力矩如何改变刚体运动。职责处理重力与外力处理力矩处理阻尼和相关速度限制准备供求解使用的运动状态。简化的线速度表达[\mathbf{v}^{*}\mathbf{v}_{t}\left(\mathbf{g}\frac{\mathbf{F}}{m}\right)\Delta t]其中 (\mathbf{v}^{*}) 是还没有完成约束修正的候选速度。重力使箱子向下运动 ↓ 但是否会穿过地面还要由接触约束处理2. 约束准备把接触与关节转成数学限制目的将几何信息和关节规则转化为求解器能计算的数据。职责结合刚体质量与逆质量惯性与逆惯性接触点相对质心的位置线速度与角速度摩擦、恢复参数关节限位、驱动和误差修正参数构建约束。例子箱子接触地面法向约束 限制继续向地面内部运动。 摩擦约束 限制沿地面滑动。例子门轴关节约束 限制不允许的相对平移和旋转 保留绕门轴转动的自由度。接触点描述几何事实约束描述运动必须遵守的条件。3. 约束求解计算需要多大的冲量目的使刚体运动尽可能满足接触和关节约束。概念上约束冲量对速度的影响为[\Delta \mathbf{v}M{-1}JT\lambda]其中(M^{-1})广义逆质量包含平移和转动响应(J)约束雅可比(\lambda)待求的约束冲量。主要职责① 接触法向响应限制物体相互靠近到不合理穿透的程度并配合偏置项逐步修正误差。对于普通非黏附接触法向冲量通常只能推开物体不能把物体拉在一起。② 摩擦响应根据相对切向运动与摩擦参数计算限制滑动的冲量。概念上受库仑摩擦条件约束[|\lambda_t|\leq \mu\lambda_n]实际实现会根据摩擦模型进行离散和近似。③ 恢复响应根据恢复系数和速度阈值等条件处理反弹而不是让每次接触都产生弹跳。④ 关节、限位与驱动限制刚体间不允许的相对运动并尝试满足驱动目标。驱动也会受配置的力或冲量限制以及其他约束影响不一定能精确达到目标。为什么需要迭代在一堆箱子中地面对底层箱子的支撑 ↓ 影响中层箱子的运动 ↓ 影响顶层箱子的运动 ↓ 其他约束需要重新调整PhysX 的 PGS、TGS 等求解器通过迭代处理这种耦合关系。有限迭代得到的是实时预算下的近似结果并不保证零穿透、零关节误差。4. 状态积分把运动状态推进到下一时刻目的更新刚体的位置和旋转。职责根据线速度推进位置根据角速度更新姿态与求解器的状态推进、稳定化等处理配合。最简单的位置更新示意[\mathbf{x}_{t\Delta t}\mathbf{x}_{t}\mathbf{v}\Delta t]不同求解器的积分与求解可能交织不能把所有路径都理解为“求解一次最后积分一次”。四、为什么碰撞检测和动力学必须分开理解1. 有碰撞检测不一定有动力学响应例如触发区域检测接触通知但禁用接触求解的配置独立几何重叠测试。这些都可以获得交互信息而不推动刚体。2. 有动力学计算不一定有碰撞例如一个在空中下落的箱子 没有接触但仍受重力并发生运动。 两个由关节连接、彼此不碰撞的刚体 仍然需要求解关节约束。所以动力学不是碰撞之后的附属操作碰撞只是动力学约束的重要来源之一。五、用“球撞墙”完整串起来① 游戏输入 给球初始速度。 ② 外力与运动准备 考虑重力、阻尼等。 ③ Broad Phase 发现球与墙可能发生接触。 ④ 过滤 确认这对对象允许碰撞和响应。 ⑤ Narrow Phase 生成球与墙的接触法线、位置、分离距离。 ⑥ 约束准备 结合球的质量、速度及材质构建约束。 ⑦ 约束求解 计算法向冲量、摩擦冲量及必要的反弹响应。 ⑧ 状态积分 推进球的位置和旋转。 ⑨ 结果获取 应用读取新的状态并接收已配置的相关事件。这里最重要的边界是检测到墙在哪里、接触是什么 ≠ 决定球撞墙后如何运动六、职责与源码速查子系统核心职责常见源码位置Broad Phase筛选潜在碰撞对lowlevelaabb/几何与接触生成计算接触细节geomutils/底层碰撞流水线组织碰撞任务与接触数据lowlevel/场景与交互控制管理交互、活动对象和模拟组织simulationcontroller/动力学与约束求解约束准备、冲量求解、状态推进lowleveldynamics/目录职责有交叉具体实现以所使用的 PhysX 版本为准。总结对比项碰撞检测动力学求解目的建立接触事实计算运动响应主要关注几何、位姿、空间关系质量、惯性、速度、力与约束典型输出接触点、法线、分离距离冲量、修正后的速度与运动状态是否负责摩擦响应提供相关接触信息计算摩擦约束响应是否负责维持关节否是是否直接决定反弹否是一句话记忆碰撞检测提供“接触事实”约束准备建立“运动规则”动力学求解计算“响应大小”积分产生“下一时刻的状态”。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑