Post

第一章 导论

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类,产生的行为应该相同)

Platform Standalone 平台独立层

1.6.6 核心系统

游戏引擎及其他大型软件都会有自己的实用工具集(Utility),书中称为 核心系统 ,核心系统的常见功能包括:

  • 断言:断言是一种检查错误的代码,用来捕捉逻辑错误或与预期不符的错误,在最终发布版本中,一般会移除断言检查 (UE引擎源码中依然有很多这类检查)
  • 内存分配:几乎每个游戏引擎都有自定义的内存分配器,保证高速的内存分配及释放,并控制内存碎片导致的负面影响
  • 数学库:游戏本质上是高度数学密集的,使用了大量数学 (旋转,向量,直线曲线等) ,因此,每个引擎都有一个或多个数学库 (UE的是UKismet库)
  • 自定义数据结构及算法:除非引擎想要完全依赖第三方SDK,否则引擎通常需要提供一组自己的数据结构和管理方式,通过手动编码,减少或消除内存动态分配的方式,以保证在目标平台上效率最优 (如UE中提供了TMap, TArray等)

1.6.7 资源管理器

待完善

This post is licensed under CC BY 4.0 by the author.