GAMES104-09:动画:动画树、IK、表情动画
九、动画:动画树、IK、表情动画
9.1 动画混合:LERP
在不同动画内,各取一帧,进行插值
9.1.1 计算混合权重
9.1.2 对齐混合时间线
- 将动画的时间归一化
- 对于走和跑的两个动画,保证:0-没有动,0.25-抬左脚,0.5-放左脚,0.75-抬右脚,1.0-放右脚
9.2 混合空间
9.2.1 1D混合空间
- 可以有多个动画,通过一个变量进行混合
- 并且动画切换的密度也不一定是均匀的
9.2.2 2D混合空间
- Delaunay三角化:根据给定的多个顶点,生成空间的三角形划分
- 根据速度&方向两个值,确定二维空间上的唯一点,选择临近的三个动画,通过重心坐标的方法进行插值
9.2.3 Skeleton Masked Blending
通过mask,控制动画影响的关节
9.2.4 Additive Blending
动画只影响局部关节,且只保留变化量,在原有骨骼之上添加额外的transform
叠加动画可能回调导致非正常的骨骼结果
9.3 动画状态机 ASM Animation State Machine
9.3.1 ASM的定义
ASM的节点:
- 可以是一个动画,也可以是混合空间,还可以是动画树
- 要求节点的产出必须是一个pose
状态过渡:
状态过渡时的Fade:
- Smooth Transition:两个动画进行插值
- Frozen Transition:上一个动画停止,下一个动画逐步进入
9.3.2 Layered ASM
分为不同层,控制角色的不同部分
9.4 动画混合树
9.4.1 混合树
9.4.2 混合节点
9.4.2.1 LERP混合节点
二通道插值:一个权重,控制两者比例
多通道插值:通常需要自己定义动画各自的比例
9.4.2.2 Additive混合节点
9.4.2.3 混合树节点
叶节点:动画、混合空间、动画状态机
中间节点:LERP混合节点、Additive混合节点
9.4.3 混合树控制参数
- 混合树上要暴露大量的控制参数,由Game Play控制不同节点的混合、状态机
- 可以通过事件控制参数的改变
9.5 IK技术
9.5.1 基本概念
End-Effector:希望被移动到目标位置的末端关节
IK:给定end-effecto的期望位置,反向求解骨骼的变换
FK:给定骨骼的变化,计算end-effector的位置
9.5.2 Two Bones IK
- 大腿和小腿两根骨头 => 三角形的两条边
- 脚的位置/地面的位置 => 目标点
- 大腿根部到目标点的距离 => 三角形的第三条边
根据三角形的三条边边长,可以唯一确定一个三角形,从而求解出大腿、小腿各自的旋转
上述算法解出的实际上是一个圆环
通过额外给定一个reference vector,确定是圆环上的哪个点
- 通过reference vector、大腿和目标点的连线,确定一个平面
- 平面与圆环求交,得到两个交点
- 通过向量点乘,确定哪个点是正向的,哪个点是反向的
9.5.3 多关节IK计算
9.5.3.1 可达性判断
9.5.3.2 关节约束
9.5.3.3 CCD:Cyclic Coordinate Decent
- 将最末端的关节,向上一个关节与目标点的连线方向旋转,逐步旋转所有关节
- 重复上述步骤,直到每一次旋转几乎不变
9.5.3.4 优化CCD
- 旋转时不需要要求骨骼一定要到达目标位置,只需要到达一个范围即可 or 设置旋转角度上限
- 每次迭代逐渐缩小范围
9.5.3.5 FABRIK:Forward And Backward Reaching IK
Forward:
- 从End-Effector开始,把第一个关节强行拉到目标点
- 根据上一个关节点的原有位置,与当前关节点连一条线,将骨骼旋转到连线上
- 骨骼的另一端即为下一个关键点的目标位置
- 重复上述步骤,直到根节点为止
- 此时会由于凑关键点位置,导致根节点移动,需要通过Backward解决
Backward:
- 从根节点开始,将根节点拉回到原点
- 依次移动对应骨骼和另一端的关节点,直到拉到End-Effector
重复Forward和Backward,直到End-Effector非常接近目标点
骨骼约束:将目标点投影到约束的平面,得到新的目标点,然后再移动骨骼
9.5.4 多End-Effectors
9.5.4.1 Jacobian Matrix
通过雅可比矩阵,逐步逼近目标点
9.5.5 其他IK解法
9.5.6 IK的问题
- IK会认为骨骼是没有体积的,从而导致解出的骨骼由穿插
- IK无法预测环境
- IK解出的解不考虑平衡重心等问题
9.5.7 添加IK之后的动画Pipeline
9.6 面部动画
9.6.1 表情由复杂的肌肉系统驱动
9.6.2 面部动作编码系统 FACS
9.6.3 28个核心AU
9.6.4 关键姿势混合
实际存储的是某一个表情对应中性表情的offset
9.6.5 UV Texture Facial Animation
用纹理表达面部表情
9.6.6 Muscle Model Animation
通过46个实际肌肉控制面部运动
9.7 动画重定向
9.7.1 相关术语 Terminology
9.7.2 重定向的方法
骨骼一根对一根,忽略位移项
应用每一帧相对binding pose的位移,而不是绝对值
把source character的
- 旋转动画:直接应用到target character上
- 平移动画:考虑骨骼的相对长度,等比例放缩
- 缩放动画:直接应用到target character上
通过Pelvis高度对齐运动
- 通过最初的腰眼离地的距离,等比例缩放运动速度
重定向之后,通过IK将脚锁死在地上
通常是使用离线算法,进行重定向的计算
9.7.3 不同骨骼结构之间的重定向
- 找到不同骨骼结构之间,对应的骨骼
- 将骨骼归一化到[0, 1]之间,然后进行插值
9.7.4 未解决的问题
- 骨骼穿插问题
- 由于骨骼大小不一样,导致的效果不佳,如鼓掌等语义动作
- 目标角色的平衡
9.7.5 Morph Animation重定向
- 不同face使用相同的拓扑结构
- 存储顶点的相对位移
- 应用重定向后,强制将某些顶点移动到目标位置,然后用拉普拉斯算子计算剩下的顶点
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 华风夏韵!
评论