渲染那部分看的云里雾里的,等学完其他图形学的内容再回头开吧
游戏动画的三个挑战:
1.根据交互实时的反应各种变化
2.一帧时间里的庞大计算
3.更真实自然的表现
2D动画
sprite animation
把每一帧精灵循环绘制出来
2D技术实现3D效果
在各个视角采了一系列的动作。根据摄像机的位置,播放不同的sprite动画
粒子系统也是sprite animation
live2d
讲一个图片分成多个小图元
通过对每个小图元的旋转,缩放和变形(对图套以一个框架,对框架的拉伸,会使里面的三角形/正方形进行反射变换)
对每个图片元素生存控制网格,在网格中可以随机的加入控制点。
在每一帧中k出想要的画面效果
DOF:自由度,即可变换的维度
一个刚体通常6个自由的:平移的x,y,z。以及围绕三个轴的旋转
Rigid Hierarchical animation
将物体分成一个个能动的关节。每个mesh和关节绑定。
关节处的mesh会穿插
Per-vertex animation 顶点动画
存下每帧每个顶点的数据,顶点的变化会导致法向的变化。通常是用物理引擎模拟好,然后存储成vertext-animation的texture
如旗子动画,水流动画等,难以区分骨骼
Morph Target animation
也是一种顶点动画。在顶点间插值,设置不同的权重。通常用于人脸
3D Skinned animation 蒙皮动画
每个顶点受多根骨骼的作用
2D skinned animation与3D原理相同
Physics-based animation:用于布娃娃系统,物理的模拟,IK(反向动力学)
不同的坐标系:
世界坐标系world
模型坐标系model
局部坐标系local
基础结构:
类人型模型:root一般在脊椎尾椎骨
四足动物是另一套模型
游戏中存储的实际是关节数据(joint),两个关节间形成一个骨骼(bone)
root骨骼一般定义在两脚中间。用来表达模型的位置,计算位移,高度、
Bind animation
连接两个骨骼模型间的绑定点。人骑马,人开车等。不是简单点的两个模型绑定点位置设成一样。而是整个坐标系一个attach到另一个
做出来的骨骼模型:初始是一个Bind Pose
动画有9个自由度:平移,旋转,缩放
二维空间旋转矩阵
欧拉角
欧拉角需要严格顺序依赖
万向节
四元数
四元数还是别纠结原理,直接用吧
求局部坐标。相对绑定模型坐标的恒等式
矩阵的逆通常会直接在关节存下来
受两个关节影响的坐标插值计算,需要将两个关节局部坐标转换为模型坐标,再计算权重插值
平移和缩放通常用线性插值就能解决
旋转的插值
旋转插值,通常会旋转最小角度。即大于180度的角会反向旋转
NLERP插值的问题是:旋转速度是两头快,中间慢
SLERP计算消耗更大,因为反三角函数的运算。以及旋转角较小时会不稳
通常旋转角较小时用NIERP,较大时用SLERP
CLIP是会存储各个pose
寻找当前帧和下一帧
算出当前pose,根据插值算法
转化成model坐标
动画压缩
不变的track都抛弃
大多情况缩放不变,可以抛弃
平移只需存一个值,不用存整个时间轴
旋转则是在关键帧之间插值,当插值计算出来的值与实际值的误差大于一定范围时,把前一帧设为关键帧