Animation Blending
两个动画衔接
Math of blending:LERP:线性插值
在两个动画之间取关键帧插值
weight1+weight2等于1
两个动画必须都是循环的,归一化之后能一致
Blend Space
在采用空间里的所有动画(clips),必须保持一致循环性,要么都循环,要么都不循环
混合空间的采样点分布是不均匀的,如果在某个地方需要更细腻的表达,可以在对应地方增加一个clips
并非采用全部的clips,根据划分的三角形。通过重心坐标,在邻近的三个顶点插值
有些动画只应用到上半身,有些动画只应用到下半身。如此自由的组合各种上下半身的动画pose
只存动画的变化量,不存绝对量。无论如何改变skeleton,再改变的基础上应用变化量。
三种blending:
线性Lerp Blending:全身
Mask Blengding:局部
Additive Blending:blending做完后,加上的修饰的差分量
状态机:
frozen模式会先将动画1停住,再让动画2进来
多层状态机,不同的状态机控制模型的不同部位
Animation Blend Tree:动画树
线性插值节点:对每个clips单独输入权重
动画树的核心:定义控制变量,暴露给gameplay系统。(例如速度,朝向,是否受到攻击。。。)
控制变量会改变动画树的混合行为
控制:1.各种环境参数(速度,血量。。。) 2.事件。当event发生时会修改掉一些动画树内部的标记(类的私有变量)(切换武器)
一般动画,是从根节点往前一层层传递驱动
反向动力学:有约束条件的反向解,例如手抓住一个点。
End-effector:末端效果器。
例如:移动时踩的非平地,有各种凹凸,希望保持脚始终踩在地上。会有两个Bones IK,模型的小腿和大腿,确定三角形的两条边,踩的目标点位置确定,可以算出距离根节点的位置(第三条边)。确定唯一的三角形。算出大腿和小腿迈出的角度
最后需要一个reference vector,确定方向。否则三角形360度旋转都是正确解
不同的IK
长链IK有多种解
判断骨骼能否到达目标点。1:所有骨骼拉长,向外判断target,2:选出最长的骨骼,其余向内,判断向内target
每个骨骼活动的范围也有限制
CCD算法
CCD优化
FABRIK
Retarget
源角色和目标角色,源动画和目标动画
骨骼一一对应。
传递骨骼变化的相对量
平移,缩放根据骨骼长度等比例变化