高级动画技术:动画树、IK与表情动画
June 25, 2023About 11 min
高级动画技术:动画树、IK与表情动画
动画混合 Animation Blending




- 若插值的两个循环Clip的频率不同,需要先把这两个Clip先进行归一化。
混合空间 Blend Space

- 1D Blend Space混合采样点的数量并没有限制,采样点也可以是非均匀分布的

- 所有参与的动画Clips都要求是循环的

- Delaunay Triangulation:
根据顶点生成空间的三角形划分,通过参数的位置定位到二维空间的唯一点。
然后选择临近的三个动画Clips, 通过重心坐标在三个顶点进行插值。


- 添加骨骼的Mask, 让动画只应用到上半身或下半身方便混合

- 在动画clip里只影响skeleton的局部,而且只存储动画的变化量。
这样可增加一个插分量作为额外影响

- 问题:破坏状态 Broken case — 加入额外影响后超过了阈值
动画状态机 Animation State Machine(ASM)


- 动画状态机是通过节点变化的,节点可以是复杂的类型
- 动画状态机的核心是一组循环输出动画的Nodes,满足条件就从NodeA切换到NodeB.

- Smooth transition: 动画过渡时,动画1贡献越来越少,动画2贡献越来越多
- Frozen transition: 动画过度时,动画1切换到动画2时动画1先停住,动画2基于动画1逐渐进来

- 信号插值的变化曲线

- UE的动画系统很灵活,可以自由嵌套和组合

- 经典的多层次动画状态机 --- 鬼泣5
- 角色的上半身有复杂的状态机表达受击,攻击等等
角色的下半身根据玩家的controll去控制
动画混合树 Animation Blend Tree

- 动画树是一个可单项展开的树,而不是图,始终会有一个流出的节点

- 上图的多通道的线性插值需要单独输入每个Clip的权重


- 动画树是Layered ASM的超集,它可以很好地表达多层次动画状态机

- 动画树是一个递归结构,最终只输出一个节点就可以了


- 动画树最核心的部分是需要定义它的控制变量
- 这些控制变量决定了树的混合行为,类似于流水管道的控制阀门


- 虚幻通过变量和Event信号去控制动画蓝图
反向动力学 Inverse Kinematics(IK)
角色的动画会受到环境的约束,这就是IK的应用场景

- 应用场景:确保移动时脚和地面贴合

- 最简单的解决方案:
大腿和小腿以及目标点确定一个三角形
通过三角函数可以算出大小腿的旋转角度

- 问题:当给定约束点和大小腿的两根骨骼时,它的解空间是两个球的交点面,一个圆环。
--- 如上图左下,圆环上任意一个点都是符合约定的。

- 解决方案:添加reference vector指定腿的朝向,然后通过朝向去求解最终点


- 实际的IK应用场景会涉及到多根骨骼的处理,这就是长链条的IK处理

- 首先要判定长链条是否能够达到目标点

- 人的关节在不同位置的约束不同,有特定的活动范围

- 通过启发式的算法去解决长链条的问题

- CCD算法的思路是不断地尝试向目标点翻转


- 在目标点设置一个大的范围,每次翻转收缩这个范围。
通过类似弹簧接近目标点的原理。 - 越靠近根节点的旋转幅度越小—总体的势能往偏小的方向变化的原则
CCD的约束就是骨骼动的时候不超过某个约束

FARRIK 算法
- 从端点开始把joint强行拉到目标点
- 然后把它的上一个joint和链接点重新连线,并更新到正确的相对位置
- 最后根节点会脱离原始位置
- 然后把原始的根节点作为目标点这样反复迭代–需要许多次迭代

- 通过约束范围和约束点生成垂直平面去移动


- 许多动画会受到多个IK约束
- 比如在攀岩的时候需要约束的IK就达到3个以上


- 长链条每个轴的端点位置是随着旋转变化的
- 通过趋向性去求解,每次变化很小的角度逐渐逼近目标点

- 经典解法,运算比较费




- 动画的Post-Processing主要就是指的IK计算
面部动画 Facial Animation


- 人类的面部肌肉群提供非常细密和丰富的表情


- 从右侧的图可以看到喜欢到嫌弃的表情变化, 五官的变化很小.

- 电影工业归纳了人类常见的46种表情单元(AU)

- AU可以组合成新的表情



- 在做表情混合时,简单的叠加可能会带来问题,一半的需求是做局部叠加

- 真实存储AU的时候只是保存这个表情下它的区域相对neutral face的顶点偏移
- Morph Target Animation就是通过叠加这个偏移完成的

- 也可以通过一系列的纹理变化应用到角色上,适合卡通动画

- 前沿的研究,真实通过43块肌肉运动表达表情
- metaHuman通过相机拍摄去解构表情
动画重定向 Animation Retargeting


- 动画重定向的术语

- 通过骨骼一一对应,忽略所有的位移项

- 动画应用的时候要使用相对变换去计算

- 旋转动画依次应用到骨骼上
- 平移动画计算波及骨骼的相对长度等比例放缩
- 缩放动画直接等比例变化

- 大腿小腿身高不一样直接应用会出现双脚浮空的问题
- 简单的解决方法是把角色腰线连接到地面确定身高,播放角色动画按等比例算它的位移
- 角色走的速度和腰眼离地高度成正比

- 大腿关节距离不同,所以还需要先通过IK去锁定到地面

- 需要解决骨骼不同时候的重定向问题(主骨骼线相似)

- 根据骨骼名字找对应,发现它们的共同骨骼,定义它们共同骨骼的类似关系
- 把两个名字相同骨骼中间部分看成一个映射(01),整体归一化到01的范围,然后进行插值,如上图

- 自我穿插的问题,不同肩宽导致无法合拢的问题


- 脸部变形动画也支持Retargeting
- 需要特别处理在差异很大的脸型让眼睛和嘴巴可以闭合
- 拉普拉斯算子可以帮忙把关联的粒子拉到一起
