碰撞检测与动力学求解的深层分工
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 版本为准。总结对比项碰撞检测动力学求解目的建立接触事实计算运动响应主要关注几何、位姿、空间关系质量、惯性、速度、力与约束典型输出接触点、法线、分离距离冲量、修正后的速度与运动状态是否负责摩擦响应提供相关接触信息计算摩擦约束响应是否负责维持关节否是是否直接决定反弹否是一句话记忆碰撞检测提供“接触事实”约束准备建立“运动规则”动力学求解计算“响应大小”积分产生“下一时刻的状态”。

相关新闻

pytorch-metric-learning Miners 完整指南:在线样本挖掘的原理、配置与自定义实现

pytorch-metric-learning Miners 完整指南:在线样本挖掘的原理、配置与自定义实现

人工智能机器学习深度学习计算机视觉 【免费下载链接】pytorch-metric-learning The easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch. 项目地址: https://gitcode.com/gh_mirrors/py/pytorc…

2026/10/11 18:42:34 阅读更多 →
Claude Code加装Superpowers:核心Skills与实战组合

Claude Code加装Superpowers:核心Skills与实战组合

开头直接进入情景。这个“superpowers”不是超能力,而是GitHub上那个名为superpowers的Claude Code skills集合。很多朋友在热词里搜“superpowers 具体使用”“有那些skills”“怎么引入这些技能”“想要安装superpowers”,其实就是想搞清楚这套技能框架…

2026/10/12 19:45:00 阅读更多 →
代码审查总变吵架现场?这套沟通话术让同事心甘情愿改Bug

代码审查总变吵架现场?这套沟通话术让同事心甘情愿改Bug

1. 为什么代码审查总变成“吵架现场”——先把问题定性干过几年开发的人都懂,代码审查这事,技术难度从来不是最大的坎,最大的坎是“人”。我见过太多团队,明明都是为项目好,一开审查会就剑拔弩张,最后不是讨…

2026/10/12 15:14:16 阅读更多 →

最新新闻

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

平时做运维的朋友肯定都有过这种经历:公司内部新起了一套系统,IP地址越来越多,今天要连这个、明天要连那个,总不能天天翻Excel表格。更尴尬的是,内网服务想用一个好记的域名访问,结果发现公共DNS根本不认识…

2026/10/15 7:37:59 阅读更多 →
ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

做Java开发的朋友,多少都被ConcurrentHashMap“教育”过。面试要问,源码分析要讲,线上排查高并发问题也绕不开它。而只要一聊到源码,1.7和1.8这两个版本的区别就是永远躲不开的坎:一个是Segment分段锁,一个…

2026/10/15 7:37:59 阅读更多 →
WinForm文本编辑器源码解析与高级功能扩展实战指南

WinForm文本编辑器源码解析与高级功能扩展实战指南

简介:这份C#文本/代码编辑器专题文档,面向具备一定C#基础、想从零构建或二次开发编辑器的研发人员,解决从界面搭建、文件操作到功能扩展各环节的关键问题。文档先讲解基于WinForm与RichTextBox的基础实现,包括字体加粗/斜体/下划线…

2026/10/15 7:37:59 阅读更多 →
微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

从技术视角看,在微信生态里"创建一个投票活动",本质是配置一套活动数据结构 报名审核状态机 防刷策略 数据导出能力。本文以「活动评选」场景为例,梳理从创建到发布的完整流程,并以投票帮小程序作为落地实践案例。 …

2026/10/15 7:37:59 阅读更多 →
T型三电平逆变器VSG自适应控制与并离网切换优化

T型三电平逆变器VSG自适应控制与并离网切换优化

1. 项目背景与核心价值电力电子变换器在新能源发电系统中扮演着关键角色,而T型三电平逆变器因其高效率、低损耗的特性,在中大功率场合得到广泛应用。传统逆变器控制策略在并离网切换过程中常面临暂态冲击大、同步性能差等问题,这正是虚拟同步…

2026/10/15 7:37:59 阅读更多 →
软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

说真的,看到“REA三天狂揽12万星”那条标题的时候,我第一反应是:这又是标题党?一个Agent,不用源码就能克隆一切软件,听起来太像营销号编出来的故事。但等我顺着链接把演示看完,又拿自己手头一个…

2026/10/15 7:36:59 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →