刚体动力学概述
一直以来,游戏物理引擎通常只关注物理学中的力学(mechanics)中的经典刚体动力学(classical rigid-body dynamics)。
Ye:动力学对应的静力学(statics)。游戏引擎中很少会应用静力学。
- 刚体(RigidBody):
刚体是完美的固体,不会变形。这种假设能良好配合碰撞检测系统,刚性能大幅简化模拟固体动力学所需的数学。
- 经典力学:
物体服从牛顿运动定理。物体足够大,不会产生量子效应。物体速度足够低,不会产生相对论效应。
1.约束:
物理引擎能确保游戏世界的刚体运动符合多个约束(constraint),最常见的约束是非穿透性(non-penetration),当发现物体穿透时,物理系统要尝试提供碰撞响应(collision response),这是物理引擎与碰撞系统紧密关联的主因之一。
多数物理系统也容许开发者设置其他约束,以定义刚体之间的真实互动。这些约束包括铰链、滑块、球关节、弹簧等。
2.物理系统和碰撞系统:
物理系统通常会共享碰撞世界的数据结构,而且事实上物理引擎通常会驱动碰撞检测算法的执行作为物理step更新的一个环节。动力学模拟的刚体和碰撞引擎的碰撞体通常是一对一映射关系。
这些刚体和对应碰撞体通常用一个单例数据结构管理,称为碰撞/物理世界或者物理世界。
Ye:物理引擎通常可以创建多个互不相干的物理世界,并不是严格意义上的单例。
Havok中,
hkpRigidBody
引用至唯一一个hkpCollidable
,虽然也可以创建无对应刚体的碰撞体。
PhysX中这两个概念紧密整合成一个NxActor
,同时用作碰撞体和刚体。
3.变换同步到游戏对象:
物理引擎中的刚体通常独立于游戏性虚拟世界中的对象,游戏对象的变换可以由物理引擎驱动。
要达到此目的,我们每帧向物理引擎查询刚体的变换,然后把该变换以某种方式施于对应的游戏对象变换。(游戏对象的动作也可以由其他引擎系统例如动画系统或者角色控制系统所决定)
简单的游戏对象例如石头、武器等可以对应至单个刚体。含关节的角色或者复杂机器可能由多个互相连接的刚体构成。
(END)