学习资料,仅供参考!
Two Bone IK 控制器将逆运动(IK)解算器应用于到如角色四肢等3关节链。
变量( HandIKWeight )被用于在角色的 hand_l 和 hand_r 控制器上驱动 关节目标位置(Joint Target Location) 属性。通过对数值进行调整,可决定角色持有武器的方式,而无需根据不同角色手动设置不同姿势的动画。
AnimGraph节点网络显示如下,可复制并粘贴到自己的动画蓝图中。
Two Bone IK属性
可在Two Bone IK节点的 细节 面板中找到以下属性:
属性 | 说明 | ||||||||
---|---|---|---|---|---|---|---|---|---|
IK | |||||||||
IK骨骼 | 要应用IK解算器的骨骼命名。此应为骨链末端的骨骼,如脚踝或腕骨。 | ||||||||
拉伸限制 | |||||||||
X | 肢体最大长度的比率,用于决定缩放骨骼的时间。 | ||||||||
Y | 平移组件的最大缩放量。 | ||||||||
允许拉伸 | 如为true,则可拉伸骨骼。 | ||||||||
末端执行器 | |||||||||
执行器空间骨骼命名 | 执行器位置空间设为BCSBoneSpace时,用作执行器位置的骨骼命名。 | ||||||||
获取执行器空间的旋转 | 启用时,执行器(组件、父或骨骼)的旋转将应用到IK骨骼。 | ||||||||
维持执行器Rel Rot | 启用"获取执行器空间的旋转"时,将覆盖此属性。 | ||||||||
执行器位置空间 | 效果器位置的参考帧。
| ||||||||
关节目标 | |||||||||
关节目标位置空间 | 关节目标位置的参考帧。
| ||||||||
关节目标空间骨骼名称 | 关节目标位置空间设为BCSBoneSpace时,用作关节目标位置的骨骼命名。 |
Two Bone IK节点上默认公开以下引脚:
引脚 | 说明 | |
---|---|---|
输入引脚 | ||
执行器位置 | 在执行器位置空间中指定位置执行器的向量。 | |
关节目标位置 | 在关节目标位置空间中指定位置关节目标的向量。 |
大体计算过程:
joint target location用于保证joint节点在root、effector location和joint target location所构成的平面上。
root为ik骨骼的父节点的父节点,三个关节,两根骨骼。
(root到effector location)的单位向量与(root到joint target location的向量)做点积,得到(effector location到joint target location的向量)。
如果脚伸不直的话,我们需要求出三个关节中中间关节的位置joint,而(root到joint的骨骼长度)、(joint到ik骨骼(即effector location)的长度)和(root到effector location的向量长度)是已知的,知道了三边,我们可以用余弦定理求出(root到joint的骨骼长度)与(root到effector location的向量长度)之间的夹角r。
root到joint的向量求出,那么就知道了joint的位置了。
root到joint的向量正好为另外两个单位向量的和乘以模长,因为r角度已经求出,而r正对着的向量为(effector location到joint target location的向量)的单位向量。
点积意义如下:
余弦定理如下:
源码解析参考:
【UE5】深入理解动画模块7: 双骨骼IK算法与源码解析_哔哩哔哩_bilibili