本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。
工程文件: 玩转UE4(GitHub)
0. 效果演示
用ControlRig实现惯性倾斜
文章目录
1. 前言
1.1 关于Control Rig以及Fullbody IK
关于Control Rig以及Fullbody IK的简要说明以及一个实现足部IK的案例,请见《[玩转UE4/UE5动画系统>Control Rig篇] 之 Control Rig + Fullbody IK版的足部IK实现(附项目代码)》
1.2 惯性倾斜的传统实现方法:叠加动画法
从上面演示视频的惯性倾斜的关闭和开启对比中,我们可以看到惯性倾斜,由两大部分组成:地面和空中。
我们先以突然退步跑为例解释一下地面部分的效果。下图中,A是角色的Idle动画状态,B是角色退步跑的动画状态(原始动画提供的状态),这里的倾斜叠加就是要生成一个C状态,当角色"突然"退步跑时,在瞬时加速度的作用下先由A状态到C状态,速度稳定后再回到B状态。
注意: 影响惯性倾斜的是加速度而不是速度
空中部分相对简单,B是跳跃动画原始状态,A是角色叠加了起跳前倾斜角度的状态,角色跳到空中会忽略空气阻力的话,在惯性作用下会保持着这个角度。
总而言之,惯性倾斜就是让角色的运动通过倾斜来体现一点惯性的感觉。虽然效果很细微,但是还是可以让动画更生动。
老王在《[玩转UE4/UE5动画系统>应用篇>功能模块] 之 倾斜叠加(Lean Additive)(ALS V4实现方案详解)》(下文简称为:叠加动画法)一文中介绍过惯性倾斜的传统实现方法,该方法的关键就是先用正常体位/前倾/后倾/左倾/右倾五个动画资源构造出一个混合空间,在动画蓝图中计算出加速度来对混合空间定位,然后把混合空间叠加到当前动画上。
那么叠加动画法的缺点就先显而易见了:
- 需要很多额外的动画资源。
- 对于倾斜幅度的控制非常不灵活。
2. Control Rig法
有了Control Rig实现方法就灵活且简单多了。本例实现方法的关键就使用Fullbody IK在运行时动态实现身体的倾斜,而且Control Rig绑定的方法不唯一,简直是太方便了!
2.1 地面运动的惯性倾斜实现
2.1.1 Control Rig绑定
使用头部(head_ctrl)、小腿(calf_l_ctrl和calf_r_ctrl)三点构造出一个 Fullbody IK。之所以把西面的IK固定点放在小腿而不是足部,我希望在倾斜时,小腿以下尽可能保持原动画姿态。
头部IK,以前游戏和动画开发中应该很少用到这个IK吧!
2.1.2 Forwards Solve
Step 1:插值计算当前倾斜偏移量
相较于叠加动画法,本例中插值计算也放到Control Rig中。个人觉得以后能放到Control Rig中的计算就尽量放,这样更便于模块化,虽然Control Rig目前还不能用C++开发,但以后肯定会实现的。
Step 2:先还原head_ctrl然后根据当前CurrentLeanAmount进行偏移
Step 3:足部控制器取动画中的位置
Step 4:Fullbody IK
2.1.3 在动画蓝图中计算角色地面运动的加速度
本部分逻辑和叠加动画法一样,只不过把插值部分移到了Control Rig中。
2.1.4 在动画蓝图中使用Control Rig
相较于叠加动画法,可以非常方便地控制倾斜幅度。在地面运动中,使用Weight_Gait动画曲线对Idle/走/跑赋以不同的权重系数。
2.2 空中运动的惯性倾斜
2.2.1 Control Rig绑定
和地面运动很相似,只不过把下面的IK固定点放到了脚部
2.2.2 Forwards Solve
Forwards Solve逻辑和地面运动也是相同的
2.2.3 在动画蓝图中计算角色在空中的加速度
本部分逻辑和叠加动画法一样,只不过把插值部分移到了Control Rig中。
2.2.4 在动画蓝图中使用Control Rig
轻松集成到动画蓝图。
3. 小结
我们可以看到,和叠加动画法相比Control Rig法有很多优点:
- 无须额外的动画资源。
- 更加灵活简单的控制。
- 更好的扩展性以及更多的可能。
- 更方便移植和复用。
- 再加上之前足部IK的教程,我们可以看到,以前很多功能的实现都使用着完全不同的技术手段,有了Control Rig就可以使用相对统一的方法实现了。
缺点:
Fullbody IK运算量较大,具体项目中酌情使用。
参考
本文参考了Advanced Locomotion V4 。