使用约束来设计头发曲线。例如,约束可以用作把头发后向束或扎成马尾的发扣。可以创建各种类型的约束:“橡皮筋”(Rubber Band)、“连杆”(Stick)、“变换”(Transform)、“头发到头发”(Hair to Hair)、“发束”(Hair Bunch)、“碰撞球体”(Collide Sphere)和“碰撞立方体”(Collide Cube)。有关约束类型的描述,请参见头发约束类型。最后两个约束类型为隐式碰撞约束,其工作原理与其他约束类型不同;请参见使用碰撞头发约束。
创建约束时,会将约束设定为影响选定的头发曲线。这些毛发曲线的标识存储在 hairConstraint 节点的“curveIndices”属性中。ID 表示头发系统中头发的索引(UV 栅格位置)。
在开始帧,模拟可确定受约束曲线上距离约束节点位置最近的点。如果当前帧小于或等于此开始帧,可以将约束节点及连接移动到最近的点更新。模拟运行时约束仅适用于初始的这一组点,而不是整个曲线。约束类型确定模拟如何处理这一组点。
这样可以确保约束在开始模拟时不对头发应用力,而在模拟进行过程中应用约束。通常,应在建模和确定头发的开始位置和形状后应用约束。如果在模拟开始帧处需要根据场景编辑或设置模型位置,可以在头发毛囊节点或对象变换下为约束分组,这样在开始帧处与头发的相对位置将不会更改(因为始终相对于“开始位置”(Start Position)来定义约束,“发束”(Hair Bunch)除外)。
约束通过对一组点应用力来发挥作用。所应用力的量由约束的“刚度”(Stiffness)属性缩放。另外还有“粘合强度”(Glue Strength)属性,用于确定向点附着约束的阈值,超过此阈值,约束即会中断。点在开始帧粘合到约束。约束应用的力超出粘合强度时,约束即会被断开,然后,该点在剩余的模拟过程中将不受约束。粘合强度为 1 强度已足够,约束永不会中断。在模拟过程中将约束突然中断所需的强度难以确定,可能需要使用不同的胶合值(介于 0 和 1 之间)进行实验才能让中断在所需的点发生(如果需要,可以将粘合强度动态设置为 1 到 0 间的值)。
由于约束仅影响每条选定曲线上的一个点,可以对一组曲线应用位于不同位置的多个约束,以便约束这些曲线上的多个点。
插入行为类似于隐式碰撞对象的球体或立方体。根据需要变换球体或立方体。有关详细信息,请参见使用碰撞头发约束。
与其他头发约束不同,“碰撞球体”(Collide Sphere)和“碰撞立方体”(Collide Cube)影响所有头发,而非特定的头发 CV。这些对象与和几何体碰撞相比有多个优点。
通常,需要使用这些在变换几何体下分组的约束中一部分,在碰撞区域(如头部和肩部)大致形成几何体的外形。对于有机对象,可能需要使用几个球体,将某些有些对象缩放为椭球体。虽然在某些情况下锐边会导致稳定性问题(球体不会出现类似问题),碰撞立方体最适合用于墙壁和平面。但是,降低“碰撞立方体”(Collide Cube)的“刚度”(Stiffness)值往往可以磨平立方体的边。