GAMES104-现代游戏引擎:08 动画技术基础

2023-06-03 0 385

一、动画电影详述

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

格斗游戏中的考验

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

二、2D动画电影

2.1 Sprite animation

GAMES104-现代游戏引擎:08 动画技术基础
2D字符串帧动画电影

采用Sprite字符串演示动画电影犯罪行为

GAMES104-现代游戏引擎:08 动画技术基础
2D演示3D
GAMES104-现代游戏引擎:08 动画技术基础
2D特效

根据角色的方向,播放指定的动画电影字符串以达到演示3D动画电影的效果。这种处理方式也可以用来演示特效

2.2 Live2D

GAMES104-现代游戏引擎:08 动画技术基础

Live2D是一种2D动画电影生成控制技术,处理非常简单。其核心思想是将动画电影对象进行拆分,对图元局部进行Transform以及spine变换以达到演示局部动画效果。

三、3D动画电影类型

3.1 自由度

自由度(Degrees of Freedom):系统对象可变化的此基础维度。通常三维空间的物体自由度为6:三个维度上的偏移和三个维度上的旋转。

GAMES104-现代游戏引擎:08 动画技术基础

3.2 顶点动画电影

VS中对顶点随时间进行处理,可以采用数学函数也可以采用计算好的纹理数据。

GAMES104-现代游戏引擎:08 动画技术基础

3.3 Morph Target Animation

顶点动画电影的一种变型,不同的是顶点影响权重。通常用于表情动画电影,对两个key frame进行插值。

GAMES104-现代游戏引擎:08 动画技术基础

3.4 2D & 3D Skinned Animation

3D角色是动画电影通常是通过骨骼来驱动的,骨骼所影响的皮肤通常不会的静态的,Mesh会随着骨骼的运动而变化。处理这种问题的控制技术称为蒙皮骨骼动画电影。

GAMES104-现代游戏引擎:08 动画技术基础

2D也可以采用同样的原理进行处理

GAMES104-现代游戏引擎:08 动画技术基础

3.5 Physics-based Animation

在格斗游戏中,动画电影常常会与物理系统进行交互,比如角色受击、衣料、以及IK(反向动力学)。

GAMES104-现代游戏引擎:08 动画技术基础

3.6 动画电影制作方式

在专业软件中通过key frame来插值处理动捕控制技术
GAMES104-现代游戏引擎:08 动画技术基础

四、蒙皮动画电影

4.1 Mesh如何运动?

为一个Pos创建Mesh为Mesh绑定骨骼(骨骼影响哪些顶点)设置骨骼的影响权重将骨架设置为所需姿势的动画电影通过骨架和蒙皮权重设置蒙皮顶点的动画电影
GAMES104-现代游戏引擎:08 动画技术基础

4.2 坐标系

GAMES104-现代游戏引擎:08 动画技术基础
World space:包含所有物体的坐标系。Model space:模型制作的时的坐标系。Local space:当有其它物体相对于自身表示时的坐标系,骨骼的计算也是在这一坐标系中进行的。

4.3 生物骨骼

动画电影师在设计骨骼时,根据需求通常会有一套标准的骨骼,在此此基础上进行角色动画电影的制作。这些骨骼由一系列的刚性joint组成,两个joint可以为一根骨骼(Bone)。所有的joint都附属于root节点,通常处于角色的底部。

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

4.4 人物骨架

格斗游戏中的人物,除了标准的骨骼,还会有许多附加的骨骼。比如穿着斗篷、拿着武器以及表情动画电影,都会有额外骨骼的需求。

GAMES104-现代游戏引擎:08 动画技术基础

T-Pos & A-Pos

T-Pos与A-Pos是在制作人物骨骼动画电影时常见的两种pos。T-Pos在处理肩部的有一定的肌肉挤压,会造成对这部分的骨骼权重精度不足。A-Pos更符合制作的需求。

GAMES104-现代游戏引擎:08 动画技术基础

4.5 对象的绑定动画电影

格斗游戏中常见一种动画电影就是骑乘,比如开车、骑马。骑乘状态下的角色会随着载具一起运动,那么两者之间就必须有一个连接点来保持两者的关系。

GAMES104-现代游戏引擎:08 动画技术基础

五、数学原理

5.1 欧拉角(Euler Angle)

GAMES104-现代游戏引擎:08 动画技术基础
2D旋转矩阵
GAMES104-现代游戏引擎:08 动画技术基础
3D欧拉角旋转矩阵

欧拉角存在的问题:

万向锁旋转顺序影响最终结果旋转角相关运算很困难(叠加、插值)
GAMES104-现代游戏引擎:08 动画技术基础
万向锁
GAMES104-现代游戏引擎:08 动画技术基础
旋转插值

5.2 四元数(Quaternion)

四元数能够很好处理旋转计算的矩阵运算,采用十分方便、优雅。发动机中通常会给到简单易用的接口,但四元数的数学思想并不容易理解。总体来说四元数将三维的旋转与角度映射到四维空间中处理(太菜了,没听懂~~)

GAMES104-现代游戏引擎:08 动画技术基础
四元数向量运算此基础
GAMES104-现代游戏引擎:08 动画技术基础
欧拉角转Quaternion
GAMES104-现代游戏引擎:08 动画技术基础
Quaternion旋转
GAMES104-现代游戏引擎:08 动画技术基础
任意轴Quaternion旋转

六、Joint Pose

6.1 Transform

骨骼动画电影处理与一般对象的处理一样:角度、位置和放缩变化。

Orientation

GAMES104-现代游戏引擎:08 动画技术基础

Position

GAMES104-现代游戏引擎:08 动画技术基础

Scale

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
Transfrom矩阵

6.2 骨骼动画电影 & 蒙皮

骨骼动画电影中所有的骨骼变动都是基于局部坐标系(旋转时能够保证骨骼大小不变),也就是和父节点相关。所有骨骼的变动是逐步叠加的结果。骨骼动画电影需要存储model space下,关键帧root => joint的变换矩阵。

GAMES104-现代游戏引擎:08 动画技术基础

在处理骨骼蒙皮时,会记录皮肤Mesh顶点相对绑定骨骼的位置,这样皮肤就能跟随骨骼运动。在处理骨骼蒙皮时,只需要知道Mesh顶点在model space的坐标和绑定矩阵,就可以知道蒙皮顶点相对Joint的局部坐标。

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

通常骨骼的数量很少,蒙皮顶点的数量很多,因此不可能每次计算蒙皮顶点时都计算骨骼的转化矩阵。在计算骨骼动画电影时,先计算好某一时刻的骨骼动画电影,再计算所有的蒙皮矩阵。在计算实际的顶点时,是在世界空间下处理,因此可以将这部分骨骼矩阵计算好,再处理蒙皮效果。

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

6.3 Clip插值

一个动画电影Clip是由一些关键帧组成的,关键帧之间由两个关键帧的数据插值计算,由此获得较为平滑的动作。对弈简单的差值,比如位置就可以直接进行差值,但上面提到的角度差值就相对麻烦。

GAMES104-现代游戏引擎:08 动画技术基础
位移、放缩的线性插值

对于角度来说,最直观的线性插值(q1 -> q2直线),但旋转需要保证半径不变,因此要对对线性插值结果标准化处理(NLERP)。缺点:角度变化不均匀,中间慢,两边慢。

GAMES104-现代游戏引擎:08 动画技术基础

最短路径插值:从一个角度移动到另一个角度,对于每个维度来说都有两种变化方式,而符合人直观的插值是最短路径插值。通过四元数点乘的正负值;方向向量的叉乘正负值来处理旋转方向。

GAMES104-现代游戏引擎:08 动画技术基础

SLERP:先计算旋转角度,对角度进行差值计算位置。优点:变化均匀。缺点:计算量略高(反三角函数);旋转角度很小时,计算结果不稳定。

GAMES104-现代游戏引擎:08 动画技术基础

混合处理:设定一个角度阈值,当夹角小于阈值时,采用NLERP;当角度大于阈值时,采用SLERP。

6.4 动画电影管线

此基础动画电影管线:根据时间插值计算当前帧的Pos => 计算蒙皮Mesh => GPU渲染。

当代动画电影管线:大部分CPU计算放到GPU处理。

GAMES104-现代游戏引擎:08 动画技术基础
此基础动画电影管线

七、动画电影压缩

动画电影需要处理的数据很多,会占用大量的存储空间,若不就行压缩处理,难以在硬件设备上运行。

GAMES104-现代游戏引擎:08 动画技术基础

7.1 减少不必要的数据

7.2 关键帧与插值曲线

GAMES104-现代游戏引擎:08 动画技术基础
关键帧
GAMES104-现代游戏引擎:08 动画技术基础
Catmull-Rom Spline

7.3 数值精度

GAMES104-现代游戏引擎:08 动画技术基础

对已知范围的浮点数映射到0~1之间,可以增加数据的精度。对于四元数可利用归一化的特性,只存储三个绝对值较小的数据,这三个值处于一定范围内。这样只需要2bit存储最大值的位置,其余每位15bit,共48bit。

GAMES104-现代游戏引擎:08 动画技术基础
GAMES104-现代游戏引擎:08 动画技术基础

7.4 Error

动画电影压缩本质来说是用时间换空间,数据在压缩和解压过程中就可能存在信息失真的情况。~~~略

八、动画电影制作流程

8.1 Mesh building

GAMES104-现代游戏引擎:08 动画技术基础

8.2 Skeleton Binding

DCC软件通常自带预制骨架,美术可以手动将骨骼附加到指定到Mesh位置。

8.3 Skinning

GAMES104-现代游戏引擎:08 动画技术基础

8.4 Animation Creation

GAMES104-现代游戏引擎:08 动画技术基础

8.5 Exporting

在DCC软件中完成动画电影资源制作后,需要将资源导出到格斗游戏发动机中采用。这其中就有许多细节又要注意:

尺寸单位一致性坐标系一致性是否附带位移曲线……
GAMES104-现代游戏引擎:08 动画技术基础

参考

lxycg:四元数和旋转(Quaternion & rotation)如何形象地理解四元数?计算机视觉life:可视化理解四元数,愿你不再掉头发https://krasjet.github.io/quaternion/quaternion.pdfhttps://betterexplained.com/articles/a-visual-intuitive-guide-to-imaginary-numbers/

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务