当前课程知识点:游戏程序设计 > 第九章 《游戏动画》 > 9.2 游戏动画介绍 > 9.2 游戏动画介绍
接下来我就来正式介绍游戏动画
我们先来看一下游戏动画跟影视动画
它们产生有什么区别
前面提到过游戏是需要交互的
影视作品是不需要交互的
所以
影视动画一般都是预先拍摄好的画面
然后播放的时候直接切换一个画面就行
把游戏动画为了实时响应交互
它需要一边播放一边生成游戏的画面
接下来我们来看一段简化的游戏
循环的代码
它包含了游戏一帧之内要处理的主要逻辑
首先
接收输入
然后更新游戏逻辑
然后再根据游戏逻辑更新动画的数据
然后再渲染画面
最后做一个帧率的锁定
这里执行一个循环就是游戏的一帧
如果循环内没做任何的逻辑
就是CPU空跑一秒就会执行上亿次
但是当加入复杂的游戏逻辑之后
帧率就会变慢
其实我们说过
为了降低CPU的利用率
我们需要做锁帧的处理
一般来说
对画面变动不大的游戏
比如说棋牌游戏
大概只需要大概三十帧就够了
动作类游戏一般需要稳定在六十帧左右
比如说吃鸡或者是王者荣耀这种游戏
这里有个比较重要的变量
叫做Delta Time
它是游戏每周消耗的时间是游戏逻辑
以及游戏动画更新的基本依据
比如移动一个物体
我们通过速度
speed
来更新位置
这样才能得到平滑的移动效果
否则如果我们更新物体的时候
如果不乘以这个Delta Time
这个因子就会使得人物的运动速度不稳定
使得速度会因为帧率的变化而变化
这显然是不正确的
接下来我们来看另外个很重要的概念
叫动画属性
首先我们知道游戏世界是一个虚拟的世界
它是通过计算机内存中的数据进行描述的
然后通过渲染模块
把描述数据绘制出来
在描述数据变化的时候
比如说角色的位置数据改变
对应的画面上就会产生
角色的动画会移动了
我们这里把能够驱动
驱动游戏画面产生动画的数据
叫做动画属性
对于影视动画来说
它的动画属性只有一种
就是画面的序号
通过不断地切换播放画面的序号
来达到画面的变动的效果
而对于实时生成的游戏来说
游戏动画来说
它可以用很多种游戏动画
动画属性
在这个例子中
角色的位置就是一个动画属性
接下来我们来看一个超级玛丽的游戏场景
然后这个游戏场景里面有哪些动画属性
我来总结一下吧
首先我们来分成四个部分
第一个是主角
它本身的位置缩放以及背景图片都在变化
所以位置缩放图片索引都是它的动画属性
但对于蘑菇来说
它只有位置在变动
所以动画属性是位置
砖块在不断的闪烁
所以它的动画属性是图片的索引
然后游戏上方的数字属于游戏UI
游戏的时间以及分数值都在改变
所以它们都属于动画属性
然后接下来我们来了解一下
动画属性的数据来源
首先
动画属性是根据前面我们提到的
Delta Time来更新的
所以它和时间T存在某种函数关系
我们把它记为FT
总的来说
动画属性的数据来源有两种
第一种是程序生成的
一般是通过物理函数进行模拟
这种动画一般是比如说
匀速运动或者是抛物线运动
这种动画一般是用来模拟玩家对物体的位移
旋转
缩放等操作实时的操作
这类动画属性数据是程序无法预知的
第二种是动画资产形式的动画属性
这种动画属性一般是由美术人员
通过西基动画工具编辑好的动画数据
然后在游戏运行的时候
通过某种插值函数FT
从动画数据重采样动画属性
这种动画一般是程序无法模拟生成的
需要人工进行编辑
在运行过程中
动画的资产数据是不会改变的
一般游戏中这两种动画属性是结合使用的
比如下面这张图角色的行走
包含了物理函数的模拟
比如说位移动画
和美术预先制作好的图片资产动画
它的背景图片在变
这是图片资产
然后对资产动画来说
对它进行了采样
有两种方式
第一种是逐帧方式的采样
这种动画存储了动画属性
在每一帧中的信息
每次播放的时候会根据计算出帧的索引
获取对应那一帧的动画属性的数据
这种动画只存储动画过程中
某些关键位置的动画属性
我们把它称为关键帧动画
在播放动画的时候
根据当前的时间
在两个关键帧之间取得差值的数据
然后对于关键帧动画
我们接下来介绍一下插值曲线
最常用的插值曲线是线性插值
它的表现比较平稳
很适合用来做常规的位移或者旋转动画
但是线性插值的线性曲线表现比较僵硬
以及机械化
如果使用非线性的方式插值
往往会让动画变得比较生动有趣
比如这张图的曲线是非线性曲线
它可以模拟橡皮一样的放大
缩小的效果
这张图的曲线可以用来模拟
物体来回反弹的效果
接下来我们来介绍插值曲线来来源
插值曲线的一种来源是常见的数学函数
比如说一元一次或者一元多次函数
或者三角函数
或者是幂次函数
或者是由它们组合而成的分段函数
这种插值函数也叫缓动函数
常见的缓动函数有二十多种
大家可以通过这个网站去查询
具体的算法
是潜能的一种经验的总结
然后右边图是部分缓动函数的动态效果图
这些缓动函数的数学形式
我们可以不用去记忆
平时根据需求
参照曲线的图来使用就行了
然后插值曲线它特点是
它的输出值是归一化的值
也就是说
在零和一之间就是在零和一之间时
差值的结果会处于起点跟终点的范围之间
当输出值在零和一之外的时候
差值的结果就会超出
起点跟终点的范围
插值公式比较简单
插值的结果V等于起始值V0
加上deita乘以以插值函数FT
其中deita指的是
终点的V1减去起始值V0
而对于线性插值函数来说
FT直接等于T
我们来看一个跳一跳的场景的画面
在砖块从天上掉下来的时候
它用的是什么样的曲线
首先我们看它是什么动画属性是位移是吧
然后它的起点跟终点是什么的
起点是从上面开始
然后落到下面
然后中间的动画属性
有没有超出起点跟终点的范围没有吧
然后我们再看一个就是结束的时候
位置是不是有来回的波动
对那我们基本上前面两还是可以排除
因为前面两行没有波动
然后我们再根据反弹的次数大概判断出来
应该是倒数第五个吧
跟最后一个这两个区别不大
所以选这两个都可以
好接下来我们来看一下曲线编辑器
缓动函数能够满足
大部分的简单动画效果的需求
尤其是UI的动向
但有一些特定的情况
场景下缓动函数也满足不了需求
这个时候需要可以使用曲线编辑工具来
提供插值曲线
曲线编辑工具
主要是在线线曲线的基础上
添加多个自定义的控制点
来达到曲线编辑的目的
控制点之间可以设置各种连接方式
比如贝塞尔插值
或者线性插值等等
一般的游戏引擎以及西基动画工具
都会提供功能相似的曲线编辑器
这是Unity自带的曲线编辑器
Unity曲线编辑器
有个比较方便的地方
就可以全局存储自定义的曲线
在不同的游戏项目中都可以共用
然后我们来介绍一下CG动画工具
CG动画工具一般是由横向的时间轴
以及纵向的动画属性列表组成的
在时间轴上
每一个单位刻度就是动画的一帧
帧的时常是可以自定义设置的
但对时间轴上某一帧
编辑的动画属性值之后
这一帧就变为了关键帧
动画运行的时候就会在关键帧之间
对动画属性进行采样和播放
关键帧之间默认是线性差值的
可以通过曲线编辑器
编辑关键帧之间的插值曲线
CG工具每次导出的动画数据
叫做一个动画片段
这个动画片段导出之后
一般是供游戏直接播放使用
然后常见的CG工具有3D Max、Maya、cinema4D、blender、houdini等
然后这个是UE4场景动画编辑工具
叫做Matinee
然后游戏逻辑中和动画相关的属性
都可以暴露到Matinee
比如相机的视角和位置
场景中的灯光的明暗的程度
粒子特效的属性
人物当前的动画片段等等
Matinee结合UE4强大的渲染特效
可以做出很就是电影级别的CG动画效果
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题