贴一段笔记摘录吧,仅供参考。

节点概述


(资料图)

类似于Hard Constraint Relationship,该节点提供了另一个约束方案——即以约束线段 的索引值较大一端的锚点为中心,为约束关系描述一组旋转范围,作为被约束物体以及索引值较小一端物体绕该锚点旋转的最大角度范围,从而对物体运动的角度变化进行限制。

所以须注意:如果约束几何的@constraint_type属性为position,即非旋转约束的话,则该节点实际上不会起到任何约束效果,也包括距离约束本身。并且这种角度约束的定义,是基于约束线段,而不是基于锚点的变换。

目前仅有Bullet Solver支持该类型的约束关系,一般应用于“类关节”的约束关系,如Ragdoll模拟流程。

约束原理

为约束关系描述一个针对物体旋转的角度运动范围,需要基于三维空间中的三个目标轴向,这三个轴向是相对自身的轴向设置而言的,并不一定对齐世界空间的XYZ。

它们分别是——

围绕物体“上下”轴旋转的Up Rotation

围绕物体“前后”轴旋转的Out Rotation

以及围绕物体“左右”轴旋转的Twist

以上这三个目标轴向(Goal Axis)由当前节点的 Goal Twist Axis 和 Goal Up Axis 两个参数定义,这两个轴向一般要保证相互垂直,另外一个 前后轴——Out Axis 则由这两个轴向的叉乘得出,即垂直于前两个轴向张成的平面,形成一个完整的Goal坐标,从而在此基础上描述最大角度范围。

这种角度约束范围的意义在于:对于每一个约束关系(约束线段)来说,其索引值较低的一端相对于索引值较高一端的相对角度变化量,不得超出指定的限定范围。

Initial&Goal

由前所述,最大角度范围是基于约束关系(约束线段)的Goal Axis坐标轴进行描述的,而在模拟期间,物体实际的旋转行为则是基于约束的Initial Axis坐标变化的。

所以,Goal Axis用于描述旋转范围,Initial Axis则决定物体的旋转基础轴方向,即方向旋转的“初始量”。

总结来讲——Goal Axis是椎体范围所依据的轴向,即Goal Axis的方向决定了椎体范围的朝向;Initial Axis则是当约束线段(或骨骼)应用该椎体范围限定时的初始方向标记,作为约束线段在初始状态的角度声明,从而告诉Solver当前约束线段在一开始处于旋转范围的哪个程度。

在当前节点的Guide Options参数标签页下,可以通过相关参数对基于Goal Axis描述的范围椎体 以及 Initial Axis各轴向进行预览显示:

上图中:绿色和红色轴分别代表Initial Axis的Up Rotation 和 Twist Rotation轴向;而基于Goal Axis定义的旋转角度范围,则以蓝色线显示的椎体以及黄色线显示的扇形进行结合显示,其中蓝色椎体表示基于Goal坐标的Up和Out两个轴向的旋转范围所张成的立体角,黄色扇形则表示基于Goal坐标Twist轴的旋转范围。

下图为Goal Axis(Twist | Up | Out)与基于Goal Axis所描述的旋转范围之间的关系,其中将每个轴向的旋转范围限制在了-45到45度之间,如果Initial Axis与Goal Axis相同,则每个轴向的最大旋转范围是正负旋转45度:

参数详述

Max Up Rotation | Max Out Rotation | Max Twist

这三个参数即用于以每一条约束关系的高索引锚点为中心,为其设置在三个轴向上的最大角度变化范围。

Softness

该值乘以前述的角度范围值,即得到最终的约束响应极限值,即当实际角度变化超出该最终角度的时候,所以该值越低,则实际上的角度可变化范围越小。

Allow Initial Violation of Limits

允许初始状态超出约束范围,从而避免初始状态已经具有角度变化时,模拟起始时突然产生剧烈的恢复运动。

Constraint Force Mixing

增加该项值可以使约束更加绵软,增加模拟效果的稳定性。也就是该值提供一个围绕最大角度值的缩放因数,在最大角度范围的上下形成一个容错区间,使实际角度变化能够一定程度地超出约束限制。但经测试,该参数目前无效。

Bias Factor

决定约束对旋转的纠错率,经测试,降低该值可以有效避免不必要的持续摆动或剧烈抖动,如值为0.001时。

Relaxation Factor

决定约束施加角速度时的影响力,经测试,提高该值可以有效避免碰撞时产生的奇怪的剧烈反弹,如值为2-5时。

Position CFM

Position Constraint Force Mixing,增加该项值可以使约束更加绵软,增加模拟效果的稳定性。该参数类似于前面的Constraint Force Mixing参数,只不过是针对位置变化的约束容错,而不是针对角度。

Position ERP

Position Error Reduce Parameter,决定多大比例的位置错误会在下一个模拟步中被纠正,一般保持在0.1-0.8之间即可。

Goal Twist Axis | Goal Up Axis

见前【Initial & Goal】所记,该项参数用于设置 描述旋转范围所依据的 基础目标轴向。如前所述,一般建议Up Axis和Twist Axis相互垂直。

ConstrainedTwist Axis| Constrained Up Axis

见前【Initial & Goal】所记,该项参数用于设置 物体实际旋转时 所依据的 初始目标轴向。如前所述,一般建议Up Axis和Twist Axis相互垂直。

Enable Motor

Motor行为由Constraint Solver解算,主要用于在已限定的角度范围内,进一步“修正”物体的方向,使其向指定的方向继续进行旋转。

Target Current Pose

勾选该项时,则实际上不会“修正”物体的方向,而是在当前模拟步上 进一步稳固物体的当前方向状态,即针对其它潜在地能影响到当前方向的力产生反向抗力。

所以该项勾选后,下方的Target自定义旋转参数即不可用。

Motor Target

该项用于设置 Motor行为的最大旋转度数,当开启Motor并保持Target Current Pose参数关闭时,Motor会在每个模拟步上驱动物体进行累加旋转,直到旋转到该参数所指定的度数。

参数的三个分量,分别对应Goal Axis的三个轴向,也就是说,Motor行为就是围绕着这三个Goal轴向进行累加旋转的,所以 Motor行为 对物体的 实际旋转方向,取决于前面Goal  ... Axis相关参数 所设置的Goal Axis的坐标方向。

Use Initial Motor Target

由前所述,默认该项未开启时,Motor Target参数所设置的旋转值是以Goal Axis作为基础坐标依据,如果开启该项,则相当于为Motor行为所依据的Goal Axis额外提供了一个变换向量,对其进行线性旋转变换。

所以该参数应该是一个标准化向量,而不再是角度值。

经测试,由于该参数实际决定了最终Motor行为的旋转基础轴向的最终朝向,所以可以直接与Motor Target进行关联,也就是对Motor Target参数所设置的旋转量进行标准化,作为当前参数的值,这样的话,Motor Target所设置的旋转效果会更为稳定以及符合预期。

Max Impulse

最大脉冲,实际上即Motor行为对物体施加的旋转力度。

Ignore Mass

开启该项则忽略物体本身的质量,即@mass属性。

Motor Correction Time

Motor行为 用于“修正”旋转的时间长度,该值越大,则该过程越慢。

Motor CFM

提高该值可以使Motor行为的旋转效果更为柔和,为该参数赋予一个较小的正值,则有助于增加模拟的稳定性。

标签: