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都抛弃
大多情况缩放不变,可以抛弃
平移只需存一个值,不用存整个时间轴
旋转则是在关键帧之间插值,当插值计算出来的值与实际值的误差大于一定范围时,把前一帧设为关键帧

猜你喜欢

转载自blog.csdn.net/Mhypnos/article/details/130715487