Version: Unity 6.0 (6000.0)
语言 : 中文
Understand physics performance issues
多场景物理

Cloth

Switch to Scripting

布料 (Cloth) 组件与带蒙皮的网格渲染器 (Skinned Mesh Renderer) 协同工作,从而提供基于物理的面料模拟解决方案。此组件专为角色服装设计,仅对蒙皮网格渲染器有效。如果将 Cloth 组件添加至具有常规网格渲染器的游戏对象,Unity 会删除网格渲染器并添加蒙皮网格渲染器。

要将 Cloth 组件附加到具有蒙皮网格渲染器的游戏对象,请在编辑器中选择游戏对象,在检视面板窗口中单击__添加组件 (Add Component)__ 按钮,然后选择 物理 (Physics) > 布料 (Cloth)。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 组件之前,布料和世界无法识别或看到彼此。即使执行了此操作,模拟仍是单向的:布料可以响应实体,但不会反向施力。

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

编辑约束工具

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

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

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

约束类型和颜色

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

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

约束虚拟化

布料约束工具的虚拟化属性。
布料约束工具的虚拟化属性。

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

约束版本模式

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

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

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

Select 模式下:

Select 模式下的布料约束工具。

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

Paint 模式下的布料约束工具。

  1. 根据需要用笔刷覆盖的区域来调整 Brush Radius
  2. 启用要应用的约束类型:__Max DistanceSurface Penetration__ 或同时启用二者。
  3. 根据刚启用的约束类型设置一个绘制值。
  4. 用笔刷在粒子上绘制约束。
Gradient 模式下:

Gradient 模式下的布料约束工具。

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

自碰撞和互碰撞

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

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

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

Cloth 检视面板中的 Self Collision and Intercollision 按钮
Cloth 检视面板中的 Self Collision and Intercollision 按钮

此时将在场景视图中显示 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)__ 部分,并将__距离 (Distance)__ 和__刚度 (Stiffness)__ 设置为非零值:

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

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

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

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

自碰撞参数
自碰撞参数

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

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

布料互碰撞

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

要启用互碰撞行为,请打开__物理 (Physics)__ 设置(从 Unity 主菜单中选择:__编辑 (Edit)__ > 项目设置 (Project Settings),然后选择__物理 (Physics)__ 类别),并在__布料互碰撞 (Cloth InterCollision)__ 部分将__距离 (Distance)__ 和__刚度 (Stiffness)__ 设置为非零值:

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

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

碰撞体碰撞

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

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


  • 2017–12–05

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

Cloth

Understand physics performance issues
多场景物理