布料动力学¶
布料动力学 节点可在网格表面上模拟布料的物理行为。
布料运动通过 XPBD 解算器节点进行模拟。布料动力学 节点负责设置必要的结构约束及常见效果器(如重力、阻尼和碰撞)。可通过 类型化捆包 添加额外效果。
Warning
布料动力学的物理模拟是一项实验性功能,未来可能会发生显著变化。目前部分功能尚缺失,例如自碰撞检测功能。
输入¶
- 几何数据
需要动画化或模拟的网格几何结构。这被用作生成内部拉伸和弯曲力的 静止形态。
- 钉固顶点组
将顶点固定到其静止位置所需的权重值。数值为 1 时可使顶点保持固定;而小于 1 的数值则产生软固定效果,允许顶点相对于初始位置发生偏移。
- 反转钉固组
对于该场为真值的点,使用 1 减去 钉固组 权重的值。
- 弹性
描述边缘相对于其静置长度允许伸展程度的系数。弹性系数为 0 时不允许发生任何拉伸。
- 柔韧性
描述各表面相对于其静止形态允许弯曲程度的参数。柔韧系数为 0 时,不允许在公共边缘处发生任何弯曲。
解算器¶
物理解算器的通用设置。
- 子步数
模拟过程中使用的子步骤数量。增加子步数在某些情况下有助于提高稳定性,但也会因重复碰撞检测而增加成本。
- 约束迭代
约束解算器为确保所有约束条件均得到满足而执行的迭代次数。若残差大于 1,则建议增加约束迭代次数。
- 模拟至世界空间
可选地从物体空间转换至模拟空间。该定义界定了所有物理模拟发生的空间环境。若未指定变换参数,则该物体通常应保持静止状态。
结构¶
配置布料几何体的内部物理属性。
- 质量
曲线点的质量属性。
该数值不必基于布料的实际重量来来确保 “真实”,但应将其视为外部力作用的一个影响因素。极端数值可能会导致数值不稳定。
- 摩擦
静摩擦与动摩擦系数。较小的摩擦系数可模拟滑溜材料的行为,而较大值则会产生粘性行为。
该系数的确切含义可理解为 摩擦角 的正切值(维基百科):当接触力与表面法线方向之间的夹角较小时,接触属于 静摩擦 状态,并使物体紧贴表面。当接触力超过摩擦角时,系统进入 动摩擦 状态,并以与切向速度成正比的方式减速。
- 碰撞半径
碰撞接触点的距离余量,可在布料网格与外部碰撞体之间产生额外偏移。
阻尼¶
- 线性
一种简单的通用阻尼特性,可降低任意运动点的速度,模拟空气或其他介质中的阻力效应。阻尼系数描述了每秒速度的相对减小量,近似于指数衰减。
重力¶
启用重力。
- 重力
模拟空间中的加速度矢量,通常沿负 Z 方向。
撕裂¶
启用布料撕裂功能,该功能可在拉伸力过大时沿边缘处分割网格。
- 模式
选择允许撕裂的边线。
- 全部:
任何边都可以被分割。
- 自定义:
仅允许分割包含在 边线组 中的边。
- 沃罗诺伊图:
使用沃罗诺伊模式生成孤岛,仅分割孤岛之间的边。
- 边线组 自定义
允许撕裂的边线组。
- 沃洛诺伊缩放 沃洛诺伊
用于生成不可分离孤岛的沃罗诺伊图案尺度。
- 阈值
发生撕裂所需的边长阈值。该数值描述了布料的相对应变,其等效应力取决于弹性系数。
效果器¶
可添加至模拟中的其他外部效果器。效果器可以是外部力场、碰撞体或自定义效果器,这些效果器会在模拟过程的某个阶段被执行(详见自定义效果器)
- 集合
一组带有效果器的物体集合。
可通过设置效果器节点将效果器添加到物体几何体中。
- 布料标签
设置在布料几何体上的过滤标签。当某个效果器在多个模拟场景中被使用时,可利用这些标签对其进行限制。
- 效果器
一组局部定义的效果器。这些元素可构建于节点树中,并直接传递至模拟节点。
输出¶
- 几何数据
经物理变形后的布料几何体。
- 残差
最后一个子步骤结束时的平均相对误差。这表明了模拟的品质:
误差值为 1 或更小则被视为良好结果。
若误差值持续大于 1,则解算器可能需要更多的约束迭代次数以及可能更多的子步骤才能获得准确结果。
若误差值仅在特定情况下超过 1,则可能表明模拟存在过度约束,例如由碰撞体重叠或极端作用力所致。
若该数值非常小,则迭代次数或子步骤数会不必要地增加;通过降低迭代次数可提升系统性能。
Note
相对误差基于为每种约束类型定义的阈值确定。这些阈值目前未由节点资产公开显示,且对于基于距离的约束条件均固定为 1 毫米。最终值计算为所有相对约束误差之和的均方根。
常见问题¶
约束迭代次数不足¶
模拟设置越复杂,解算器需要进行的 约束迭代 次数就越多才能获得正确解。迭代次数不足的模拟结果在视觉上可能显得合理,但其表现出的拉伸和弯曲程度远超预期。
请检查 残差 值以确认解的准确性是否足够。理想情况下,该值不应超过 1。
开放的碰撞边界¶
目前仅支持具有闭合网格的碰撞体。碰撞体必须采用流形网格结构(无开放边界),至少在预期发生碰撞的区域应如此。
具有开放边界的碰撞网格可能引发突然跳跃现象。一个点可在开放边界上移动而不产生接触,并从背面接近网格面。当物体接近网格时,系统会突然检测到接触点,并将该点从网格中剔除。
示例错误报告:#159657。
穿透碰撞体¶
快速移动的几何体可能无法可靠地与薄网格发生碰撞(穿透)。
碰撞体必须具有一定的厚度才能避免穿透,具体厚度取决于碰撞速度和子步数:子步骤越多,碰撞体可以做得越薄,但也有其上限(参见子步骤过多)。
子步骤过多¶
使用过多子步骤可能导致数值误差,从而导致约束响应随弹性或柔韧性的变化而发生突变。建议将 子步数 保持在 20 以下;若需提高精度,则应增加 约束迭代。
根本原因在于使用时间(子)步长的倒平方作为乘法系数,从而导致舍入误差。