毛发动力学

毛发动力学节点。

毛发动力学 节点可使曲线几何体呈现出动画效果或动态物理发丝般的运动。

该节点有两种常规模式:

动画:

曲线会跟随毛发所附着的表面的动画而变化。

物理:

曲线被模拟为附着在毛发表面的柔性细杆。

使用 XPBD 解算器节点,模拟随时间变化的毛发曲线的运动。毛发动力学 节点负责设置必要的结构约束和常见作用力,例如重力、阻尼以及与表面网格的碰撞。还可以通过 类型化捆包 添加其他效果。

Warning

毛发动力学的物理模拟是一项实验性功能,未来可能会发生重大变化。

输入

毛发

应进行动画制作或模拟的曲线几何体。毛发曲线的形状定义了自然的 静止形态

模式

动画物理 行为之间进行选择。

解算器 物理

物理解算器的通用设置。

子步数

模拟过程中使用的子步骤数量。增加子步数在某些情况下有助于提高稳定性,但也会因重复碰撞检测而增加成本。

约束迭代

约束解算器为确保所有约束条件均得到满足而执行的迭代次数。若残差大于 1,则建议增加约束迭代次数。

时间比例

时间步长的通用缩放系数。时间缩放系数越大,毛发运动速度越快。

模拟至世界空间

可选地从物体空间转换至模拟空间。该定义界定了所有物理模拟发生的空间环境。若未指定变换参数,则该物体通常应保持静止状态。

结构 物理

配置毛发几何体的内部物理属性。

质量

曲线点的质量属性。

该数值不必基于实际的毛发密度来确保 “真实”,但应将其视为外部力作用的一个影响因素。极端数值可能会导致数值不稳定。

摩擦

静摩擦与动摩擦系数。较小的摩擦系数可模拟滑溜材料的行为,而较大值则会产生粘性行为。

该系数的确切含义可理解为 摩擦角 的正切值(维基百科):当接触力与表面法线方向之间的夹角较小时,接触属于 静摩擦 状态,并使物体紧贴表面。当接触力超过摩擦角时,系统进入 动摩擦 状态,并以与切向速度成正比的方式减速。

弹性

该系数描述了毛发曲线相对于其静止长度允许的拉伸程度。弹性系数为 0 时不允许任何拉伸,而弹性系数为 1 时,曲线在自身重力作用下可伸长至静止长度的 10 倍。

柔韧性

描述毛发段之间相对于其静止方向允许弯曲程度的系数。柔韧性系数为 0 时,会形成一条刚性曲线,能够抵抗所有弯曲;而系数为 1 时,则对应一条柔性曲线,几乎不具有抗弯能力。

根部柔韧性

针对发根设置独立的弯曲刚度系数。当根部柔韧性设为 0 时,发根相对于表面法线保持刚性;而设为 1 时,则允许发根沿任意方向偏离法线发生弯曲。

结构随机性 物理

如果启用此功能,将在每个点处的弹性和柔韧性系数上添加一个随机偏移量。

弹性

添加到 弹性 输入中的随机偏移量范围。

柔韧性

添加到 柔韧性 输入中的随机偏移量范围。

根部柔韧性

添加到 根部柔韧性 输入中的随机偏移量范围。

阻尼 物理

一种简单的通用阻尼特性,可降低任意运动点的速度,模拟空气或其他介质中的阻力效应。阻尼系数描述了每秒速度的相对减小量,近似于指数衰减。

线性

线速度的阻尼系数。

角度

角速度的阻尼系数。

表面碰撞 物理

启用毛发曲线与其所附着的表面网格之间的碰撞。

变形

如果表面网格会随时间发生变形,则应启用此选项。在这种情况下,碰撞体的每个点都会单独进行插值。

如果表面网格不会发生变形,则可以禁用此选项以提高性能。当表面作为实例进行变换且不改变局部位置时,也可以禁用此选项。

边接触

启用毛发段与碰撞网格边之间的接触检测。这可防止细长毛发段和/或具有锐角的碰撞体发生相交。

对于光滑的碰撞体,如果轻微的相交并不关键,可以禁用此功能以提升性能。

表面摩擦

表面材料的摩擦系数。关于系数值的含义,请参见摩擦

接触面的有效摩擦系数是接触材料摩擦系数的几何平均值(即两者的乘积的平方根)。

重力 物理

启用重力。

重力

模拟空间中的加速度矢量,通常沿负 Z 方向。

效果器 物理

可添加至模拟中的其他外部效果器。效果器可以是外部力场、碰撞体或自定义效果器,这些效果器会在模拟过程的某个阶段被执行(详见自定义效果器

集合

一组带有效果器的物体集合。

可通过设置效果器节点将效果器添加到物体几何体中。

毛发标签

设置在毛发几何体上的过滤标签。当某个效果器在多个模拟场景中被使用时,可利用这些标签对其进行限制。

效果器

一组局部定义的效果器。这些元素可构建于节点树中,并直接传递至模拟节点。

输出

毛发

通过动画或物理模拟变形后的曲线几何体。

残差 物理

最后一个子步骤结束时的平均相对误差。这表明了模拟的品质:

  • 误差值为 1 或更小则被视为良好结果。

  • 若误差值持续大于 1,则解算器可能需要更多的约束迭代次数以及可能更多的子步骤才能获得准确结果。

  • 若误差值仅在特定情况下超过 1,则可能表明模拟存在过度约束,例如由碰撞体重叠或极端作用力所致。

  • 若该数值非常小,则迭代次数或子步骤数会不必要地增加;通过降低迭代次数可提升系统性能。

Note

相对误差基于为每种约束类型定义的阈值。这些阈值目前未在节点资产中公开,且对于基于距离的约束,阈值固定为 1 毫米;对于旋转约束,阈值固定为 0.01 弧度 ≈ 0.57°.最终值通过计算所有相对约束误差之和的均方根得出。

常见问题

约束迭代次数不足

模拟设置越复杂,解算器需要进行的 约束迭代 次数就越多才能获得正确解。迭代次数不足的模拟结果在视觉上可能显得合理,但其表现出的拉伸和弯曲程度远超预期。

请检查 残差 值以确认解的准确性是否足够。理想情况下,该值不应超过 1。

开放的碰撞边界

目前仅支持具有闭合网格的碰撞体。碰撞体必须采用流形网格结构(无开放边界),至少在预期发生碰撞的区域应如此。

具有开放边界的碰撞网格可能引发突然跳跃现象。一个点可在开放边界上移动而不产生接触,并从背面接近网格面。当物体接近网格时,系统会突然检测到接触点,并将该点从网格中剔除。

示例错误报告:#159657

穿透碰撞体

快速移动的几何体可能无法可靠地与薄网格发生碰撞(穿透)。

碰撞体必须具有一定的厚度才能避免穿透,具体厚度取决于碰撞速度和子步数:子步骤越多,碰撞体可以做得越薄,但也有其上限(参见子步骤过多)。

有弹性但无柔韧性

在毛发曲线模拟中,如果高弹性与低柔韧性的数值同时存在,可能会导致不符合物理规律的变形,仿佛毛发向上卷曲一般。

../../../_images/modeling_geometry-nodes_simulation_hair-dynamics_shear-example1.png

这是由于 剪切 过大所致,此时位置可以偏离旋转的前向方向(见下图中的蓝色箭头),但旋转仍保持刚性。

../../../_images/modeling_geometry-nodes_simulation_hair-dynamics_shear-example2.png

在 Cosserat 细杆模型中,拉伸与弯曲直接相关,因此该模型对这种情况的描述并不充分。未来的约束模型可能会更好地支持此类结构。

子步骤过多

使用过多子步骤可能导致数值误差,从而导致约束响应随弹性或柔韧性的变化而发生突变。建议将 子步数 保持在 20 以下;若需提高精度,则应增加 约束迭代

根本原因在于使用时间(子)步长的倒平方作为乘法系数,从而导致舍入误差。