Rope Body
Rope body 可以对绳索、电缆、电线等进行物理模拟。绳索可以固定到以下类型的物体上:
要将绳索固定到物体上使其自由悬挂,或将多个物体绑在一起,请使用 Particles joint。 Rope body 可以撕成 Cloth body。绳索增强了模拟环境的真实感,并在替代动画时节省了游戏美术师的时间。但是,这种类型的身体的模拟成本相当高,强烈建议使用距离优化以避免性能下降。
也可以看看#
- BodyRope 类
- 一个例子说明 Rope body 和 Particles joint 的使用
- 的片段物理视频教程说明使用 Rope body 模拟电线和绳索
网格要求#
Rope body 唯一可接受的网格类型是圆柱体。您可以使用标准的原始圆柱体来创建绳索。本案例的流程如下:
质量弹簧仿真模型#
Rope body 被建模为位于网格顶点的一组点质量(粒子)。每个粒子都用球体形状表示,并通过位于网格边缘的内部弹簧接头与其他粒子连接在一起。一方面,内部关节允许重新创建网格拓扑,另一方面可以限制拉伸和折叠。
每个粒子都以位置、质量和速度为特征,并具有恒定的球形,并具有一组半径.总数大量的全身的能量在他们中间平均分布。根据牛顿第二定律,粒子可以通过力量或冲动由内关节和外力施加(碰撞,重力、空气阻力、风力等)。
不计算粒子的自碰撞和不同绳体之间的碰撞。但是,如果选中 Collision 框,绳索会通过与其他物理物体碰撞来与环境相互作用。它在接触情况下的行为由以下参数控制摩擦和归还.选择性的物理交互可通过相应的位掩码.
因此,Rope body 可以被视为刚性粒子的约束系统,因此与 Rigid body 共享一些参数:
粒子半径#
正如已经提到的,每个粒子都是一个具有设定半径的球体。因此,粒子使用连续碰撞检测.绳子永远不会平放在地上或紧紧地粘在表面上。总是有一个等于粒子半径的间隙。
由于不计算粒子之间的碰撞,因此在设置半径时不应考虑它们:
- 对于更稳健的行为,更高的值更可取。但是,太大的半径可能会导致与环境的不正确交互(绳索抽搐或炸毁)。
- 较低的值会减少 Rope body 和表面之间的间隙。但是,半径太小会导致碰撞处理不佳。
关节求解器迭代#
迭代次数控制着绳内节解的精度。此数字表示每个关节求解的次数物理框架.关节以随机顺序求解,以提供更可预测的拉伸结果。
- 迭代次数少可加快模拟速度。然而,在这种情况下,绳子更容易拉伸,看起来更有弹性。最小值为 1。
-
大量的迭代提供了更准确的约束解决方案。在这种情况下,绳子看起来更硬。最大值为 16。
增加迭代次数是相当昂贵的,并且在某些时候不再带来明显的好处,因此应将其保持在合理的成本效益范围内。
增加迭代次数可能有助于避免绳索抽搐。
拉伸和折叠#
绳索可能会因拉伸和折叠而变形。这些变形由两种类型的关节约束控制:
通过这些类型的约束,可以获得所需的绳索外观和感觉,并模拟各种不同的可变形材料,从硬金属线到弹性橡胶绳。
线性恢复#
线性恢复决定了绳子粒子可以相互拉开多远。它强制使用绳索接头来恢复原始网格顶点之间的距离:
- 到1的最大值,粒子回弹力很大,绳子很难拉伸。它提供了坚硬的非拉伸绳索的效果,例如金属丝。
-
该值越低,颗粒越容易彼此远离并且绳索的可拉伸性和弹性越大,例如橡胶绳。
0 和接近零的值是不允许的,因为它们会导致模拟不稳定和绳子爆炸。
角度恢复#
角度恢复决定了由粒子形成的绳索三角形之间可能的角度。它通过强制关节保持原始网格的三角形之间的角度来约束绳索的折叠:
-
通过 1 的最大值,角度趋于保持并且绳索抵抗折叠。绳子看起来很硬。
最大值可能会提供不稳定的行为。 - 通过 0 的最小值,无论网格的原始拓扑如何,绳索都可以轻松地向任何方向折叠和弯曲。
如果绳索太有弹性和弹性,请尝试以下方法之一:
- 将线性恢复设置为 1。
- 增加关节求解器的数量迭代.
- 使用顶点较少的网格。
运动刚性#
Rigidity 参数是绳索运动的附加约束,使其更硬和更不灵活。为此,每个绳索粒子的线速度和角速度根据为所有粒子插值的总速度进行校正。
- 0 的最小值,使绳索有弹性、柔韧且容易变形。
- 1 的最大值,使绳索更硬,不易变形。
撕裂#
当绳索被拉伸或折叠超过其弹性极限时,它会撕裂并撕成碎片。撕裂是由施加力或与物理身体碰撞引起的,取决于绳索的刚度(由控制线性和角度恢复参数)。绳索仅沿绳索三角形的边缘撕裂,分裂网格顶点并复制粒子。
线性阈值距离#
线性阈值设置距离限制伸展绳子。当两个粒子彼此远离的距离超过此限制时,连接它们的关节会断裂并出现撕裂。
- 如果设置为无穷大 (inf),绳索会被拉伸而不会撕裂。该值是默认设置的。
角度阈值角度#
与线性阈值相同,角度阈值表示最大角度折叠绳索相对于其初始状态。
-
如果设置为无穷大 (inf),绳索会折叠而不撕裂。该值是默认设置的。
建议保持角度阈值低于或等于 180 度。
优化仿真#
更新每一帧远离相机的大量物体,这些物体几乎无法区分或观察为质量是一种资源浪费。
为了提高性能并避免过度负载,可以对绳索进行模拟更新了降低的帧率.当玩家离开 Update Distance Limit 指定的区域时,绳索停止更新并静态冻结。
下面给出的一组帧速率使您能够指定在对象可见、仅其阴影可见或根本不可见时应更新绳索模拟的频率。
此功能使用默认设置启用,可确保最佳性能,并且可以在 UnigineEditor 中或通过 API 在运行时针对每个对象进行调整。
分配绳体#
通过将 Rope body 分配给对象统一编辑器执行以下步骤:
- 打开 World Hierarchy 窗口。
-
选择一个动态网格要为其分配 Rope body 的对象。
确保对象的网格满足要求! -
转到 Parameters 窗口中的 Physics 选项卡并分配一个物理身体通过选择 Body -> Rope 到选定的对象。
- 如有必要,设置主体的名称并更改其他参数。
系绳#
绳索可以连接到以下类型的身体:
要将绳索连接到身体,请使用 Particles joint。在 Rigid body(静态或动态)和 Dummy body 的情况下,固定粒子保持固定在它们的位置,并跟随用它拉动绳索的附加对象的变换。
- 选择 Rigid body, RagDoll body 或 Dummy body。
- 添加 Particles joint。
- 指定 Rope body。
- 使用 Particles joint 的 Threshold 和 Size 参数调整固定区域。
附加到蒙皮网格#
令人信服的模拟 Mesh Skinned 角色上的绳索需要不同的方法。为了跟随骨骼变换,在 Particles joint 区域中找到的绳索的每个顶点都映射到最近的 Mesh Skinned 顶点(最多由粒子关节的 Threshold 参数指定的距离)。
例如,我们需要创建一根绳子,它粘在 Mesh Skinned 角色的手上,而绳子的其余部分则悬垂并松散地移动。它是通过以下步骤完成的:
- 创建 Mesh Skinned 时,添加与需要固定的剪裁部分相同的绳段表面。在我们的例子中,它是手中的绳索部分。
- 添加 Mesh Skinned 具有布娃娃分配的机构。确保启用绳段表面。
- 添加单独的动态绳索网格并将其位置与 Mesh Skinned 角色同步。关闭物理模拟 (CTRL + SPACE) 和分配Rope body。
- 附Rope body 到 RagDoll body。如果粒子关节的 Threshold 距离设置得足够低,则物理绳索将自动仅附加到绳索段表面(即手)。之后,绳段表面被简单地禁用并且根本不提供任何负载。