保定網(wǎng)站開發(fā)公司學(xué)做網(wǎng)站培訓(xùn)班要多少錢
文章目錄
- 0 入門資料
- 1 物理引擎
- 基本概念
- Actor & shapes
- Rigid body dynamics
- Collision Detection
- Collision Resolution
- 應(yīng)用與實踐
- Character controller
- Ragdoll
0 入門資料
- GAMES104-現(xiàn)代游戲引擎:從入門到實踐_課程視頻_bilibili
- GAMES104官方賬號 - 知乎
- 課程主頁
- 課程小引擎Piccolo
- 課件:
- GAMES104_Lecture10_Physics System_Basic Concepts.pdf
- GAMES104_Lecture11_Physics System_Applications.pdf
1 物理引擎
- 物理引擎的用途:
- 碰撞檢測
- 解決碰撞、其它約束限制
- 更新所有物體的世界坐標(biāo)(world Transform)
基本概念
Actor & shapes
Actor
- 靜態(tài) static actor:不會移動,阻礙你
- 動態(tài) dynamics actor:符合動力學(xué)原理,可以被 forces、torque、impulse影響
- 觸發(fā)器 trigger
- kinematic actor:可以違背物理學(xué),讓它按照設(shè)計的運動
Actor Shapes
- 求交點
Shapes | 圖例 | 備注 |
---|---|---|
Spheres 球體 | ![]() | |
Capsules 膠囊體 | ![]() | - 人體 |
Boxes 盒子 | ![]() | |
Triangle Meshes 三角 | ![]() | - 必須是密閉的 - Dynamic actors 不能使用 |
Height Fields | ![]() | - 用于地形 |
Shape 的屬性
- 質(zhì)量/密度 Mass and Density
- 質(zhì)心 Center of Mass
- 摩擦力/彈性 Friction & Restitution :受到物理材質(zhì)的影響
- 力 Forces:常見的力包括拉力、重力、摩擦力
- 沖力/沖量 impulse:例如爆炸
- 移動 movement
半隱式歐拉積分
- 【優(yōu)點】
- 容易模擬
- 較穩(wěn)定
- 【缺點】
- 實際消耗時間比真實時間要久一點
Rigid body dynamics
粒子動力學(xué) Particle Dynamics | 剛體動力學(xué) Rigid body Dynamics |
---|---|
位置 Position x ? \vec{x} x | 旋轉(zhuǎn) Orientation R \boldsymbol{R} R |
線速度 Linear Velocity v ? = d x ? d t \vec{v}=\frac{\mathrmvxwlu0yf4 \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{\mathrmvxwlu0yf4 \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{\mathrmvxwlu0yf4 \vec{\omega}}{\mathrmvxwlu0yf4 t}=\frac{\vec{a} \times \vec{r}}{|\vec{r}|^2} α=dtdω?=∣r∣2a×r? |
質(zhì)心 Mass M = ∑ m i M=\sum m_i M=∑mi? | 轉(zhuǎn)動慣量 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 情況 | ![]() | ![]() |
- 連續(xù)碰撞檢測 Continuous Collision Detection(CCD)
Collision Resolution
- 如何處理碰撞?分離
方法 | 具體方法 | |
---|---|---|
加入Penalty Force分離 | 加一個反向的懲罰力![]() | |
轉(zhuǎn)為約束問題 | 解決速度約束 | 不斷嘗試給一個沖量![]() |
解決位置約束 | 見 ragdoll - joint constraints |
應(yīng)用與實踐
Character controller
- 反物理的系統(tǒng):摩擦力無窮大
- 用 Kinematic Actor
- 不受物理規(guī)則影響
- 推動別的物體
- 形狀
- 雙層膠囊
- Sweep test
- 與物體碰撞后,往旁邊平移
- Stepping 爬樓梯
- 嘗試往上提,再往前走
Ragdoll
- 人體的 joint 約束(joint constraints)
Hinge 鉸鏈 | Ball-and-socket 球窩 | Pivot 樞軸 | Saddle 鞍狀 | Condyloid 髁狀突 | Gliding 滑行 |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |