GAMES104 09.高级动画技术:动画树、IK和表情动画
动画混合
Math of Blending: LERP
Calculate Blend Weight
Align Blend Timeline 把两个循环动画时间归一化,要求动画师对齐两组动画中的关键点。
如果align或者插值没做好,容易出现滑步。
混合空间
1D Blend Space
2D Blend Space
在真实世界中,低于或高于某个阈值后
所以我们使用 delaunay(三角化)
,选择临近的三个动画进行插值。
Skeleton Masked Bleding
有些动作只会影响上半身或者下半身,通过 mask(遮罩)
实现。
Additive Blending
我们只存下动画的变化量,而不是绝对量,这样就可以直接叠加上其他效果。
容易出现反常情况。
动作状态机
Cross Fades
效果是动图,请去视频里看🔗
- no cross fade
- smooth transition
- frozen transition
Curve
这下剪视频的时候知道效果都长啥样了
多层次状态机
角色身体的不同部分由不同的层次进行控制。
动画混合树
basic
是表达式树。
是多层次状态机的超集。
LERP
- 二叉树只有01两种权重
- 多重输入的话,权重需要手动输入
Blend Tree Control Parameters
节点搜索(Node Search):提供一种方式,让高层代码可以在树中找到混合节点(blend nodes)。
命名变量(Named Variable):允许为每个控制参数赋予名称。控制代码可以通过名称查找控制参数并调整其值。
控制结构(Control Structure):一种简单的数据结构,包含整个角色的所有控制参数。Blend Tree 中的节点与特定的控制参数相连接。
Inverse Kinematics(IK技术)
Forward Kinematics正向运动学: 是在给定所有关节角度的情况下计算链接结构(如一节人体的关节)的末端的空间位置的过程。这个过程比较简单,且是具有唯一解的
Inverse Kinematics反向运动学: 它是在给定末端的空间位置的前提下,求解关节需要成多少角度。 这个过程就较为困难,一般情况下,逆运动学问题没有解析解,而是会有很多或无限多个解(比如确定一个手的位置,然后反向去算其他joint的位置)
Two Bones IK
已知大小腿长度、脚到胯的长度,就可以确定多个三角形,此时引入物体的前进向量,就可以得出唯一三角形。
Mutil-Joint IK
多 joint
的IK是个高维非线性方程,非常难以求解,且无法保证是否有解。
- 是否有解
- 拉直所有joint
- 从最长的一段两侧,向内折,如果比最长的短,就会有一段盲区
算法
CCD(Cyclic Coordinate Decent)
末端节点不断尝试靠近目标点,多次迭代。
优化方式:
带toloerance regions的CCD:在这种方法中,每个骨骼目标点附近都有一个容差区域(绿色圆圈)。当骨骼达到该容差区域时,就停止旋转并开始移动到下一个骨骼。这种方式能让骨骼不必完全达到目标点,只需进入容差区域即可,因此动作看起来更自然、柔和。
角度限制:在每个骨骼上施加角度限制(图中的绿色区域),限制骨骼旋转的角度范围,防止旋转过度。这种方法让骨骼在小范围内移动,逐步接近目标点。
FABRIK(Forward And Backward Reaching Inverse Kinematics)
演示动画🔗
要点是保持骨骼长度不变,仅移动关节位置。
正向到达:从末端关节开始,逐个向目标靠近。
反向到达:从根部固定起点,逐步调整到末端。
FABRIK with Constraints
根据约束的转动范围和目标点,做出一个垂直平面或垂线 $x$ ,关节在 $x$ 上的投影与目标点连线 $y$ , $y$ 与转动范围的交点即是新位置。
Other IK Solutions
IK with predication during moving
现实中,人物做出一些动作之前,会进入预先准备姿态。通过布置区域来提前判断。
Animation Pipeline with IK
面部动画
Blend Facial Animation(基于骨骼)
两种动画做简单的叠加会出现异常,动画保存的应该是基于 neutral face
的增量,这样进行动画叠加就是我们想要的效果。
UV Texuture Facial Animation
对表情贴图进行变换。
动画重定向
Ignore Offset Between Source and Target Joints
忽略不同骨架之间的offset,apply的是相对于binding’s joints 的相对位移。
Align Movement by Pelvis Height
因模型之间身体比例并不一样,会出现人物走路时身体浮空或遁地。
所以我们根据盆骨高度来对齐,由两者之间的盆骨高度比值进行比例调整。
Retargeting with Different Skeletoon Hierarchy
动图🔗
把两条骨骼都归一化,用目标骨骼的投影作为截距,在模板骨骼上截出两点并连线,则是新的骨骼。