GAME104第九节

Animation Blending 动画绑定

LEPR:在动画的内部,帧与帧直接插值。

Blending:在不同动画之间进行插值。

线性计算Blend插值

image-20241107150523552

  • 靠近哪个“信号”,就让其插值重一些。

Blender基础

时间Align

Blend Space 混合空间

1D Blend Space

1D Blend Space 一维混合空间

image-20241107151117225

image-20241107151121792

玩家可以从多个角度向前移动,混合三个片段中的任意角度:

  • 左侧方跑片段
  • 向前跑片段
  • 右侧方跑片段

2D Blend Space

2D Blend Space 二维混合空间

同时改变方向和速度,可以简单地将两个1D混合空间正交放置,得到一个2D混合空间:

image-20241107151205468

delaunay 三角化

侧向跑时,速度可能会慢些,这时可以混合一些侧向运动。

这时可以使用delaunay 三角化:

image-20241107151346980

ASM 状态机

Action State Machine ASM 状态机。

ASM由节点和过渡组成。

Cross Fades

Cross Fades 交叉混合动画的方式有Smooth Transition和Frozen transition两种方式。

不同方式适用范围不同,呈现效果不同。

Cross Fades Curve

Cross Fades Curve 交叉陷阱曲线。

image-20241107153905360

不同的交叉褪色曲线可用于不同的需求,具体看需求。

Layered ASM

比较古老的一个状态机。

image-20241107154200314

角色身体的不同部分同时进行不同的独立的或半独立的动作

Animation Blend Tree 动画混合树

Animation Blend Tree 动画混合树

动画树最原始的就是表达树的思想。

LERP Blend Node

线性插值节点。

image-20241107154458662

Layered ASM in Blend Tree

image-20241107154603671

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)

image-20241107160010908

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

Inverse Kinematics(IK)

反向动力学。

image-20241107160002269

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

Two Bones IK

两个Bone约束的IK

image-20241107160119172

大腿和小腿代表三角形的两条边,目标点也确定了,就可以确定一个唯一的三角形,从而得到弯曲的角度。

在三维(3D)空间中,实际就是两个球的解。这个求出的解实际上是一个圆环:

image-20241107160324012

  • 表现在人身上就是内八字或外八字都可以。

确定一个人运动的Reference Vector 参考向量,可以确定一个方向:

image-20241107160455625

Multi-Joint IK

多关节“长链”的IK。

求解复杂性:

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

求解目标的可能性:

  • image-20241107160911334
  • 假设把所有骨头拉直,查看能不能到达目标。

Human Skeleton的局限性:

  • 人的关节是有一定规律的,并不能随意的旋转,是有一定的活动范围。
  • image-20241107161021273

制作一个简单的IK可以用到CCD或FABRIK。

CCD

启发式的算法

GIF 2024-11-7 16-32-59

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

优化:

image-20241107162318104

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

image-20241107162606670

旋转的时候,设置一个角度上限。

FABRIK

FABRIK Forward And Backward Reaching Inverse Kinematics

向前迭代一遍、向后迭代一遍。

FABRIK

从第一个jointA强行拉到目标点处,再在上一个jointB和这个jointA之间连一条线,将骨头旋转到这个线上去。

骨头长度是固定的,这时肯定会让jointB移动到了新的位置。这时再找jointB的上一个jointC,然后重复。

骨骼约束问题

FABRIKF 带约束
重新定位·可以在每个步骤中执行联合限制,方法是取出所产生的方向,并迫使其保持在有效范围内。

Multiple End-Effectors

Multiple End-Effectors 多目标点

比如攀岩时,手脚等目标点都会不一样,这时就会也很复杂。

Jacobian Matrix

目前主要是采样雅可比矩阵来实现。

用向量来表示joint的旋转移动。对这种高维方程组,可以用梯度来处理。。。

image-20241107164833264

后续的物理系统会专门讲到。

IK挑战

自我碰撞:IK是抽象的计算实现,但是当骨骼外有蒙皮等等,就会有问题。

IK 带有移动过程中的预测:真正去提前预测移动过程的动作改变之类的,是很困难的。

人类的自然行为:目前IK并没有没有考虑动力学的一些规律。

Blending和IK的管道渲染

image-20241107170034863

Facial Animation 面部动画

面部动画

Facial Action Coding System

Facial Action Coding System FACS 面部动作编码系统

一个根据面部特征对人类面部动作进行分类的系统。

把人类常用的表情总结成了48个。

28 Core Action Units

苹果公司提取的28个核心AU

23对称AU分为两种基本动作

基本动作设置根据动画制作要求而有所不同

嘴巴、眼睛等都是对称的,只用记录特定的闭和开即可。

Key Pose Blending

关键表情的叠加。

image-20241107170922748

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

image-20241107170935682

Morph Target Animation

存储AU时,存的是这个表情下对应区域相对于neutral pose(中性表情)下的顶点的offset。

骨骼动画表现不是很细腻,所以会用到此技术。

动画重定向

把一个角色的动画,应用到另一个身材比例完全不同的角色身上。

Source Character:动捕采集的原角色。

Target Character:动画要应用的目标角色。

image-20241107173003033

在retarget时,传送的是相对的位置、相对的旋转和相对的放缩。

总结

blending实际连接了gameplay和动画系统。

FK的基础核心系统,能够基础的让人物有一个动画。

环境中的互动,通过IK给角色增加反向的约束,让角色和环境的约束更加自然。

骨骼加上 Morph target animation的方法,实现人物角色表情的精细的动画。

最后就是,当角色的外形、身高体重都会有变化,通过动画的retarget(重定向)来实现动画资产的复用。