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

经验分享 程序员 微信小程序 职场和发展