Lecture 09
reference
Animation Blending 动作融合
不同的动作通过LERP进行插值。
Blend Space
包括1D的和2D的。
但是动画素材在采样空间(Blend Space)上的分布其实是不均匀的,比如侧向走到侧向跑,其实很快就进入到跑步的一个过程里去了。所以为了更真实的表达,会加入很多动画,但是在计算的时候,好多一起做blend,代价会比较大,所以用Delaunay三角空间。
每次做Blend时候,选择临近的三个节点做重心坐标。
Skeleton Masked Blending
在引擎(Unity)里面做类似这样的效果,就可以在Blend Tree处多加几个Layer,每个Layer控制不同的部位,做出对应的动作。
Additive Blending
在原有的Animation Clip里引入新的动作,生成不同的动作,就叫Additive Blending;可能会带来意想不到的错误,所以尽量少用。
Animation State Machine (ASM)
有了动画之间的融合Blending之后,不同的动画片段该怎么控制呢?
比如对于起跳而言,我们一般是拆成三步来做,分别是“起跳——在空中——着地”,对于有多个状态连起来构成的动作,我们用动画机来做。
ASM的定义
ASM包括nodes和transitions。nodes包括Blend Space,即融合动作的空间,和动画片段;transition包括出入节点、持续时间和曲线。
Fades
动画之间的fade可以是smooth的,也可以是frozen的。比如跑步起跳,可以是跑步的贡献越来越少,逐渐跳起,也可以是站住不动,起跳的。
Animation Blend Tree(动画树)
结构化的、分layer的ASMs和操作。类似表达式树:
动画树里的非叶子节点,是通过子节点运算、插值得到的。
Inverse Kinematics(IK)
比如在地面上走路,没有IK就只能穿模行走。
Two Bones IK
但是IK可能得到很多结果,通过一个参考向量。如下是通过参考向量得到平面,确定了唯一的位姿。
IK的问题
IK还有很多问题亟需解决。
IK的问题有很多,其中最首先可以解决的是,判断一个物体够不够得到。
人类的骨骼是很复杂的。
IK的优化
CCD (Cyclic Coordinate Decent)
FABRIC (Forward And Backward Reaching Inverse Kinematics)
Jacobian Matrix
Other IK Solution
IK is still chanllenge
在做IK的时候,是把骨骼当成理想线,但实际上加上蒙皮之后,模型应该是有厚度的,这点需要考虑进去;
还要就是IK在运动的时候,引入预测,即预先知道要做什么,身体做出反馈;在很多游戏里其实是基于距离的检测,比如当玩家靠近山洞的时候,半弯腰。
Facial Animation
Key Pose Blending
FACS In Morph Target Animation
引入Morph,存放不同的面部表情中,相对于标准脸的顶点的偏移。
UV Texture Facial Animation
使用一系列的2D纹理呈现面部表情。
基于真实面部肌肉的表情模拟
Animation Retargeting
动画重映射:在不同角色间共享动画。
忽视了不同角色本身骨骼的不同,保存的是每个骨骼相互之间的偏移量,所以原本驼背的角色不会因为用了笔直的角色的动画而变得笔直。
动画重映射还有问题是角色体型、服装可能会导致穿模,且有些动作的语义(比如拍手)不能完美复刻。