PhysX 仿真调度解析:任务依赖图、simulate 与 fetchResults 机制
引言:读懂任务模型才能定位物理瓶颈上千刚体场景帧率腰斩,Profiler 显示 PhysX 占 60% CPU——想定位慢在哪个阶段,必须理解 simulate 内部的任务调度结构。更实际的问题是 fetchResults 调用位置错误会导致物理状态撕裂与回调丢失。PhysX 的仿真调度是一套任务依赖图模型,理解它既是调优前提,也值得借鉴到自研系统的并行设计中。一、四阶段流水线与任务依赖图1.1 阶段划分PhysX 把一次仿真拆为四个阶段:BroadPhase:AABB 粗筛候选对(SAP、MBP 等实现);NarrowPhase:精确几何测试,生成接触点;ConstraintSolver:迭代求解接触与关节约束;Integration:速度积分写回位置与姿态。1.2 任务依赖模型每个阶段拆分为多个 PxTask 节点,节点间以引用计数建立依赖,由 TaskManager 调度到 CpuDispatcher 的线程池:// 任务依赖图构建(示意) PxTask* broadPhase = createBroadPhaseTasks(context); PxTask* narrowPhase = createNarrowPhaseTasks(context); narrowPhase-addReference(broadP