Featured image of post Games104:物理引擎的基础理论

Games104:物理引擎的基础理论

主要讲了欧拉积分、碰撞检测方法、碰撞结算方法 物理世界的对象:

  1. Static
  2. Dynamic
  3. Trigger(参与GamePlay但是与物理世界无关)
  4. Kinematic(动力学Actor)

截屏2025-11-04 11.09.08

Actor Shapes

截屏2025-11-04 11.11.53

截屏2025-11-04 11.15.42

欧拉积分

黎曼积分定义为:

$$ \int_a^b f(t) \, dt = \lim_{n\to\infty} \sum_{i=0}^{n-1} f(t_i^*) \, \Delta t $$

其中:

  • 区间 $[a,b]$ 被划分为很多小区间;
  • 每个小区间长度为 $\Delta t = \frac{b-a}{n}$;
  • $f(t_i^*)$ 是函数在区间上的一个采样值;
  • 积分就是“采样 × 宽度”的极限

显式欧拉法 = 左端点采样(Left Riemann Sum) 隐式欧拉法 = 右端点采样(Right Riemann Sum)

显式欧拉积分

用当前状态的参数来近似 $\Delta T$ ,比如$t_0时速度为5,那就假设$$\Delta T$内都是5来模拟积分。 显式欧拉法 = 用左端点采样的黎曼积分近似。

截屏2025-11-04 11.29.09

这样求积分的问题是:力不守恒,用因为时间段内力不是恒定的。 如下图所示,如果总是以某一点的力的方向来求解,那物体总是朝着切线方向位移,来不及改变力的方向(因为在$\Delta T$时间内力是恒定的)

截屏2025-11-04 11.30.18

截屏2025-11-04 11.42.33

隐式欧拉方法

用未来的状态来计算$\Delta T$时间内的数据 。隐式欧拉法 = 用右侧端点采样的黎曼积分近似。

截屏2025-11-04 11.43.00

显然能量衰减了,我在$\Delta T$时间内又不是一直这么小

截屏2025-11-04 11.44.31

半隐式欧拉法

有点像Hack…..

截屏2025-11-04 11.48.52

这种方法数学上很稳定 $\Delta T$取0.05就能很好模拟圆周运动了

截屏2025-11-04 11.49.32

截屏2025-11-04 11.49.23

刚体运动学

这块课程很杂,应该需要用到什么学什么,这里先听课

截屏2025-11-04 11.57.07

碰撞检测

一般分两步:

  1. AABB检测
  2. 计算碰撞点

截屏2025-11-04 12.06.19

Broad Phase

BVH检测

截屏2025-11-04 12.09.12

排序检测

截屏2025-11-04 12.09.19

Narrow Phase

用球的半径来检测

截屏2025-11-04 12.12.58

截屏2025-11-04 12.13.36

闵可夫斯基和(Minkowski Sum)

两个点集内全部互相加

截屏2025-11-04 12.16.07

红色三角形表示Minkowski Sum的结果

截屏2025-11-04 12.17.12

截屏2025-11-04 12.18.34

再定义减法

截屏2025-11-04 12.20.18

最妙的来了,如果红色图像包了原点,那就碰撞了

截屏2025-11-04 12.20.35

如何判断这个多边形过原点呢?

截屏2025-11-04 12.22.52

分离轴原理(SAT)

截屏2025-11-04 12.24.33

截屏2025-11-04 12.26.21

碰撞处理

处理碰撞后分离

截屏2025-11-04 12.28.30

Hack

截屏2025-11-04 12.29.01

约束求解

需要再看

截屏2025-11-04 12.31.35

截屏2025-11-04 12.32.14

Scene Query

查询碰撞点、查询Sweep、查询Overlap

raycast查询碰撞点:比如子弹

截屏2025-11-04 12.37.50

Sweep

截屏2025-11-04 12.38.00

Overlap:比如爆炸范围overlap了那些Actor

截屏2025-11-04 12.38.45

优化

模拟优化

截屏2025-11-04 12.41.05

CCD:连续碰撞检测,离散检测可能会穿过薄面

截屏2025-11-04 12.42.22

确定性模拟:不同的机器计算结果应该一致,比如显卡、移动端等差别

截屏2025-11-04 12.45.00

📚 文章数: 72 ✍️ 总字数: 245.55K