Games104现代游戏引擎学习笔记08
渲染那部分看的云里雾里的,等学完其他图形学的内容再回头开吧
游戏动画的三个挑战: 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都抛弃 大多情况缩放不变,可以抛弃 平移只需存一个值,不用存整个时间轴 旋转则是在关键帧之间插值,当插值计算出来的值与实际值的误差大于一定范围时,把前一帧设为关键帧