This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
UnigineEditor
界面概述
资产工作流程
设置和首选项
项目开发
调整节点参数
Setting Up Materials
Setting Up Properties
照明
Landscape Tool
Sandworm
使用编辑器工具执行特定任务
Extending Editor Functionality
嵌入式节点类型
Nodes
Objects
Effects
Decals
光源
Geodetics
World Objects
Sound Objects
Pathfinding Objects
Players
编程
基本原理
搭建开发环境
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
创建内容
Content Optimization
Materials
Art Samples
Tutorials
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

实体

实体可以视为对象的物理近似。它们描述对象的行为并表示一组物理参数,例如质量,速度等。它是使对象与其他对象和外部物理力相互作用的主体。每种类型的主体都用于模拟特定类型的对象:

  • 刚体(还需要分配 shape )—能够根据刚体动力学模拟对象。
  • 布娃娃身体(还需要为每个骨骼分配一个 shape )—为骨骼动画角色提供死亡序列的程序动画。
  • 骨折体-可以实时模拟可破坏物体。
  • 绳索主体-可以对各种类型的绳索和钢丝进行物理模拟。
  • 布体-可以对各种类型的布料进行物理模拟。
  • 水体-可以对不同密度和粘性行为的液体进行物理模拟,包括浮力效应和波浪动力学。

还有两种类型的辅助体

  • 虚拟身体-一种没有物理属性的静态身体。它用于通过关节连接其他实体。
  • 路径主体-一种没有物理属性的静态主体。这是一个花键,可以使任意刚体沿其移动。

为了快速查看所有类型的物体,请观看我们的 物理视频教程的一部分

刚体动力学#

大多数物理学模拟都是基于刚体动力学的。刚体是固体的理想表示,它占据有限的空间。该空间量由 shape 或分配给主体的一组形状确定。刚性物体不能变形,即,不管该物体发生什么,其几何形状都不会改变。刚体动力学应用于指定了形状的以下刚体:

启用后,所有这些近似于对象体积的实体及其形状都具有遵循牛顿力学的刚性对象的共同属性。

Run Lola Run

碎布娃娃和刚体根据刚体动力学运动

观看我们的物理视频教程片段,以获取本文的插图。

基本概念#

刚体在任何时刻的状态都由其在空间中的位置方向(相对于某些参考点-质心 )和速度。身体运动有两种类型,因此有两个速度分量:

  • 线性运动。如果我们想象身体的方向是固定的,那么身体只能经受的运动就是平移运动-线性位置的变化。此更改以线速度执行。
  • 角运动另一方面,如果我们在空间中冻结人体的质心,则人体唯一能执行的运动就是旋转,这由角速度描述。
注意
设置物体的线速度或角速度将立即使其沿指定方向移动或旋转。

随着身体的移动,其线性和角动量发生变化。 线性动量可以认为是身体继续沿直线运动的程度。它是质量与身体线速度的乘积:

p = m * v

除非受到外力或冲动,否则身体将永远运动。 等于身体质量乘以加速度:

F = m * a

通过使身体经历0度旋转(即随时间改变速度),力可以间接控制其速度和位置。

注意
作用在物体上的力不会立即对其产生影响,它们会在每个物理模拟框架之前累积,并且在模拟过程中会施加不平衡的合成力。然后将力重置为零,以便为下一帧重新计算。扭矩也是如此。

脉冲是力随时间的积分。可以将其视为施加了合力的物体的动量变化。例如,当两个物体碰撞时,当牛顿第三定律适用时,它们交换相等且相反的脉冲,并导致分开。

与线性动量类似,角动量是“旋转运动量”的量度,可以认为是人体将继续围绕对称轴旋转的程度。它表示为身体 惯性张量 与角速度的乘积。

旋转持续到扭矩(旋转力)施加到该物体上。扭矩是半径矢量(从质心到施加扭矩的点的矢量)和力矢量(力的大小)的叉积。宽松地说,它的作用就像影响转速的杠杆一样。

力和冲动也可以施加到身体的任意点,并且当该点不是质心时,还可能导致身体旋转。在这种情况下,将力计算为力矢量和半径矢量(从质心到必要点)的叉积,并将其添加到扭矩中。相反,未施加到质心的扭矩会增加力。

注意
与力和扭矩不同,脉冲随着物理原理的更新而立即改变体速。

总结起来,该运动的特征在于以下基本参数:

直线运动 角运动
Mass (scalar) Inertia tensor (mat3)
Linear velocity (vec3) Angular velocity (vec3)
Force(vec3)

Impulse ( vec3)
Torque (vec3)

确定其在刚体动力学框架中的行为的可调节体参数如下:

弥撒#

物体的质量乘以为世界指定的 gravity 定义其重量:

W = m * g

重心被自动计算为逼近对象的所有形状的平均质量位置。它用作直线运动和旋转以及外力和扭矩施加的参考点。

身体的质量参数可以手动设置,也可以使用基于形状的参数自动确定。当主体具有几种 shapes 时,这很方便。

密度#

对象的密度定义为其单位体积的质量:

ρ = m / V

密度值显然取决于质量值,反之亦然:值越高,物体越重且密度越大。

Boxes of different mass and density

不同质量和密度的浮力盒

根据阿基米德原理,密度决定了身体的浮力。密度越高,身体漂浮的趋势越少。

线性阻尼和角阻尼#

当物体开始沿确定的方向移动时,线性阻尼力将其减速直至完全停止。与线性阻尼类似,角阻尼会随着时间的推移降低对象的角速度,从而使它们的旋转停止。在车身的线性阻尼中,添加了全局 Linear Damp ,并计算了指数函数。以与主体的角度阻尼完全相同的方式,添加了全局 Angular Damp

这两个参数可确保对象平稳停止,并且无需进行不必要运动的计算。

最大线速度和最大角速度#

最大线速度和角速度定义了身体的最大可能速度。超过此限制的速度将被裁剪。例如,最大线速度参数可以帮助避免隧穿(穿透)效应。

注意
还有全局最大 linear angular 速度阈值。将全局最大值与为身体设置的最大值进行比较,然后选择 minimum 值来限制实际速度。

摩擦#

摩擦系数允许对表面进行更粗糙的摩擦建模,并且与身体的运动方向相反。值越高,身体滑动的趋势就越小。考虑两个接触表面的摩擦值。

计算得出的摩擦力取决于对象的质量重力,以及接触面之间的角度。例如,如果人体沿倾斜平面滑行,则摩擦力会降低,因为垂直于表面的重力减小了。

摩擦是在物理物体之间接触时计算的。

注意
如果为曲面启用了 Collision 选项,则它也有助于计算。

归还#

恢复力的系数确定了碰撞后保留的相对动能的程度。它通过与另一个对象接触来定义对象的弹性。它取决于碰撞体材料的弹性。模拟的恢复(如摩擦)会考虑两个物体接触的总值。

  • 1 的最大值模拟弹性碰撞。物体根据它们通过接触获得的冲动反弹。
  • 0 的最小值模拟无弹性碰撞。物体根本不反弹。

同样,就像摩擦一样,恢复是通过身体之间的接触来计算的。

注意
如果为曲面启用了Collision选项,则它也有助于计算。

冷冻#

当物体不移动并保持平衡一段时间后,它很可能会不动,直到对其施加外力并促使其再次移动。在这段非活动期间,实际上没有必要对其进行仿真。此状态称为冻结,它可以节省大量计算资源。

注意
冻结只能应用于以下主体:
冷冻盒     当脉冲解冻时,仿真又重新开始
冷冻的蓝色和未冷冻的红色盒子。 施加在盒子金字塔上的冲动使除了一个之外的所有东西都冻结了

如果发生以下情况,则身体被冻结,即停止模拟:

  1. 它的线速度小于Frozen linear velocity,角速度小于Frozen angular velocity。两个速度值必须同时较低,否则仿真将不会停止。

    还为整个世界设置了Frozen linear velocityFrozen angular velocity个阈值。将这些全局冻结阈值与为每个身体设置的阈值进行比较,然后选择 最高值来冻结身体。

  2. 对于Frozen frames的数量,速度值保持低于冻结速度。这样做是为了确保身体真正终止其运动。

冻结身体时,其线速度和角速度设置为 0 。当另一个未冻结的物体触摸它或对其施加一些力时,将再次开始模拟身体运动。

设置身体参数#

每个实体的参数由其类型决定。要通过 UnigineEditor 查看或调整这些参数,请执行以下操作:

  1. Editor Viewport 世界节点 层次结构窗口中选择一个节点。
  2. 转到 Parameters 窗口中的Physics标签。
  3. 指定可用的主体参数。
最新更新: 2021-04-29
Build: ()