理解 PhysX,关键不是记住多少个 API,而是弄清楚三个问题:
- 游戏对象如何被转换成物理世界中的数据?
- 一次
simulate()如何完成碰撞检测、约束求解和状态更新? - 引擎如何在实时性能、数值稳定性和可扩展性之间取舍?
下面以PhysX 4.x/5.x 的 CPU 刚体流水线为主线展开。不同版本、分支和编译配置的目录与内部调用关系会变化,因此文中的内部流程图是架构级概括,不应当作某个版本的逐行调用栈。GPU 刚体单独讨论。
一、PhysX 在游戏引擎里处于什么位置?
PhysX 是一个物理中间件,不是完整的游戏引擎。它负责物理对象的模拟与查询,但通常不负责:
- 游戏对象和 ECS 的完整生命周期;
- 渲染插值;
- 动画与物理之间的控制权切换;
- 联机预测、回滚与状态同步;
- 世界分块、资源流送及原点漂移的业务策略。
典型集成关系如下:
游戏逻辑 / ECS / 动画 / 网络 │ ▼ 引擎物理适配层 ├─ 生命周期管理 ├─ Transform 同步 ├─ 碰撞层与过滤规则 ├─ 事