物理查询(碰撞检测)主要是场景进行相关的碰撞检测,返回查询结果,通过PhysX的接口raycast,sweep与overlap实现。
物理模拟相当于把物体的移动托管给物理系统,不需要任何的接口调用,通过PxScene::simulate对场景进行模拟。
在物理引擎中,物理查询与物理模拟是两套完全独立的体系。
UE4中的物理查询
物理查询即提供给应用程序一套接口,可以得到当前查询图元与场景的交互关系。游戏中与物理相关的交互绝大部分可由物理查询完成,如实体类子弹、射线类子弹的命中检测,角色移动与阻挡等等。
UE4中常用的物理查询主要有三种:
1.Raycasts,零大小的射线检测,即有向线段;
2.Sweeps,非零大小的检测,即扫掠体;
3.Overlaps,即空间相交检测。
物理查询流程一般为:输入查询请求(查询起点、查询终点、查询类型)→遍历场景空间结构划分(AABBTree)→粗略的找到一组可能的碰撞体→Pre-filtering(如频道剔除)→结构内部剔除(对复杂碰撞体时损耗很高)→Post-filtering(某些结果是否被丢弃)→返回查询结果(是否查到交互Shape,位置以及法线信息)。
PhyX提供的掩码机制,通过设置Shape上的掩码结构和传入的物理查询参数,完成特定的检测结果控制。UE4中的频道概念就是基于此来设计的。在UE4中可以设置物体的碰撞相关信息,如下图所示: