文章目录
- 0 入门资料
- 1 物理引擎
- 基本概念
- Actor & shapes
- Rigid body dynamics
- Collision Detection
- Collision Resolution
- 应用与实践
- Character controller
- Ragdoll
0 入门资料
- GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibili
- GAMES104官方账号 - 知乎
- 课程主页
- 课程小引擎Piccolo
- 课件:
- GAMES104_Lecture10_Physics System_Basic Concepts.pdf
- GAMES104_Lecture11_Physics System_Applications.pdf
1 物理引擎
- 物理引擎的用途:
- 碰撞检测
- 解决碰撞、其它约束限制
- 更新所有物体的世界坐标(world Transform)
基本概念
Actor & shapes
Actor
- 静态 static actor:不会移动,阻碍你
- 动态 dynamics actor:符合动力学原理,可以被 forces、torque、impulse影响
- 触发器 trigger
- kinematic actor:可以违背物理学,让它按照设计的运动
Actor Shapes
- 求交点
Shapes | 图例 | 备注 |
---|---|---|
Spheres 球体 | ||
Capsules 胶囊体 | - 人体 | |
Boxes 盒子 | ||
Triangle Meshes 三角 | - 必须是密闭的 - Dynamic actors 不能使用 | |
Height Fields | - 用于地形 |
Shape 的属性
- 质量/密度 Mass and Density
- 质心 Center of Mass
- 摩擦力/弹性 Friction & Restitution :受到物理材质的影响
- 力 Forces:常见的力包括拉力、重力、摩擦力
- 冲力/冲量 impulse:例如爆炸
- 移动 movement
半隐式欧拉积分
- 【优点】
- 容易模拟
- 较稳定
- 【缺点】
- 实际消耗时间比真实时间要久一点
Rigid body dynamics
粒子动力学 Particle Dynamics | 刚体动力学 Rigid body Dynamics |
---|---|
位置 Position x ⃗ \vec{x} x | 旋转 Orientation R \boldsymbol{R} R |
线速度 Linear Velocity v ⃗ = d x ⃗ d t \vec{v}=\frac{\mathrm{d} \vec{x}}{\mathrm{~d} t} v= dtdx | 角速度 Angular velocity ω ⃗ = v ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\omega}=\frac{\vec{v} \times \vec{r}}{|\vec{r}|^2} ω=∣r∣2v×r |
加速度 Acceleration a ⃗ = d v ⃗ d t = d 2 x ⃗ d t 2 \vec{a}=\frac{\mathrm{d} \vec{v}}{\mathrm{~d} t}=\frac{d^2 \vec{x}}{d t^2} a= dtdv=dt2d2x | 角加速度 Angular acceleration α ⃗ = d ω ⃗ d t = a ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\alpha}=\frac{\mathrm{d} \vec{\omega}}{\mathrm{d} t}=\frac{\vec{a} \times \vec{r}}{|\vec{r}|^2} α=dtdω=∣r∣2a×r |
质心 Mass M = ∑ m i M=\sum m_i M=∑mi | 转动惯量 Inertia tensor I = R ⋅ I 0 ⋅ R T \mathbf{I}=\mathbf{R} \cdot \mathbf{I}_{\mathbf{0}} \cdot \mathbf{R}^{\mathrm{T}} I=R⋅I0⋅RT |
动量 Momentum p ⃗ = M v ⃗ \vec{p}=M \vec{v} p=Mv | 角动量 Angular momentum L ⃗ = I ω ⃗ \vec{L}=\mathbf{I} \vec{\omega} L=Iω |
力 Force F ⃗ = d p ⃗ d t = m a ⃗ \vec{F}=\frac{d \vec{p}}{d t}=m \vec{a} F=dtdp=ma | 力矩 Torque τ ⃗ = d L ⃗ d t \vec{\tau}=\frac{d \vec{L}}{d t} τ=dtdL |
Collision Detection
- 碰撞检测:东西是否撞上了
碰撞检测的两个阶段 | 方法 | |
---|---|---|
粗筛 | 1. 直接用AABB找到相交的刚体 2. 找到潜在的重叠刚体对 | 1. BVH Tree 2. Sort and Sweep |
细筛 | 1. 进一步检测重叠 2. 得到相交信息 1. 相交点 2. 相交法线 3. 穿透深度 | 1. Basic Shape Intersection Test 2. MinkowskiDifference-based Methods 3. Separating Axis Theorem |
- Basic Shape Intersection Test
圆与圆碰撞 | 圆与胶囊体碰撞 | 胶囊体与胶囊体碰撞 |
---|---|---|
- MinkowskiDifference-based Methods
碰撞 | 未碰撞 |
---|---|
- Separating Axis Theorem(SAT)
- 一定能找到一根轴,分离两个凸包
碰撞 | 不碰撞 | |
---|---|---|
2D 情况 | ||
3D 情况 |
- 连续碰撞检测 Continuous Collision Detection(CCD)
Collision Resolution
- 如何处理碰撞?分离
方法 | 具体方法 | |
---|---|---|
加入Penalty Force分离 | 加一个反向的惩罚力 | |
转为约束问题 | 解决速度约束 | 不断尝试给一个冲量 |
解决位置约束 | 见 ragdoll - joint constraints |
应用与实践
Character controller
- 反物理的系统:摩擦力无穷大
- 用 Kinematic Actor
- 不受物理规则影响
- 推动别的物体
- 形状
- 双层胶囊
- Sweep test
- 与物体碰撞后,往旁边平移
- Stepping 爬楼梯
- 尝试往上提,再往前走
Ragdoll
- 人体的 joint 约束(joint constraints)
Hinge 铰链 | Ball-and-socket 球窝 | Pivot 枢轴 | Saddle 鞍状 | Condyloid 髁状突 | Gliding 滑行 |