文章目录
- 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∣2vr |
加速度 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∣2ar |
质心 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
滑行 |
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: R软件包ConsensusCluster进行共识聚类(Consensus Clustering)
从下面论文看到这个方法: Wang, Xin, et al. “Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironm…