ALS中的脚部和手部都有ik,用的都是two bone ik。这个节点的作用是当你指定了一根骨骼b后,它默认的影响的是这根b骨骼和父亲a骨骼这两根骨骼。
如图a骨骼是b的父亲,ik的原理是1点是不动的3点是受外界影响动位置,ab骨骼是在123点的平面平面上。所以通过joint target影响2点位置,就决定了两根骨骼的弯曲状态。
脚步IK
先看脚步ik的配置,这里藏着一个深深的坑
图中效果器的骨骼可以和要ik的两根骨骼没有任何关系,效果器的骨骼只是影响效果器的位置和朝向,而效果器的位置才会影响fool_l的位置和朝向。
在左脚ik中既然VB ik_foot_l_Offset影响的是foot_l,那么就得要求VB ik_foot_l_Offset的mesh space下的初始transform 和foot_l的mesh space下的初始tranform得是一样,否则当ik起作用的时候角色的脚会歪七八扭的。因为如果不一样,它会把VB ik_foot_l_Offset的meshspace 下的transform直接作用于foot_l,就会改变foot_l的朝向,从而影响脚部,就会变形。正确的设置如图
同样要求自己做的动作中ik_foot_root的transform必须是0,这样要保持和父亲root的坐标系一样。正确的设置如图:
保证以上两点,新作的动作脚部ik就不会出现问题。
下面说说在我们左脚下如果有个石头或者台阶如何判定VB ik_foot_l_Offset的位置,从而设置ik,让左脚放到合适的位置。
用到的是linetrace,在AnimBP中
碰撞点的位置是脚部应该放到的位置,碰撞点的法线可以让脚部贴合地面坡度。如图碰撞结果的处理。
由了位置和旋转数据就可以在anim bp中对VB ik_foot_l_Offset进行直接的transform操作,如图
设置完VB ik_foot_l_Offset的位置和朝向,接着执行ik,就直接作用了脚部
脚部ik的joint target:
als用虚拟骨骼VB ik_knee_target_l来决定joint target的位置和朝向。
VB ik_knee_target_l的父亲是ik_foot_l,指向的是大腿骨骼calf_l
按理说这样joint target 起不到任何作用,因为joint target和2点始终是重合的。
于是als做了个处理,让VB ik_knee_target_l始终处于膝盖的前上方,而忽略了缩放和旋转。
这样膝盖只会往前弯曲了。
(我建的als QQ群号 922318447)