Keyframe Animation(关键帧动画)

  • 动画流程:给出关键帧并通过算法补充中间的动画

image.png

Interpolation

  • 给定一系列关键点,计算关键点之间的点的值是多少——找f(x)映射:
    1. 关键点间的值:内插
    2. 关键点外的值:外插

image.png

Stepped Interpolation

image.png

  • 阶梯差值缺点:不够平滑,函数不连续

Linear Interpolation

image.png

  • 线性插值缺点:运动的时候可能突然改变速度(C1不连续),函数光滑性不够,C0连续

  • 解决方法:需要非线性的插值

Polynomial Interpolation(多项式插值)

  • 如果用单一的多项式进行插值,则有多少点就需要多少方程

image.png

  • 可以写成矩阵形式用待定系数法求解:

image.png

  • 问题:高次项有龙格现象:高次项插值虽然插值过所有点,曲线光滑,但是抖动幅度很大

image.png

Spline Interpolation

  • 使用一阶的样条进行插值:类似于线性插值

image.png

  • 常使用三次样条进行插值(Cubic Splines):

image.png

  • 使用待定系数法求解:上例有 N 个段,4N 个未知参数,加入一些约束求解:

image.png

  • 可以写成矩阵求解,但是这个矩阵很大,而且由于矩阵没有分块“牵一发而动全身”,每个参数都会产生全局影响

Cubic Hermite Splines

  • 只保留第一项约束,去掉其他约束

image.png

  • 由于约束不够因而有多解,可以在端点位置加以约束从而用待定系数法求解:
    1. 端点的值必须等于给定值
    2. 端点的导数必须等于给定值

image.png

image.png

image.png

  • 可以将其分解为两个矩阵,左矩阵是常数矩阵,右矩阵是需要给出的参数

image.png

  • 将这几个多项式命名为Hermite多项式,可得左矩阵是Hermite矩阵,右矩阵是需要给出的参数:

image.png

Catmull-RomSpline

  • Cubic Hermite Splines需要给出端点的值和端点的导数的值,导数的值可以加以约束,如导数的值是端点间连线的导数值

image.png

Interpolation of Rotations

  • 旋转表示的几种形式:

image.png

  • 其中旋转矩阵无法插值,欧拉角、轴角表示和四元数可以进行插值,但是旋转速度不恒定

SLERP for Quaternions

image.png

Interpolation in a 2D space

  • 在2D空间上插值得到曲面而非曲线

image.png

  • 在2D平面上给出一系列点,用不同颜色表示,问题:给出一个新的点,求点的颜色

Bilinear Interpolation

image.png

image.png

Barycentric Interpolation

  • 通过重心坐标来求不同插值的权重

image.png

Blend Space

  • 2D空间上插值的一个线性形式:可以先将平面中划分为三角形,再从三角形内部使用Barycentric Interpolation

image.png

Scattered Data Interpolation

  • 不希望线性插值,希望有非线性性质。若给出的点是随机散步在平面上,则可以使用散点插值,插值出形状

image.png

Radial Basis Function (RBF) Interpolation

  • 镜像基函数法:每个点影响的大小与距离该点的距离相关,影响程度由镜像基函数决定

image.png

  • 对每一个点可以算出一个距离矩阵,给出一个新的点后,则可算出该点到每个点的距离,再根据距离矩阵得到影响

image.png

  • 离点越近影响越大还是越小由镜像基函数影响

  • Precedure Animation:通过交互产生动画的过程