首页 GAMES104-Lecture 10 游戏引擎中物理系统的基础理论和算法
文章
取消

GAMES104-Lecture 10 游戏引擎中物理系统的基础理论和算法

Physics Actors and Shapes

Actor

  • static actor

  • dynamic actor

  • Trigger:触发器

  • Kinematic(No Physics Law) Actor:根据游戏需要进行运动

Actor Shapes

pFlTkxe.jpg

  • Soheres

  • Capsules:用于角色

  • Boxes

  • Convex Meshes:凸包多面体

  • Triangle Mesh:静态物体,动态的话开销会很大

  • Height Fields:用于地形

  • 使用上面这些shapes将object包起来

  • Shape Properties:

    • Mass、Density

    • Center of Mass质心

    • Friction & Restitution摩擦力、弹力

Forces

  • Gravity、Drag、Friction

  • Impulse冲量(爆炸explosion center -> explosion impulse)

Movements

  • 牛顿第一第二定律

  • Movement under Varying Force

    • Time Integration

    • Explicit(Forward) Euler’s Method:显示欧拉积分,用当前的力算下一时刻的速度,用这一时刻的速度来计算下一个时刻的位置,问题就是积分过程是不收敛的,能量不守恒

    pFlTEKH.jpg

    • Implicit(Backward)Euler’s Method:隐式欧拉法,用下一个时刻的力算出下一时刻的速度来计算下一个时刻的位置,但是能量会衰减。这是稳定的,并不会爆炸

    pFlT956.jpg

    • Semi-implicit Euler‘s Method:半隐式欧拉法,用当前时刻的力计算下一时刻的速度,用下一时刻的速度计算下一时刻的位置,此时是假设这一时刻的力没有变化,稳定性高,计算效率高,但是在做简谐运动的时候,使用半隐式计算出来的周期会比ground truth的略长。目前这个方法是性价比最高的

    pFlTF2D.jpg

Rigid Body Dynamics

pFlTpUx.jpg

  • Particle Dynamics:质点动力学

  • Rigid Body Dynamics:刚体动力学

  • Rotational Inertia:转动惯量

pFlTi8O.jpg

  • Angular Momentum角动量,角动量守恒

  • Torque力矩

  • 台球案例

pFlTPPK.jpg

Collision Detection

Two Phases

Broad Phase初筛

  • 用AABB计算碰撞的可能性

  • BVH:当环境中的物体发生变化时,更新的成本非常低

  • Sort and Sweep:把每一个物体的bounding的每个轴的min和max排序,当至少两个轴产生交错的时候,就发现可能有交集;因为大量物体是不动的,所以只对局部会动的物体进行排序

pF1Fme1.jpg

Narrow Phase精细地判断

  • 判断是否重叠

  • 生成碰撞信息:估计橡胶的顶点、相交处的法线、相交的深度

  • Narrow Phase方案:

  • Basic Shape Intersection Test

    • 球球相交,计算距离和两个球的半径和

    • 胶囊和球相交、胶囊相交

pF1FZLR.jpg

  • Minkowski Difference-based Methods

    • 点集A+点集B会构造一个新的点集C

    • 比如一个三角形点集B加了一个点A,得到新的点集就相当于三角形B加了一个位移

    • 一个三角形点集B加了一条线点集A,得到新的点集相当于三角形B位移后相对于线进行了一个拖拽而形成了一个凸包

    pF1FVy9.jpg

    • 一个三角形点集B加了一个三角形点集A,得到新的点集相当于三角形B位移后相对于三角形A进行了一个拖拽而形成了一个凸包

    pF1FPiT.jpg

    • 点A减去三角形点集B,相当于A+(-B)

    • 如果两个三角形点集有交点的话,那么他们相减得到的凸包点集一定会过原点,反之亦然

    pF1Fkz4.jpg

  • GJK Algorithm-Walkthrough

    • 将两个凸包求交问题转换为一个凸包是否过原点问题

    • 从A、B中选一个相反的方向,相减能得到凸包的一个顶点C

    • 从顶点连接原点,从这个方向再从AB找两个顶点,获得凸包上一个点D

    • 然后从CD垂直方向继续重复上面的方法,直到得到最后一个三角形CEF,若还没有找到原点,就说明不相交

pF1FEQJ.jpg

  • Separating Axis Theorem(SAT)-Convexity

    • 分离轴定律

    • 判断两个凸多面体是否相交,如果两个没有相交,一定可以找到一个轴,使得两个凸多面体的投影被轴分开

    pF1FiJU.jpg

  • 所有的边都要找一遍

  • 在三维case下,不仅要每个面检测,还要检测每一条边

Collision Resolution

  • 在一些碰撞检测后,如何将碰撞的物体分开,是需要解决的问题

  • Applying Panalty Force:给物体添加力

  • constraints:约束,当发生碰撞时,给小冲量,然后使用拉格朗日约束进行迭代,迭代冲量

pF1FFWF.jpg

Scene Query

Ray Cast

  • Mutiple hits:一条射线出去,返回所有穿过的排序好的object

  • Closest hit:最近的

  • Any hit:返回所有穿过的不用排序的object

Sweep

  • 一个体横扫过去

pF8ULLQ.jpg

Overlap

  • 给一个shape,问在世界中有没有物体跟这个形状发生了碰撞

Efficiency, Accuracy, and Determinism

Simulation Optimization

  • island:将世界分成一个个的island
  • sleep:如果一个地方的物体长时间不会动,那么在外力作用前会使其sleep

Continuous Collidion Detection(CCD)

pF8UXZj.jpg

  • 连续碰撞检测

  • 解决穿墙问题,物体速度太快,墙体太薄导致穿墙

    • 把墙做厚一点

    • CCD方法:做一个保守估计,即物体和环境碰撞的一个安全距离是多少,在安全距离外可以任意移动,在安全距离内就会把substep调密,做更精细的检测

Deterministic Simulation

  • 确定性模拟

  • 也就是说对物理的模拟,相同的操作结果相同(为了使得联网游戏中每个玩家看到的世界相同)

requirement

  • 希望不同的终端,物理模拟的步长是一致的(如每秒是60帧)

  • 确定性的模拟顺序

  • 浮点数的稳定性

本文由作者按照 CC BY 4.0 进行授权