UE4功能总结-动画-IK(一)

UE4功能总结-动画-IK(一)

  • 什么是IK?
  • UE4如何实现IK?
  • 官方文档示例的缺点?

什么是IK?

我们平时用到的动画序列(Animation Sequence)都是使用的FK(forward kinematics),也就是前向动力学,原理简单说就是用骨骼的父节点驱动子节点完成动作(或者说子节点的位置需要根据父节点确定),这种方法在应用于骨骼动画时计算简单,节省系统资源,因此游戏中的大多数固定动作都会使用这种方法。但是当我们处理特殊动作(如抓取物体,开门,阶梯上站立)时这种方法就捉襟见肘了,比如在抓取物体时,目标物体的位置一般是不确定的,我们不太可能针对某一个物体专门设计一个动画序列,针对这种就要用IK动画。
IK( Inverse Kinematics),即反向动力学,与FK对应,它是用子节点驱动父节点。它首先确定子节点的位置,然后再通过计算确定父节点的位置。它对于处理特殊动作,尤其是需要根据不同环境做出相应反应的动作,是一种很好的解决方式。

UE4如何实现IK?

关于UE4如何实现 IK官网已经给出了解答,它的实现原理主要有两个方面。
第一个就是其中用到的蓝图节点Two Bone IK,它需要确定用户确定两个位置,一个是Effector,一个是Joint Target。对应于IK的实现原理,Effector的位置可以先理解为目标位置,而Joint Target存在的目的在于,在多个骨骼节点的IK计算中,提供一个唯一的解(Ha, I Can Touch The Ball Anywhere)。
在官方案例中,就是提供一个位置确定确定膝盖的移动方向(What is “Joint Target” in the IK node?,IK节点详解)

UE4功能总结-动画-IK(一)_第1张图片
Two Bone IK节点的属性设置有三点IK Bone(也就是末端骨骼节点),Effector(坐标系),Joint Target(坐标系)。IKBone左右脚分别是foot_l和foot_r,Effector的坐标系是根据在角色蓝图中Effector Location的计算方式确定的,根据计算方式不同选择不同的坐标系,Joint Target也同理,Joint Target Location的值在案例中是通过调试得到的,这个值是相对于一个骨骼(thigh_l的父骨骼)的固定值,可以理解为是相对于角色本身的固定值。

另一点就是Effector Location的获取方式,原理就是在末端节点(foot_l或foot_r)的垂直方向上想地面发送射线,然后根据射线与地面的碰撞点和脚底的距离(D)得到Effector的终点位置(D,0,0),然后在动画蓝图中以每一帧为单位,把Effector从起点(0,0,0)移动到终点(D,0,0),对于终点位置为什么是(D,0,0)而不是(0,D,0)或(0,0,D)可以通过预览窗口上下拖动Effector确定,也可以直接查看骨骼的坐标系:
UE4功能总结-动画-IK(一)_第2张图片

官方文档示例的缺点?

官网案例主要作用是提供一个原理性的示例,因为它有一个缺陷就是检测的范围只限于角色胶囊体内部,因此需要取消和阶梯的碰撞才能达到效果:UE4功能总结-动画-IK(一)_第3张图片
为了解决这个问题,就需要扩大射线检测的范围:
UE4功能总结-动画-IK(一)_第4张图片
具体实现方法可以参考资源商店中的Advanced IK Foot System,我针对这个方案做了一个简化版本,取消了一些相关的优化流程.

你可能感兴趣的:(Unreal,Engine)