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