Version: 6000.3
语言: 中文
基于扫描的CCD
关节

推测性CCD

投机碰撞当物理引擎检测到两个游戏对象的碰撞器接触或重叠时,当至少一个游戏对象具有刚体组件并且处于运动状态时,就会发生碰撞。更多信息
请参阅术语表
detection是连续推测模式的CCD算法。

投机碰撞检测Unity 执行的自动过程,用于确定具有刚体和碰撞器组件的移动游戏对象是否与任何其他碰撞器接触。更多信息
请参阅术语表
基于扫描的碰撞检测对计算要求更低。它也适用于由于线性运动(例如,球沿直线移动)和旋转运动(例如,弹球脚蹼在其枢轴上旋转时与球碰撞)而发生的碰撞。

然而,连续推测也可能不太准确;除了错过的碰撞外,还可能发生“错误碰撞”,即算法错误地预测碰撞并强制碰撞体 用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格体形状完全相同 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
请参阅术语表
偏离了路线。

了解推测性 CCD

推测 CCD 的工作原理是根据物体的线性和角运动增加物体的宽相轴对齐最小边界框 (AABB)。该算法是推测性的,因为它在下一个物理步骤中选择所有潜在的接触并将它们输入求解器,从而确保满足所有接触约束,以便刚体允许游戏对象受到模拟重力和其他力影响的组件。更多信息
请参阅术语表
不会穿过任何碰撞。

如果从 t0 移动的球体的路径中没有墙壁,则其预期位置为 t1。通过用其目标姿势充气 AABB,推测算法检测与 n1 和 n2 法线的两个接触。然后,该算法指示求解器尊重这些接触,以便球体不会穿过墙壁。
如果从 t0 移动的球体的路径中没有墙壁,则其预期位置为 t1。通过用其目标姿势充气 AABB,推测算法检测与 n1n2 法线的两个接触。然后,该算法指示求解器尊重这些接触,以便球体不会穿过墙壁。

基于当前速度的膨胀 AABB 有助于检测沿移动轨迹的所有潜在接触,从而使求解器能够防止错过碰撞(“隧道”)。

推测 CCD 通常比基于扫描的 CCD 占用更少的资源,因为它仅在碰撞检测阶段进行计算,而不是在求解和积分阶段进行计算。此外,推测 CCD 可以找到基于扫描的 CCD 可能遗漏的触点,因为推测 CCD 会根据物体的线性和角运动扩展宽相 AABB。

然而,推测 CCD 可能会导致错误碰撞(或“幽灵碰撞”),即物体的运动在不应该受到推测接触点的影响。这是因为推测 CCD 根据最近点算法收集所有潜在接触,因此接触法线不太准确。这通常会使高速对象沿着细分碰撞特征滑动并向上跳跃,即使它们不应该。例如,在下图中,球体从 t0 开始,向右水平移动,积分后预测位置为 t1。充气的 AABB 与方框 b0b1 重叠,CCD 在 c0c1 处产生两个推测触点。由于推测 CCD 使用最近点算法生成接触,因此 c0 具有非常倾斜的法线,求解器假定该法线是斜坡。

求解器假定 c0 处的接触点是斜坡,因为最近点算法生成了不准确的接触法线。
求解器假定 c0 处的接触点是斜坡,因为最近点算法生成了不准确的接触法线。

这种倾斜的法线导致 t1 在积分后向上跳跃,而不是直接向前移动:

在 c0 处生成的错误碰撞会导致球体错误地向上跳跃,而不是直接向前移动。
在 c0 处生成的错误碰撞会导致球体错误地向上跳跃,而不是直接向前移动。

推测 CCD 也可能导致错过碰撞,因为推测接触仅在碰撞检测阶段计算。在接触求解过程中,如果物体从求解器中获得过多能量,则在积分后,它最终可能会超出初始膨胀的 AABB。如果 AABB 外部发生碰撞,则对象会直接穿过隧道。

例如,在下图中,球体从 t0 向左移动,而摇杆顺时针旋转。如果球体从撞击中获得过多的能量,它最终可能会在 t1 处离开膨胀的 AABB(红色虚线矩形)。如果 AABB 外面有碰撞,如下面的蓝色框所示,球体最终可能会错过碰撞并直接穿过它。这是因为求解器仅计算膨胀的 AABB 内部的接触,并且在求解和积分阶段不执行碰撞检测。

使用推测 CCD 的 AABB 膨胀球体,该 CCD 仅在碰撞检测阶段计算接触,因此可能会发生错过碰撞。
使用推测 CCD 的 AABB 膨胀球体,该 CCD 仅在碰撞检测阶段计算接触,因此可能会发生错过碰撞。
基于扫描的CCD
关节