Games104现代游戏引擎入门-lecture8 游戏引擎的动画技术基础

1 动画的历史

在这里插入图片描述

影像在我们的视网膜上残留1/24s。
在这里插入图片描述
西洋镜
在这里插入图片描述
游戏动画的基础都是来源于电影行业。不断逼近于离线 渲染的效果。
zafari是第一部游戏引擎做的动画。

在这里插入图片描述
动画的基础:一帧帧图片做出来的。后面又用捕捉系统来做。
在这里插入图片描述

2 游戏引擎动画的历史

Doom其实是2D做的。是游戏动画的鼻祖。
在这里插入图片描述
在这里插入图片描述

3 challenge in game Animation

1 交互

在这里插入图片描述

2 实时

算不过来
动画数据大
其中动画压缩解决这个问题的。
在这里插入图片描述

3 真实

表情是很难的。
在这里插入图片描述

4 动画技术的基础

在这里插入图片描述

1 2D动画

在这里插入图片描述

在这里插入图片描述

动画序列帧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2 3D动画

1 DoF

在这里插入图片描述

6DOF: xyz的平移,xyz的旋转
在这里插入图片描述
角色的每个关节做个树状的结构。

在这里插入图片描述

2 顶点动画:把每个帧的顶点的位置记下来。

在这里插入图片描述

顶点动画:
在这里插入图片描述
在这里插入图片描述

刚体骨骼在动的时候,皮也在跟着动。是因为每个顶点是多个骨骼在动。
在这里插入图片描述
在这里插入图片描述

衣料模拟是动画中最难的。
在这里插入图片描述

创造动画:
在这里插入图片描述

3 蒙皮的实现(重要)

1 如何创建一个mesh

在这里插入图片描述

2 不同的空间

world space:
Model space:我自己的坐标系
Local space: 局部坐标系,每一根骨骼的坐标系都不一样,动画系统中的某个坐标系是由其他骨骼的坐标系累算出来的。只有通过local space从根节点累算出他的模型坐标系,才能够算他的世界坐标系,然后才能够进行渲染。

模型坐标系和世界坐标系的关系

在这里插入图片描述

3 骨骼的创建

统一了一个骨骼结构
在这里插入图片描述

存储的是关机的数据

在这里插入图片描述
加了一些很奇怪的骨骼。很多道具都加到了起骨骼上。
在这里插入图片描述

在这里插入图片描述

Root Joint:很重要。表达他的位置。
在这里插入图片描述

Bind point:绑定动画。
在这里插入图片描述

T-pose:
现在用A-pose
在这里插入图片描述
骨骼pose

在这里插入图片描述

4 Math of 3D rotation

1 2D rotation

在这里插入图片描述

2 3D rotation

依次绕着每个轴旋转。

在这里插入图片描述

1 欧拉角:

对物体进行编辑,或者摆放的时候会经常用,但是做动画的时候无法使用欧拉角。
在这里插入图片描述
欧拉角的问题:好处就是符合人的知觉
(1)严格的顺序依赖:顺序不一样,他算出来的结果不一样。
在这里插入图片描述
(2)万向节:万向锁

沿时间轴上偏的方向和它的速度一起积分,可以算出它的轨迹。
在这里插入图片描述
(3)很难插值
在这里插入图片描述
(4)旋转的叠加很难
(5)很难沿着一个固定的轴旋转。
在这里插入图片描述

2 四元数

在三维空间内是work的。
在这里插入图片描述
在这里插入图片描述
四元数的定义如下:
在这里插入图片描述
欧拉角转成四元数的公式如下:

在这里插入图片描述
四元数和矩阵的计算很类似;

在这里插入图片描述

四元数转成旋转矩阵:
在这里插入图片描述

反向旋转公式,旋转叠加,一个向量旋转到另外一个向量的四元数公式如下:
在这里插入图片描述
给定轴的旋转公式如下:
在这里插入图片描述

5 Joint Pose - Orientation

旋转的表达是动画最核心的
在这里插入图片描述

6 Joint Pose - Positon;

在这里插入图片描述

7 Joint Pose - Scale

在这里插入图片描述

8 Joint Pose - Affine Matrix

这个矩阵是非洲重要的。
在这里插入图片描述

9 Joint Pose -Local Space to Model space

在这里插入图片描述

10 Joint Pose Interpolation - local space Vs Model space

在这里插入图片描述

11 Joint Skinning Matirix

动画矩阵。

在这里插入图片描述

有个恒等式:关节点动了,皮肤上的任何点与joint的相对关系没有变化。
在这里插入图片描述

这个公式非常的重要。

在这里插入图片描述
提前把矩阵的逆求好,存储好了。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

顶点插值必须在model space:(下面)不要在local space中做。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

位移和缩放插值
在这里插入图片描述

旋转插值是很难的,必须用四元数来做。

在这里插入图片描述

最短路径的插值。
在这里插入图片描述
这个的问题是:速度不均匀,先开始快,然后慢,最后又快,动画看着不自然。
在这里插入图片描述

在这里插入图片描述

如果两个夹角很小,就用NLERP,如果两个夹角很大,就用SLERP.

在这里插入图片描述

4 动画pipeline

在这里插入图片描述

5 动画压缩

在这里插入图片描述
数据量很大,

缩放和位移是不变的,大部分是rotation在变化。
在这里插入图片描述

1 较少自由度存储

在这里插入图片描述

2 关键帧

在这里插入图片描述
永远保证你的error小于你的阈值
在这里插入图片描述

CatMull 曲线

非常光滑,一点一点的逼近。
在这里插入图片描述
在这里插入图片描述

3 浮点数

在这里插入图片描述
在这里插入图片描述

一个四元数 6个bite。压缩了60%。
在这里插入图片描述

在这里插入图片描述

4 压缩带来的问题

会让这个压缩错误一直传递到错误很大。
不同 的骨骼对error敏感度是不一样的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
视觉error
在这里插入图片描述
压缩的好坏,是一个重要的研究领域

在这里插入图片描述
误差补偿。

在这里插入图片描述
在这里插入图片描述

数据一定会压缩,但是会有一些视觉error

5 动画DDC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5 视频

https://www.bilibili.com/video/BV1jr4y1t7WR/?spm_id_from=333.788&vd_source=5c9c50b5a07b211beafdf65d7cc7f8c8

猜你喜欢

转载自blog.csdn.net/qq_41286360/article/details/125286789