Version: 2023.1
关节和布娃娃稳定性
多场景物理

布料

The Cloth component works with the Skinned Mesh Renderer to provide a physics-based solution for simulating fabrics. It is specifically designed for character clothing, and only works with the Skinned Mesh Renderer. If you add a Cloth component to a GameObject with a regular Mesh Renderer, Unity removes the Mesh Renderer and adds a Skinned Mesh Renderer.

To attach a Cloth component to GameObject that has a Skinned Mesh Renderer, select the GameObject in the Editor, click the Add Component button in the Inspector window, and select Physics > Cloth. The component appears in the Inspector.

属性

属性 功能
Stretching Stiffness 布料的拉伸刚度。
Bending Stiffness 布料的弯曲刚度。
Use Tethers 施加约束以帮助防止移动的布料粒子离开固定粒子的距离太远。此属性有助于减少过度拉伸。
Use Gravity 是否应该对布料施加重力加速度?
Damping 运动阻尼系数。
External Acceleration 施加在布料上的恒定外部加速度。
Random Acceleration 施加在布料上的随机外部加速度。
World Velocity Scale 角色多大程度的世界空间移动会影响布料顶点。
World Acceleration Scale 角色多大的世界空间加速度会影响布料顶点。
Friction 布料与角色碰撞时的摩擦力。
Collision Mass Scale 碰撞粒子的质量增加量。
Use Continuous Collision 启用连续碰撞来提高碰撞稳定性。
Use Virtual Particles 每个三角形添加一个虚拟粒子,从而提高碰撞稳定性。
Solver Frequency 解算器每秒迭代次数。
Sleep Threshold 布料的睡眠阈值。
Capsule Colliders 应与此 Cloth 实例碰撞的 CapsuleCollider 的数组。
Sphere Colliders 应与此 Cloth 实例碰撞的 ClothSphereColliderPairs 的数组。

详细信息

布料不响应场景中的任何碰撞体,也不会将力反射回世界。添加 Cloth 组件后,该组件完全不会响应和影响任何其他实体。因此在手动将碰撞体从世界添加到 Cloth 组件之前,布料和世界无法识别或看到彼此。即使执行了此操作,模拟仍是单向的:布料可以响应实体,但不会反向施力。

此外,只能对布料使用三种类型的碰撞体:球体、胶囊体以及使用两个球形碰撞体构造而成的圆锥胶囊碰撞体。之所以存在这么多限制是为了帮助提高性能。

编辑约束工具

您可以将约束应用于布料的特定顶点,以增加或减少这些顶点的移动自由度。

在 Inspector 中,选择 Cloth 组件中的 __Edit cloth constraints__(左上角的按钮)。启用该工具后,在 Scene 视图中,网格的所有顶点上都将出现小球体。这些小球体代表可以应用约束的布料粒子。Scene 视图右下角还会显示 Cloth Constraints 工具窗口。

在带蒙皮的网格渲染器上使用的布料约束工具。
在带蒙皮的网格渲染器上使用的布料约束工具。

约束类型和颜色

对于每个布料粒子,您可以设置和显示两种约束: * Max Distance – 布料粒子可从顶点位置行进的最大距离。 * Surface Penetration – 布料粒子可穿透网格的深度。

根据当前选择的约束的类型,粒子的颜色表示该粒子的约束在布料内的相对值。

约束虚拟化

Cloth Constraints 工具的虚拟化属性。
Cloth Constraints 工具的虚拟化属性。
属性 功能
Visualization 选择要显示的约束类型和粒子。
Max Distance 仅显示布料粒子的 Max Distance 值。
Surface Penetration 仅显示布料粒子的 Surface Penetration 值。
Manipulate Backfaces 启用此选项可以可视化和操控可能隐藏在布料当前朝向部分后面的粒子。
[ 色谱 ] 根据当前在整块布料中应用的最小值和最大值,为上述选定的约束类型提供粒子颜色和约束值之间的对应关系。黑色始终表示粒子没有约束。
Constraint Size 代表布料粒子的球体的显示大小。在方便时可以调整此值以便简化约束版本。这个属性对约束本身没有任何影响。

约束版本模式

您可以使用 3 种不同的模式来编辑布料约束值。

模式 描述
Select 将固定约束值应用于预先选择的粒子组。
Paint 通过用画笔绘制布料粒子来施加固定的约束值。
Gradient 将约束值的从左到右线性渐变应用于预先选择的粒子组。

根据使用的模式,工具属性和所需执行的步骤会有所不同。在所有情况下,最后一步都对应于应用约束值的操作。

Select 模式下:

Select 模式下的 Cloth Constraints 工具。

  1. 使用鼠标光标来绘制一个选框,或一次单击一个粒子。
  2. 启用要应用于选定项的约束类型:__Max Distance__ 和/或 Surface Penetration
  3. 根据刚启用的约束类型设置一个值。
Paint 模式下:

Paint 模式下的 Cloth Constraints 工具。

  1. 根据您需要用画笔覆盖的区域来调整 Brush Radius
  2. 启用要应用的约束类型:__Max Distance__ 和/或 Surface Penetration
  3. 根据刚启用的约束类型设置一个绘制值。
  4. 用画笔在粒子上绘制约束。
Gradient 模式下:

Gradient 模式下的 Cloth Constraints 工具。

  1. 确保在 Scene 视图中开启 2D 视图(该工具在 3D 视图下无法应用渐变)。
  2. 使用鼠标光标来绘制一个选框,或一次单击一个粒子。
  3. 设置要在选择范围内从左到右应用的渐变的极限值:__Gradient Start__ 和 Gradient End
  4. 启用要应用于选定项的约束类型:__Max Distance__ 和/或 Surface Penetration

自碰撞和互碰撞

布料碰撞使游戏中的角色服装和其他面料更加逼真。在 Unity 中,布料有几种处理碰撞的布料粒子。可将布料粒子设置为:

  • 自碰撞,防止布料穿透自身。
  • 互碰撞,允许布料粒子相互碰撞。

要为布料设置碰撞粒子,请在 Cloth Inspector 中选择 Self Collision and Intercollision 按钮:

Cloth Inspector 中的 Self Collision and Intercollision 按钮
Cloth Inspector 中的 Self Collision and Intercollision 按钮

此时将在 Scene 视图中显示 Cloth Self Collision And Intercollision 窗口:

Cloth Self Collision And Intercollision 窗口
Cloth Self Collision And Intercollision 窗口

包含 Cloth 组件的蒙皮网格将自动显示布料粒子。最初没有任何布料粒子设置为使用碰撞。这些未使用的粒子显示为黑色:

未使用的布料粒子
未使用的布料粒子

要应用自碰撞或互碰撞,必须选择一组粒子来应用碰撞。要选择一组粒子进行碰撞,请单击 Select 按钮:

Select 布料粒子按钮
Select 布料粒子按钮

现在左键单击并拖动以便选择要应用碰撞的粒子:

使用单击并拖动的方式选择布料粒子
使用单击并拖动的方式选择布料粒子

选定粒子显示为蓝色:

选定的布料粒子为蓝色
选定的布料粒子为蓝色

勾选 Self Collision and Intercollision 复选框可将碰撞应用于选定粒子:

Self Collision and Intercollision 复选框
Self Collision and Intercollision 复选框

指定用于碰撞的粒子将显示为绿色:

选定粒子为绿色
选定粒子为绿色

要为布料启用自碰撞行为,请选择 Cloth Inspector 窗口的 Self Collision 部分,并将 DistanceStiffness 设置为非零值:

Self Collision 属性的参数
Self Collision 属性的参数
属性: 功能:
Distance 每个粒子的包裹球体的直径。Unity 确保这些球体在模拟过程中不会重叠。Distance 属性的值应小于配置中的两个粒子之间的最小距离。如果距离较大,则自碰撞可能违反某些距离约束并导致抖动。
Stiffness 粒子之间的分离冲力的强度。此值由布料解算器进行计算,应足以保持粒子分离。

自碰撞和互碰撞可能需要大量的总模拟时间。请考虑缩小碰撞距离并使用自碰撞索引来减少彼此碰撞的粒子数。

自碰撞使用顶点,而不是三角形,因此对于三角形远大于布料厚度的网格,不要指望碰撞能够完美运行。

PaintErase 模式允许通过按住鼠标左键并拖动单个布料粒子来添加或删除用于碰撞的粒子:

Self Collision 参数
Self Collision 参数

PaintErase 模式下,指定用于碰撞的粒子为绿色,未指定的粒子为黑色,画笔下方的粒子为蓝色:

正在绘制的粒子为蓝色
正在绘制的粒子为蓝色

布料互碰撞

可使用与指定自碰撞粒子相同的方式(如上所述)为互碰撞指定粒子。与自碰撞一样,可以指定一组用于互碰撞的粒子。

要启用互碰撞行为,请打开 Physics 设置(从 Unity 主菜单中选择:__Edit__ > Project Settings__,然后选择 Physics__ 类别),并在 Cloth InterCollision 部分将 DistanceStiffness 设置为非零值:

在 Physics 设置中启用互碰撞行为
在 Physics 设置中启用互碰撞行为

布料互碰撞的 DistanceStiffness 属性与以上描述的自碰撞的 Distance 和 Stiffness 属性功能相同。

碰撞体碰撞

布料无法直接与任意世界几何体碰撞,现在只会与胶囊碰撞体球形碰撞体数组中指定的碰撞体相互作用。

球形碰撞体数组可以包含单个有效的 SphereCollider 实例(第二个为 null)或一对实例。在前一种情况下,ClothSphereColliderPair 仅表示待碰撞布料的单个球形碰撞体。在后一种情况下,它表示由两个球体以及连接这两个球体的锥体所定义的圆锥形胶囊形状。圆锥形胶囊形状在对角色的四肢进行建模时非常有用。


  • 2017–12–05 页面已修订

  • 2017.3 版中添加了布料自碰撞和互碰撞 NewIn20173

Cloth

关节和布娃娃稳定性
多场景物理