Animation Blending 动画绑定
LEPR:在动画的内部,帧与帧直接插值。
Blending:在不同动画之间进行插值。
线性计算Blend插值

- 靠近哪个“信号”,就让其插值重一些。
Blender基础
时间Align
Blend Space 混合空间
1D Blend Space
1D Blend Space 一维混合空间


玩家可以从多个角度向前移动,混合三个片段中的任意角度:
- 左侧方跑片段
- 向前跑片段
- 右侧方跑片段
2D Blend Space
2D Blend Space 二维混合空间
同时改变方向和速度,可以简单地将两个1D混合空间正交放置,得到一个2D混合空间:

delaunay 三角化
侧向跑时,速度可能会慢些,这时可以混合一些侧向运动。
这时可以使用delaunay 三角化:

ASM 状态机
Action State Machine ASM 状态机。
ASM由节点和过渡组成。
Cross Fades
Cross Fades 交叉混合动画的方式有Smooth Transition和Frozen transition两种方式。
不同方式适用范围不同,呈现效果不同。
Cross Fades Curve
Cross Fades Curve 交叉陷阱曲线。

不同的交叉褪色曲线可用于不同的需求,具体看需求。
Layered ASM
比较古老的一个状态机。

角色身体的不同部分同时进行不同的独立的或半独立的动作
Animation Blend Tree 动画混合树
Animation Blend Tree 动画混合树
动画树最原始的就是表达树的思想。
LERP Blend Node
线性插值节点。

Layered ASM in Blend Tree

Blend Tree Node
叶节点可以是Clip、Blend Space或者ASM。
非叶节点可以是Binary LERP blend node 线性插值(LERP)节点、Ternary (triangular) LERP blend node 三角LERP混合节点或者Binary additive blend node 二元加性混合节点。
即中间可以通过混合非常多的东西,使得混合的动画效果达到最好。
Forward Kinematics(FK)

使用运动学方程,通过骨骼(Joint)来计算出身体的各个部位应该是在什么位置。
Inverse Kinematics(IK)
反向动力学。

设置身体部位的位置结果,通过结果来计算每一个骨骼(Joint)是怎么样的。
Two Bones IK
两个Bone约束的IK

大腿和小腿代表三角形的两条边,目标点也确定了,就可以确定一个唯一的三角形,从而得到弯曲的角度。
在三维(3D)空间中,实际就是两个球的解。这个求出的解实际上是一个圆环:

- 表现在人身上就是内八字或外八字都可以。
确定一个人运动的Reference Vector 参考向量,可以确定一个方向:

Multi-Joint IK
多关节“长链”的IK。
求解复杂性:

- 自由度太高,计算的成本太大,因为是高维非线性函数的实时求解。
- 可能有多个解决方案、唯一解决方案或无解决方案
求解目标的可能性:

- 假设把所有骨头拉直,查看能不能到达目标。
Human Skeleton的局限性:
- 人的关节是有一定规律的,并不能随意的旋转,是有一定的活动范围。

制作一个简单的IK可以用到CCD或FABRIK。
CCD
启发式的算法

joint-joint,使未端执行器尽可能靠近目标,解决定向空间中的IK问题
优化:

目标点做一个相对大的一个范围,节点翻到那个大致的范围差不多。后续迭代,就逐步收缩范围。

旋转的时候,设置一个角度上限。
FABRIK
FABRIK Forward And Backward Reaching Inverse Kinematics
向前迭代一遍、向后迭代一遍。

从第一个jointA强行拉到目标点处,再在上一个jointB和这个jointA之间连一条线,将骨头旋转到这个线上去。
骨头长度是固定的,这时肯定会让jointB移动到了新的位置。这时再找jointB的上一个jointC,然后重复。
骨骼约束问题
FABRIKF 带约束
重新定位·可以在每个步骤中执行联合限制,方法是取出所产生的方向,并迫使其保持在有效范围内。
Multiple End-Effectors
Multiple End-Effectors 多目标点
比如攀岩时,手脚等目标点都会不一样,这时就会也很复杂。
Jacobian Matrix
目前主要是采样雅可比矩阵来实现。
用向量来表示joint的旋转移动。对这种高维方程组,可以用梯度来处理。。。

后续的物理系统会专门讲到。
IK挑战
自我碰撞:IK是抽象的计算实现,但是当骨骼外有蒙皮等等,就会有问题。
IK 带有移动过程中的预测:真正去提前预测移动过程的动作改变之类的,是很困难的。
人类的自然行为:目前IK并没有没有考虑动力学的一些规律。
Blending和IK的管道渲染

Facial Animation 面部动画
面部动画
Facial Action Coding System
Facial Action Coding System FACS 面部动作编码系统
一个根据面部特征对人类面部动作进行分类的系统。
把人类常用的表情总结成了48个。
28 Core Action Units
苹果公司提取的28个核心AU
23对称AU分为两种基本动作
基本动作设置根据动画制作要求而有所不同
嘴巴、眼睛等都是对称的,只用记录特定的闭和开即可。
Key Pose Blending
关键表情的叠加。

但是可能会出现一些问题:

Morph Target Animation
存储AU时,存的是这个表情下对应区域相对于neutral pose(中性表情)下的顶点的offset。
骨骼动画表现不是很细腻,所以会用到此技术。
动画重定向
把一个角色的动画,应用到另一个身材比例完全不同的角色身上。
Source Character:动捕采集的原角色。
Target Character:动画要应用的目标角色。

在retarget时,传送的是相对的位置、相对的旋转和相对的放缩。
总结
blending实际连接了gameplay和动画系统。
FK的基础核心系统,能够基础的让人物有一个动画。
环境中的互动,通过IK给角色增加反向的约束,让角色和环境的约束更加自然。
骨骼加上 Morph target animation的方法,实现人物角色表情的精细的动画。
最后就是,当角色的外形、身高体重都会有变化,通过动画的retarget(重定向)来实现动画资产的复用。