角色的分段刚体表示与仿真

本章定位:理解如何将角色建模为分段多刚体系统,这是物理仿真的基础。


一、刚体动力学基础

回顾 GAMES103 内容

刚体动力学的核心公式已在 GAMES103 中详细讲解,本节只做简要回顾。

刚体运动方程

$$ \begin{bmatrix} mI_3 & 0\\ 0 & I \end{bmatrix}\begin{bmatrix} \dot{v} \\ \dot{\omega } \end{bmatrix}+\begin{bmatrix} 0\\ \omega \times I\omega \end{bmatrix}=\begin{bmatrix} f \\ \tau \end{bmatrix} $$

符号含义
\(m\)质量
\(I\)转动惯量张量
\(x, v\)位置、线速度
\(R, \omega\)旋转、角速度
\(f, \tau\)外力、外力矩

深入学习


二、角色的物理仿真表示

从角色模型到仿真模型

在物理仿真中,角色不能直接使用渲染用的 Mesh,而是需要简化为分段多刚体系统

仿真角色的组成

Rigid bodies(刚体):

  • \(m_i, I_i\) - 质量和转动惯量
  • \(x_i, R_i\) - 位置和旋转
  • Geometries - 碰撞几何体(仿真中使用简单几何体代替 Mesh)

Joints(关节):

  • Position - 关节位置
  • Type - 关节类型(Hinge、Universal、Ball 等,决定约束方程)
  • Bodies - 连接的刚体

✅ 关节的数量比刚体的数量少 1

碰撞几何体的选择

身体部位常用几何体原因
头部球体形状接近、计算简单
躯干胶囊体/盒体近似 torso 形状
手臂/腿胶囊体细长形状
手/脚盒体便于接触检测

✅ 使用简单几何体可以大幅提高碰撞检测和约束求解的效率。

在物理引擎中定义角色

在物理引擎中创建一个刚体需要提供:

Masses:     m, I           // 质量和转动惯量
Kinematics: x, v, R, ω    // 运动学状态
Geometry:   Box/Sphere/Capsule/Mesh  // 碰撞几何体
            Collision detection      // 碰撞检测
            Compute m, I             // 计算质量属性

三、分段多刚体动力学

从单刚体到多刚体

单刚体: $$ M\dot{v} + C(x,v) = f $$

其中 \(M\) 和 \(C\) 是分块对角矩阵,每个刚体独立。

✅ 两个刚体如果独立,可以以矩阵的方式扩展。
✅ 分段多刚体在公式上没有本质区别,只是矩阵更大。

对于 \(n\) 个刚体的系统:

  • \(M\) 是 \(6n \times 6n\) 的分块对角矩阵
  • \(C(x,v)\) 是 \(6n\) 维向量

多刚体系统的扩展

关于约束力的说明:当刚体通过关节连接时,需要添加约束力 \(J^T\lambda\)。这部分内容在后续章节详细讲解。


与后续章节的关系

本节内容后续应用
刚体动力学基础理解单个身体的运动
角色仿真表示碰撞检测、接触求解
分段多刚体公式所有仿真章节的基础

约束求解专题(本节不涉及):


小结

角色物理仿真的建模流程

角色 Mesh → 简化为刚体 → 添加关节 → 定义碰撞几何体 → 分段多刚体系统

核心公式(无约束情况): $$ M\dot{v} + C(x,v) = f $$

含义
\(M\dot{v} + C(x,v)\)惯性力(质量 + 科氏力/离心力)
\(f\)外力(重力、风力、关节力矩)

✅ 本节只介绍分段多刚体的表示方法。当刚体通过关节连接时,需要添加约束力 \(J^T\lambda\),详见后续章节。


本文出自 CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES105_mdbook/