Games104现代游戏引擎入门-lecture8 游戏引擎的动画技术基础上
- 1 动画的历史
- 2 游戏引擎动画的历史
- 3 challenge in game Animation
- 4 动画技术的基础
- 1 2D动画
- 2 3D动画
- 3 蒙皮的实现(重要)
- 4 动画pipeline
- 5 动画压缩
- 5 动画DDC
- 5 视频
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