实体
实体可以视为对象的物理近似。它们描述对象的行为并表示一组物理参数,例如质量,速度等。它是使对象与其他对象和外部物理力相互作用的主体。每种类型的主体都用于模拟特定类型的对象:
- 刚体(还需要分配 shape )—能够根据刚体动力学模拟对象。
- 布娃娃身体(还需要为每个骨骼分配一个 shape )—为骨骼动画角色提供死亡序列的程序动画。
- 骨折体-可以实时模拟可破坏物体。
- 绳索主体-可以对各种类型的绳索和钢丝进行物理模拟。
- 布体-可以对各种类型的布料进行物理模拟。
- 水体-可以对不同密度和粘性行为的液体进行物理模拟,包括浮力效应和波浪动力学。
为了快速查看所有类型的物体,请观看我们的 物理视频教程的一部分。
刚体动力学#
大多数物理学模拟都是基于刚体动力学的。刚体是固体的理想表示,它占据有限的空间。该空间量由 shape 或分配给主体的一组形状确定。刚性物体不能变形,即,不管该物体发生什么,其几何形状都不会改变。刚体动力学应用于指定了形状的以下刚体:
在启用后,所有这些近似于对象体积的实体及其形状都具有遵循牛顿力学的刚性对象的共同属性。
观看我们的物理视频教程片段,以获取本文的插图。
基本概念#
刚体在任何时刻的状态都由其在空间中的位置,方向(相对于某些参考点-质心 )和速度。身体运动有两种类型,因此有两个速度分量:
- 线性运动。如果我们想象身体的方向是固定的,那么身体只能经受的运动就是平移运动-线性位置的变化。此更改以线速度执行。
- 角运动。 另一方面,如果我们在空间中冻结人体的质心,则人体唯一能执行的运动就是旋转,这由角速度描述。
随着身体的移动,其线性和角动量发生变化。 线性动量可以认为是身体继续沿直线运动的程度。它是质量与身体线速度的乘积:
p = m * v
除非受到外力或冲动,否则身体将永远运动。 力等于身体质量乘以加速度:
F = m * a
通过使身体经历0度旋转(即随时间改变速度),力可以间接控制其速度和位置。
脉冲是力随时间的积分。可以将其视为施加了合力的物体的动量变化。例如,当两个物体碰撞时,当牛顿第三定律适用时,它们交换相等且相反的脉冲,并导致分开。
与线性动量类似,角动量是“旋转运动量”的量度,可以认为是人体将继续围绕对称轴旋转的程度。它表示为身体 惯性张量 与角速度的乘积。
旋转持续到扭矩(旋转力)施加到该物体上。扭矩是半径矢量(从质心到施加扭矩的点的矢量)和力矢量(力的大小)的叉积。宽松地说,它的作用就像影响转速的杠杆一样。
力和冲动也可以施加到身体的任意点,并且当该点不是质心时,还可能导致身体旋转。在这种情况下,将力计算为力矢量和半径矢量(从质心到必要点)的叉积,并将其添加到扭矩中。相反,未施加到质心的扭矩会增加力。
总结起来,该运动的特征在于以下基本参数:
直线运动 | 角运动 |
---|---|
Mass (scalar) | Inertia tensor (mat3) |
Linear velocity (vec3) | Angular velocity (vec3) |
Force(vec3)
Impulse ( vec3) |
Torque (vec3) |
确定其在刚体动力学框架中的行为的可调节体参数如下:
弥撒#
密度#
对象的密度定义为其单位体积的质量:
密度值显然取决于质量值,反之亦然:值越高,物体越重且密度越大。
根据阿基米德原理,密度决定了身体的浮力。密度越高,身体漂浮的趋势越少。
线性阻尼和角阻尼#
当物体开始沿确定的方向移动时,线性阻尼力将其减速直至完全停止。与线性阻尼类似,角阻尼会随着时间的推移降低对象的角速度,从而使它们的旋转停止。在车身的线性阻尼中,添加了全局 Linear Damp ,并计算了指数函数。以与主体的角度阻尼完全相同的方式,添加了全局 Angular Damp 。
这两个参数可确保对象平稳停止,并且无需进行不必要运动的计算。
最大线速度和最大角速度#
最大线速度和角速度定义了身体的最大可能速度。超过此限制的速度将被裁剪。例如,最大线速度参数可以帮助避免隧穿(穿透)效应。
摩擦#
摩擦系数允许对表面进行更粗糙的摩擦建模,并且与身体的运动方向相反。值越高,身体滑动的趋势就越小。考虑两个接触表面的摩擦值。
计算得出的摩擦力取决于对象的质量和重力,以及接触面之间的角度。例如,如果人体沿倾斜平面滑行,则摩擦力会降低,因为垂直于表面的重力减小了。
摩擦是在物理物体之间接触时计算的。
归还#
恢复力的系数确定了碰撞后保留的相对动能的程度。它通过与另一个对象接触来定义对象的弹性。它取决于碰撞体材料的弹性。模拟的恢复(如摩擦)会考虑两个物体接触的总值。
- 1 的最大值模拟弹性碰撞。物体根据它们通过接触获得的冲动反弹。
- 0 的最小值模拟无弹性碰撞。物体根本不反弹。
同样,就像摩擦一样,恢复是通过身体之间的接触来计算的。
冷冻#
当物体不移动并保持平衡一段时间后,它很可能会不动,直到对其施加外力并促使其再次移动。在这段非活动期间,实际上没有必要对其进行仿真。此状态称为冻结,它可以节省大量计算资源。
冷冻的蓝色和未冷冻的红色盒子。 施加在盒子金字塔上的冲动使除了一个之外的所有东西都冻结了
|
- 它的线速度小于Frozen linear velocity,角速度小于Frozen angular velocity。两个速度值必须同时较低,否则仿真将不会停止。
还为整个世界设置了Frozen linear velocity和Frozen angular velocity个阈值。将这些全局冻结阈值与为每个身体设置的阈值进行比较,然后选择 最高值来冻结身体。
- 对于Frozen frames的数量,速度值保持低于冻结速度。这样做是为了确保身体真正终止其运动。
冻结身体时,其线速度和角速度设置为 0 。当另一个未冻结的物体触摸它或对其施加一些力时,将再次开始模拟身体运动。
设置身体参数#
每个实体的参数由其类型决定。要通过 UnigineEditor 查看或调整这些参数,请执行以下操作:
- 在Editor Viewport或 世界节点 层次结构窗口中选择一个节点。
- 转到 Parameters 窗口中的Physics标签。
- 指定可用的主体参数。