游戏引擎的动画技术基础
动画技术的基础
2D游戏动画技术
Sprite animation:通过多张图片连续播放获得的近似动画效果,早年红白机小霸王上的游戏大多此原理
Sprite-like animation:在前者基础上利用多个视角相机进行拍摄获得的更全面的图片信息,从而可以实现模拟3D的效果(Doom)
Lived2D:指二次元人物的动画等,一般利用将人物拆分成不同组件并通过移动旋转组件来实现人物动画
3D游戏动画技术
基础概念DoF(Degree of Freedom),即指这个系统能操作的方式。比如常见的6DoFs就是指物体可以在xyz轴运动以及绕xyz轴旋转,如下图:

Rigid Hierarchical Animation
最基础的3D角色动画,就是有层次的(如树状)的刚体的运动,形式类似皮影戏和上面的Live2D。这种方法的问题是刚体间移动旋转时可能会出现缺缝。
Per-vertex Animation 顶点动画
如旗帜、水流的动画效果用刚体难以解决,所以使用3DoFs的顶点动画,计算每一帧下每个顶点的空间位置的变化,一般存成两个texture,第一张的x轴是所有顶点的序号,y轴是帧的数量,位置(x, y)则是某顶点在某帧下空间位置变化的offset;第二张图是记录顶点的法向量,因为随着位置的变化,法向也会变化。这两张图都会利用物理引擎先预计算保存。
缺点是数据量会很大。
Morph Target Animation
也是顶点动画的一种,但是只设置关键帧的变化,关键帧之间普通帧的变化是通过插值获得。
3D Skinned Animation 蒙皮动画
在骨骼外有皮肤(mesh),每个mesh的顶点受多个骨骼节点的影响(加权)。
其优点是减少了顶点动画的数据量,以及mesh会更自然。
同理还有2D的蒙皮动画。
Physics-based Animation
基于物理的动画,常见于三个方面:Ragdoll,即人从高空坠地时的一些动画,往往部分由艺术家设计实现,部分还需考虑物理原理(自由落体以及坠地瞬间);衣料的动画;Inverse Kinematics(IK)反向运动学,比如攀爬时如何让这个抓取过程更合理。
动画内容的创造
主要有两种方式:
- DCC(Digital Content Creator)+ Animator。即所谓的艺术家手K动画(key frame)
- 动捕(Motion Capture)
蒙皮动画的实现
流程上分为五步,一般在vertex shader中实现:

看似简单,但如果顶点的权重设置不合理,模型一动起来可能就炸了。
【前提知识】局部坐标系。动画中的局部坐标系是以骨骼的单个部分为单位的,而不是整个人为局部坐标系,所以在计算中往往需要依次传递到具体的骨骼的局部坐标系(比如手的局部坐标系),反过来说也需要从局部坐标系传回世界坐标系才能进行渲染。
生物骨骼
生物骨骼是由一个个有层次的节点组成,其中有一个是根节点,其他所有节点都有父亲节点。
对人而言,一般取脊椎的最后一个骨头为root节点,因为从这个节点开始向下是双腿,向上是脊椎,决定人上体的曲直,继而还有肩膀双臂和头颈。
动物会有不同,因为是四肢动物。
另外,Joint节点和Bone骨骼不完全相同,一般来说,我们把关节的地方称为节点(有自由度),节点间称为骨骼。
实际游戏中,往往取人双腿之间的点为root节点,这样方便后续计算速度以及跳跃高度等数据。而马这种四肢动物则会令肚子上的节点为root节点。
不同物体之间需要绑定,比如骑马时马和人各自拥有不同的动画,所以需要设置一个bind point,使得两者能够被绑定在一起,而且该点具有比较高的自由度,能够实现当马前倾时人也会前倾等行为,而不只是一个纯连接点。
在人体连接方面,实践中也逐渐抛弃之前常用的T型结构而改用A型。这主要是因为T型结构在肩膀部分会挤压带来精度误差。
3D旋转的数学原理
Euler Angle
旋转主要通过欧拉角的概念,如下图:

可以通过绕xyz旋转的矩阵相乘来获取最终效果。
另一种表达欧拉角的方式是Yaw, Roll和Pitch,分别指水平的旋转、左右侧向高低变化以及抬头低头的变化。
欧拉角的主要问题有
- 顺序依赖,即换一种绕不同轴旋转的顺序会导致最终旋转结果不同。所以一般规定必须xyz顺序。
- 欧拉角存在“退化”问题,即当固定绕一个轴旋转时,其他两个轴就退化成同一个内容了,比如绕z轴转动时,x和y的地位就相同了,此时DoF实际上只有1度了。
- 插值困难。给定两组旋转角度时,很难计算它们之间的插值结果,不能简单线性插值。
- 很难绕其他任意特定轴旋转。
Quaternion 四元数
出于上述缺点,实际游戏制作中不太用欧拉角,反而用Quaternion会比较多。
其基于利用复数解决二维旋转问题的方法,如下图:

进一步提升到三维空间后:

本文深入探讨游戏动画技术,从2D的Spriteanimation到3D的RiggedHierarchicalAnimation、顶点动画、蒙皮动画,再到基于物理的动画。详细介绍了蒙皮动画的实现,包括关节、生物骨骼和3D旋转的数学原理,如EulerAngle和Quaternion。同时,讨论了动画内容创作、压缩技术和错误处理,以及动画制作流程。
最低0.47元/天 解锁文章
1984

被折叠的 条评论
为什么被折叠?



