1.5部分是游戏引擎的介绍
暂时跳过这一部分(因为书籍有一定的时间延迟)
1.6 运行时引擎架构:
1.6 运行时引擎架构
游戏引擎通常由两部分组成:工具套件和运行时组件。 上图显示了典型 3D 游戏引擎的主要运行时组件。 而且这张图不包括工具方面。
与所有软件系统一样,游戏引擎也是构建在软件层中的。 通常上层依赖下层,下层不依赖上层。
当上层依赖于下层时,就变成了循环依赖。 在任何软件系统中,都必须尽可能避免循环依赖,否则会导致系统之间复杂的耦合,使软件难以测试,阻碍代码复用。
目标硬件
设备驱动
设备驱动程序是操作系统或硬件制造商提供的最低级别的软件组件。
负责管理硬件资源的同时人物立绘,也隔离了操作系统和上层引擎游戏引擎初始化失败,使得上层软件不需要了解不同硬件版本之间通信细节的差异。
操作系统
PC 上的操作系统始终在运行。 操作系统协调计算机上多个程序的执行,其中一个程序可能是游戏。
在最早的游戏机上,操作系统通常只是链接到游戏可执行文件的轻量级库,而游戏通常“拥有”整个游戏机。 但随着发展,PC和游戏机之间的区别正在慢慢缩小。
第三方软件开发套件和中间件
注:由于本书出版时间的限制,下面提到的第三方软件开发包与当前的有所不同。 这本书应该主要关注PS3时代。
数据结构和算法
图形
碰撞和物理
角色动画
人工智能
生物力学角色模型
内啡肽和欣快感:
注意:侠盗猎车手 4 是使用 Euphoria 的知名游戏之一。 NPC 会对外部环境做出自然反应。
平台独立层
平台无关层封装常用标准C语言库、操作系统调用等基础API,保证封装的接口在所有硬件平台上一致。
核心系统
常用功能:
断言:断言是检查错误的代码。 断言被插入到代码中以捕获逻辑错误或发现与程序员最初假设不一致的错误。 在最终的生产版本中,通常会删除断言检查。
什么是断言:
虚幻文档中的断言:
内存管理
几乎每个游戏引擎都有一个或多个自定义内存分配系统,以确保快速内存分配和释放并控制内存碎片的负面影响。
数学图书馆
就其本质而言,该游戏是高度数学密集型的。 因此,每个游戏引擎都有一个或多个数据库游戏引擎初始化失败,提供向量、矩阵、四元数旋转、三角学、线/射线/球体/平截头体等的几何运算、样条运算、数值积分、求解方程组、以及游戏程序员需要的其他功能。
关于四元数和旋转,可以看下面这篇文章,写得很好:
自定义数据结构和算法
除非引擎设计者希望完全依赖第三方软件包,例如STL,否则引擎通常会提供一套工具来管理基本数据结构和算法。
资源管理
每个引擎都有某种形式的资源管理器,提供一个统一的接口或一组统一的接口来访问任何类型的游戏资产和来自其他引擎的输入数据。
渲染引擎
渲染引擎通常使用分层架构来设计。
低级渲染器
这包含引擎中的所有原始渲染功能。 该层的设计重点是渲染一组丰富的几何图元。
场景图/剔除优化
关于这部分更详细的内容,可以阅读我之前博客中BSP树相关的文章。
低级渲染器绘制所有提交的几何图形,而不考虑这些形状是否实际上可见。 通常,更高级别的组件需要基于某种可见性判别算法来限制提交的基元的数量。
非常小的游戏世界可能只需要简单的视锥体剔除算法(即删除相机无法“看到”的对象)。
更大的游戏世界可能需要更高阶的空间细分数据结构2d游戏素材,这可以快速识别潜在可见集(PVS)并使渲染更加高效。 有关空间分割的更多信息,您可以阅读以下文章:
视觉效果
图形引擎支持多种视觉效果,包括:
部分全屏后处理效果如下:
前端
分析和调试工具
碰撞和物理
碰撞和物理系统通常紧密相连,因为当碰撞发生时,它们几乎总是通过物理积分和约束满足逻辑来解决。
动画片
游戏使用 5 种基本动画:
本书将主要讨论骨骼动画系统。
人机界面设备
声音的
如果没有出色的音频引擎,任何出色的游戏都是不完整的。
在线多人/网络
游戏基础系统
游戏玩法
游戏世界和游戏对象模型
事件系统
脚本系统
人工智能基础知识
这里提到了一个叫Kynapse的商业AI,它作为人工智能的基础层。 特点包括:
单独的游戏特定子系统
1.7 工具和资产管道
这部分就不过多介绍了。