GAMES105-计算机角色动画基础

GAMES105-计算机角色动画基础

课程介绍:
- 代码、作业等
角色动画的什么部分


103:物理仿真
105:动画
动画:动作、行为上的

仿真+控制就是动画


基于关键帧的动画()(劳动密集型)
怎么让动画动起来?

- 绑定骨骼
- 人骨骼运动

- 基于物理
- 不基于物理的
运动学方法

低级的,低效率的

高级的

迪士尼的动画12准则

基于物理的UI设计?
算法:
- 前向动力学
- 逆向动力学
差值动画

动作捕捉
惯性动捕
研究方形:
- 基于视频的动捕
- 动作重定向


状态机(游戏)
02年(Motion Graphs)

动作图:太复杂

Motion Matching

从数据中学习(深度学习)

生成模型

语音 转化为 动作

MotionCLIP 跨模态
剧本,自动表演。。。
物理仿真,回到模拟

控制量,输出

物理可行的
AR/VR的交互
物理仿真的应用:如筷子
物理仿真怎么做
- 简化物理
- 关节力矩
- 高度差
- 控制的关键帧方法
- 通过优化的方法
- 重定向
- 时空优化的方法
- 给出落点
- 机器人领域
- 简化模型的方法
- 只能做走路
- 强化学习方法
- 2015年 Deep mind

- 让角色自己学习动作

- 滑板,可以更精细的完成任务
生成模型 -》 基于命令进行高级的生成
接下来可以做什么???
语言、音乐 -》 控制的领域【跨模态的动画生成】

基于强化学习模型,在虚拟中产生动作的方法变成现实、变得可用
课程

从科学、方法、理论
可交互的虚拟角色
Python
物理引擎(pybullet/ode/..)


panda3D 游戏引擎(python)
动作预测

实验(可用用经典方法)简化模型
线性代数
力学(理论力学)
人机交互:动画是HCI手段
动作生成
----------------------------------------------------

点乘:
欧式空间,高维空间
风格迁移、
投影
叉乘:
来源。。
运算规则
寻找法线方向
旋转角度:

Matrix 矩阵
运算性值

X为什呢要写小x?

正交矩阵

行列式 det


刚体变换
平移:

旋转:非线性
旋转矩阵

旋转的组合

R = R2R1

特征值特性向量
旋转轴:不变量



旋转矩阵

局部坐标点和世界坐标的关系

局部到全局:先旋转再平移
全局到局部:先平移再旋转
----------------------------------------------------
三维旋转
平移差值:
旋转差值
欧拉角定义:
万向锁问题:歧义点

基点问题:
反向转、万向锁问题
轴角表示:



四元数
把二维拓展到三维


重定向,怎么做?
Lecture 03: 运动学:前向逆向运动学
作业:github.com/GAMES-105/GAMES-105/
前向运动学:

考虑物体的运动,不用考虑力

joint 骨骼的组合
保证关节不离体,前向运动学
每一个R都是旋转矩阵

归纳:

位置和朝向

对于角色模型
腰 root


自由度DoF
(SPS也是有DoF,可以用运动学的方法来研究运动轨迹的独立性)
2DOF

旋转范围
动作生成:SPS的IO位置生成、动作生成,根据空格数量决定轨迹

从根节点出发
可变性关节
Inverse Kinematics 逆向运动学


逆向问题:

前向问题:自由度相对低

机器学习:梯度下降
能不能把ML加入到SPS?实时?
————————————————————
框架,自动求微分

雅各比矩阵?


————————————————————
L5 Kinematics & Keyframe(差值)
课程提纲



可以制作 眼动SPS 的BVH 文件

所有旋转都为0的Pose
T-Pose
A-Pose
T、A 和形状相关

动作重定向的问题(Retargeting)

和旋转的转置有关系
先用单个物体来考虑


骨骼数量、名字不同的情况:需要映射

反向动力学 的优化问题求解方法
什么是 雅各比矩阵?
————————
关键帧动画/关键帧差值

关键帧、过渡帧
抽象:问题是数据点的差值问题
内插、外插,一般是内插
- 梯度函数
- 线性差值


- 平滑性
- Smoothness
- 非线性差值
- 多项式

- Runge's
- 样条差值/分段差值

- 曲尺:样条 spline
- 是三次多项式(可证明)
- 方法:

- 问题:单点移动整体移动/计算复杂

- 希望局部性,计算量小
三次厄米特样条

方法

常用差值:


旋转差值

处理极点问题
SLERP 运算(四元数)
贝塞尔曲线

L4讲了2个内容
- 动作运动学的内容:重定向、全身IK
- 差值
————————————————————
L5 数据驱动的角色动画

运动估计

稳定性需要提升

当有动捕数据后,怎么用?

模型+动捕数据

使用流程

重定向流程
动作连接/转移

动作转移 做差值
i表示 帧

动作要先对齐:“Facing Frame”

假设 y up,只有xz 面的移动
定义:

根关节的数据是否移动:
相机采集:有移动
动画师制作:没有

动作图(2002)

眨眼控制的IO 设计研究的是 状态基?
姿态的距离 -> 得到相邻帧/动作

——————————————————
L6 基于学习的方法
高斯模型(2016之前)

动作和当前轨迹连接

Motion Graphs 的不足:
需要做完上一个动作
在每帧切换 Motion Matching

每一个点找到最近邻

为什么看上去效果好,但用的少?
用强化学习得到权重

距离函数:特征向量


最佳性能:数据结构
Motion Matching 可能不能解决滑步问题,还需要IK方法来把脚固定在地面
————————————————————
重放动作:
建模 动作自然
低维结构的数据,

高维空间里的低维流形

高维数据中,不同维度之间的关系

PCA方法是来找一些轴,数据在轴上的投影可以给出有用信息。

定义:PCA
在轴上信息最大的方向,用方差最大


PCA 找到一系列主成分的方向

PAC 发现叠加多个主成分后,动作变得更加自然~
Nutshell 信息量可以用PCA来描述

表示,能以多少的百分比恢复数据
正则化 看姿态是不是一个好的姿态
距离中心点距离

作用:先验信息
动作来源于概率分布
数据分布

数据来源于同样的概率分布
怎么估计这个概率分布
方法:
- 高斯分布


F(x)
f(x) 动作相关的
任务相关项 + 运动先验
局限性:e.g. 跳舞
不同分布

GMM 高斯混合模型
GPLVM 高斯过程
L6+ Learning-based Character Animation
pytorch 神经网络
换了工具表示出来,思想是一致的


动作是真实的可能性

表示动作的方式BVH、基于关节位置的
BVH 基于关节旋转的

条件概率密度 z

概率密度函数 采样
另一个角度:
基于 条件概率:每一帧基于前一帧确定

动作具有 马尔可夫性
姿势只和上一个动作有关系
左侧可能考虑了未来,

简化模型

前后两帧的二元组

训练目标:

Interpolation


三层前向网络

训练 -》 优化问题
F(tha) 最小
求解:
梯度下降

算法:后向传播(链式法则)
缺少约束:
怎么找到合适的z?

PFNN
控制参数、相位参数

走路有周期性,循环(周期性sps运动

不同定义,性质不变

混合专家模型

专家的参数混合
走路每个相位,不同专家

改进
专家 theta
权重 w


学概率密度函数?
生成模型 -》

VAE 编解码器
GAN 判别器

GAN 在时序模型上表现不是很好

————————————————————
L7 Skinning 蒙皮



——————————————————