第一章 导论
1.1 游戏团队结构
工程师
分类
- 运行时工程师:渲染、物理、AI、音效和逻辑等,有些工程师会选择其中一个方向专攻
- 工具工程师:制作团队内部使用的工具
分级
- 一般工程师
- 资深工程师
- 首席工程师:编写代码、项目管理、人员管理、项目技术方向
- 技术总监:技术难点、市场趋势、新技术
- 首席技术官 (CTO)
艺术家
分类
- 概念艺术家:在初期描绘项目的最终状态,并在之后的整个周期中担任艺术指导
- 3D建模师:又可分为前景(物体、角色、载具、武器)、背景(环境、关卡、建筑物、地形)、人物建模师等
- 纹理艺术家
- 灯光师
- 动画师
- 动画捕捉演员
- 音效设计师
- 配音演员
- 作曲家
游戏设计师
分类
- 资深设计师:负责整体故事主线、章节、关卡顺序、玩家目标
- 关卡设计师:设置单个关卡中的敌人、地形、补给
制作人
无特定职责
发行商及工作室
游戏的市场策划、制造和分销一般由发行商负责,工作室将制作的游戏卖给开出最好条件的发行商,或签署长期条约,或第一方工作室等
1.3 什么是游戏引擎
将游戏的核心组件分离,例如三维渲染、物理碰撞、音频系统等,基于这些核心软件,在加上定制的美术、武器、角色、关卡等资源,对引擎进行一些微小的修改,就可以制造新的游戏,这些分离出的基础核心组件,就是游戏引擎
1
越是通用的中间件和游戏引擎,在特定平台上运行的性能就越低 (虚幻引擎提供的大量配置选项是否在一定程度上解决了这个问题)
1.4 不同游戏类型的引擎差异
大部分游戏引擎都是面向特定游戏设计的
1.4.1 FPS
FPS是开发难度极高的游戏类型之一,与之难度相近的还有第三人称射击/动作/平台,以及大型多人在线游戏,难度来自于要让玩家面对一个精细又超现实的世界时感到身临其境,因此,FPS游戏通常会注重技术
- 高效的渲染大型3D开放世界
- 快速反应的摄像机控制及瞄准机制
- 动画
- 各类武器建模
- NPC的动画及AI
- 在线多人游戏
1.4.2 平台/第三人称游戏
这些游戏通常额外需要以下内容
- 逼真的全身动画及建模
- 主角的“能力” 及 运动模式
- 跟踪摄像机
- 复杂的摄像机碰撞系统
1.4.3 格斗游戏
- 精准的攻击判定
- 丰富的格斗动画
- 组合指令输入
1.4.4 竞速游戏
竞速游戏一般有几个子类型:仿真模拟、街机以及以改装为重点的街头赛车类,赛车游戏一般注重车辆、赛道及近景的图形细节,典型的竞速游戏具有以下技术特性:
- 使用多种 “窍门” 渲染远景,如使用平面纸片
- 将赛道切割成多个分区,来实现渲染优化、可见性判断及AI车手的寻路等多种技术
- 第三人称摄像机通常在车辆后方,第一人称通常在驾驶室内
- 如果赛道经过桥梁下方,需要处理摄像机碰撞
1.4.5 实时策略游戏
通常采用斜面俯视,通常不允许玩家缩放查看不同视野范围,这让开发者可以在渲染上采用各种优化
较老的同类型游戏使用 栅格
或称为 单元
构建游戏世界,并使用正交投影以简化渲染系统 现在的RTS也会使用透视投影及真实的三维世界,但是可能仍使用栅格排列系统以保证单位能适当对齐
RTS游戏通常有以下惯用手法:
- 每个作战单位使用精度相对较低的模型,使游戏能同时支持显示大量单元
- 游戏的设计和进行多是在
高度场地形
画面上展开的 - 游戏通常允许玩家在地图上部署兵力和兴建建筑物
- 游戏通常的交互方式是点击、选取及其他各类菜单和工具栏操作
1.4.6 大型多人在线游戏
MMO的核心为一组非常强大的服务器,负责处理管理员/用户登录,世界进行,任务和对话等,最重要的职责是处理用户周期账单和小额交易
因为MMO的玩家和场景规模都很大,所以图形细节一般稍低于其他游戏
1.4.7 玩家创作内容
例如 我的世界
,玩家可在随机生成的地图上自由建造和创作
1.5 游戏引擎概览
- 雷神之锤(Quake) 引擎家族
- 虚幻(Unreal) 引擎
- 起源(Source) 引擎
- 寒霜引擎
- CryEngine
- 索尼的 PhyreEngine
- 微软的 XNA Game Studio (书作者非常推崇XNA,认为其未来光明,可惜这个项目现在已经被微软砍了)
- Unity
- 供非程序员使用的二维游戏引擎
- 其他商业引擎
- 其他专有内部引擎
- 开源引擎
1.6 运行时引擎架构
游戏引擎通常由运行时组件和工具套件构成,本章讨论运行时架构,自底向上可分为以下几个部分
1.6.1 目标硬件
硬件层,代表用于运行游戏的计算机系统或游戏主机,例如Windows,Xbox,PS,IOS,Android等
1.6.2 驱动程序
是由硬件厂商提供的,最低阶的软件组件,负责管理硬件资源,隔离操作系统和硬件,使上层软件不必理解不同硬件版本的通信差异和硬件细节,也可以使用硬件功能
1.6.3 操作系统
在PC上,操作系统一直运行,例如Windows,在Windows上,操作系统使用时间片(抢占式)方式使多个进程共享硬件资源,而在较为早期的游戏机上,操作系统通常只是一个较为轻量的库,链接到游戏的执行文件上,游戏运行时,通常“拥有”整台游戏机,然而,在最近发布的游戏机中,操作系统提供了更多功能,所以也可能会中断游戏执行,PC和游戏机开发的界限正在越来越模糊
1.6.4 第三方软件开发包和中间件
大部分游戏引擎会借助第三方SDK和中间件,SDK提供基于函数或基于类的接口,一般称为API,例如DX,OpenGL渲染,Havok,PhysX物理引擎等,一些常用SDK和中间件类型:
1.6.4.1 数据结构
游戏非常依赖数据结构集合以及操作这些数据的算法
- STL: C++的标准模板库,提供大量常用算法管理数据结构,以及字符串和基于流的输入、输出
- STL Port
- Boost
- Loki
有一些游戏开发者认为STL的内存分配模式不够高效,会导致内存碎片问题,但是PC上的虚拟内存系统可以一定程度上抵消这种劣势,而在游戏机上,可能需要更谨慎的分配内存
(UE提供的修改版STL是否解决这一问题?)
1.6.4.2 图形
大部分游戏渲染引擎建立在硬件接口库之上,例如:
- OpenGL
- DX
1.6.4.3 碰撞和物理
- Havok: 流行的工业级物理和碰撞引擎
- PhysX: Nvdia提供的物理和碰撞引擎,PC版免费
1.6.4.4 角色动画
- Granny: Rad Game Tool 的工具套件 (现在叫Epic Game Tools,就是Epic Games 的 Epic,而且官网好像已经不显示这个工具套件了,通过谷歌搜索还可以看到官网对应Url下的页面,但是工具最近一次更新也是2021年了)
- Havok Animations
- Edge: 为PS3而设计的工具,由顽皮狗,索尼联合制作的
1.6.4.5 AI
(此AI是彼AI,也非彼AI,虽然缩写一样,实际的单词也一样,但是游戏开发中的AI通常是指角色的路径搜寻,障碍回避,行为树等功能)
1.6.4.6 生物力学角色模型
- Endorphin和Euphoria: GTA罪恶都市使用Euphoria实时生成NPC在物理和生物力学上准确的动作
1.6.5 平台独立层
大多数游戏引擎需要运行在不同平台上,因此,需要一个平台独立层,平台独立层在硬件、驱动程序、操作系统和第三方软件之上,包括了常用的C语言库,操作系统调用及其他API,确保包装了的接口在所有在所有硬件平台上一致
(比如C++在Windows和Linux上的Socket实现,调用同样的Socket类,产生的行为应该相同)
1.6.6 核心系统
游戏引擎及其他大型软件都会有自己的实用工具集(Utility),书中称为 核心系统 ,核心系统的常见功能包括:
- 断言:断言是一种检查错误的代码,用来捕捉逻辑错误或与预期不符的错误,在最终发布版本中,一般会移除断言检查 (UE引擎源码中依然有很多这类检查)
- 内存分配:几乎每个游戏引擎都有自定义的内存分配器,保证高速的内存分配及释放,并控制内存碎片导致的负面影响
- 数学库:游戏本质上是高度数学密集的,使用了大量数学 (旋转,向量,直线曲线等) ,因此,每个引擎都有一个或多个数学库 (UE的是UKismet库)
- 自定义数据结构及算法:除非引擎想要完全依赖第三方SDK,否则引擎通常需要提供一组自己的数据结构和管理方式,通过手动编码,减少或消除内存动态分配的方式,以保证在目标平台上效率最优 (如UE中提供了TMap, TArray等)
1.6.7 资源管理器
待完善