Lecture09 Animation System - Advanced
Animation Blending
LERP
- LERP / NLERP / SLERP
- 两个动画clip之间的LERP
权重
eg. 走路与跑步动画,依据运动速度切换 \[ {\rm weight_1=\dfrac{speed_{current}-speed_2}{speed_1-speed_2}}\\ {\rm weight_2=\dfrac{speed_{current}-speed_1}{speed_2-speed_1}}\\ \]
对齐时间线
- eg.走路和跑步的步频不同,怎样对齐混合的帧
- 每一段动画为一步,对每一段动画时间线做归一化
Blend Space
eg. 左右前后走/跑
1D Blend Space: eg. 左走、正走、右走三个动画,根据左右方向的速度插值(可以有分布不均匀的多个动画)
2D Blend Space: eg. 左右前后全部加入2D空间,由动画师指定动画位置
双线性插值
Delaunay Triangulation 常用
- 根据设置的动画点,生成三角形划分
- 在空间内一点,由周围三角形插值
- 插值利用重心坐标
Skeleton Masked Blending
针对只应用于半身或身体局部的动画,实现多种动画的混合 eg.各种姿态下的鼓掌
- 绘制一个Mask,只应用于部分Joints
Additive Blending
eg. 向着摄影机点头
- 存储动画的变化量,在基础动画上叠加一层动画
- 需要非常谨慎,易出现两个动画叠加后产生不自然的运动结果
Animation State Machine 状态机
- 两种核心元素
- Node
- Clip
- Blend Space
- 脚本串接的单套动画系统
- Translation
- 激活条件
- Cross Fade
- Smooth transition 慢慢过渡,插值(各种插值曲线)
- Frozen transition 先停住动画A,再播放动画B
- Node
- 多层状态机
Animation Blend Tree
- 多层状态机在复杂动画中非常复杂
- 用树结构表示动画之间的Blend方式(LERP/Additive),类似表达式树
- 两种节点
- Terminal Node 执行节点 (叶节点)
- Clip
- Blend Space
- ASM
- Non-terminal Node (非叶节点)
- LERP Blend Node
- Additive Blend Node
- Terminal Node 执行节点 (叶节点)
- Layered ASM to Blend Tree
- Blend Tree Control Parameters
- Variable
- 暴露变量,根据变量切换运动状态
- eg. 速度、HP
- Event
- 外部传入激活状态的指令
- eg. 持枪、开枪
- Variable
Inverse Kinematics
- Forward Kinematics 前向传递动画
- Inverse Kinematics 对末端Joint Key动画 eg. 崎岖地面走路,脚步顶点反向传递
Two Bones IK
2根Bone组成三角形的两边
大腿根部的Joint到地面接触点距离为第三边
即可得到两根Bone的夹角 \(\cos\theta=\dfrac{a^2+c^2-b^2}{2ac}\)
问题:在3D空间,解有无数个,构成一个圆
- 设定Reference Vector
- 朝着Reference Vector方向取解
更多复杂的IK
- Look At
- Hand
- Foot
- Full Body
Multi-Joint IK Solving
- 更多种可能性
- 首先检查是否能到达目标(最长、最短的触及范围)
- 最长(拉直)
- 最短(最长的单根Bone减去其他Bone)
- 约束 Constraints 关节有运动的约束,不能超出约束范围(比如依据人体的骨骼结构)
- 解法
- CCD, Cyclic Coordinate Decent
- 逐个Joint遍历,每个Joint朝下一个Joint与目标点连线方向旋转
- 上述过程反复迭代,不断接近结果
- 优化:
- 每次旋转时,使用Tolerance region进行缩小或限制
- 越靠近根节点的限制越大,运动幅度越小(处理约束同理)
- FABRIK, Forward And Backward Reaching Inverse
Kinematics
- 逐个Joint遍历,每个Joint朝目标点或上一个Joint位移,再将Bone还原设定下一个Joint
- 从末端Joint出发、从Root出发反复迭代
- 同样需要Tolerance优化
- 处理约束:将约束区域投影到Target所在平面,取可运动到的点
- CCD, Cyclic Coordinate Decent
IK with Multiple End-Effects
eg. 爬墙、攀岩灯多个目标点的IK
利用Jacobi矩阵求解:
其他解法
- 基于物理的解法
- PBD, Position Based Dynamics
- Fullbody IK in UE5 (XPBD, Extended PBD)
IK的挑战
- 蒙皮后的自我穿插、交叠
- 对环境的感知
- 更自然的人类行为,例如平衡
- 基于数据的、AI的方法
Animation Pipeline with Blending and IK
Facial Animation
Facial Action Coding System
- 把表情分成46种,并进行编码
- 多种表情可以进行组合
- Apple归纳了28个核心的表情,其中有23个是有对称性的,可以压缩
- 混合时如果线性叠加:合到一起后效果折半 -> 存储表情相对于“Neutral Face”的Offset,实现Additive Blending 即Morph Target Animation
Morph Target Animation
Facial Skeleton
骨骼非常复杂
UV Texture Facial Animation
简单用贴图实现
Muscle Model Animation
前沿研究,如果运动脸部肌肉(影视行业开始使用)
Animation Retargeting
Skeleton Retargeting
- 把同一个骨骼动画应用到不同角色
- Source Character + Target Character Source Animation + Target Animation
- 两幅骨骼比例、位置不同 -> 一一对应
- 保持Binding Pose的旋转,Retarget相对运动,而不是绝对运动
- Translation和Scale动画:考虑Bone的长度之比,进行动画的放缩
- 问题:腿部不同长度时出现浮空
- 以Pelvis到地面的距离之比为放缩比例,对动画、移动速度做放缩
- Foot IK
- 离线方法完成
- 对不同骨骼结构的Retargeting
- 以骨骼名字做对应
- 把有对应骨骼之间的部分做归一化
- 问题:
- 角色的自穿插
- 有语义动作偏移带来语义偏移,例如鼓掌动画,Retargeting后掌合不起来
Morph Animation Retargeting
eg. 表情动画 + 直接存储的是相对于Neutral Face的相对位移,直接Apply到Target上 + 有语义动作 eg. 闭眼,眼睛大小不同时,直接Apply可能无法闭上 + 增加约束条件 eg. 闭眼动画限制眼睛必须闭上 + 手动调整,利用拉普拉斯算子计算,拉眼睑使相近脸部一起运动