找回密码
 立即注册
查看: 270|回复: 0

程序小白如何开发自己的游戏引擎3:游戏引擎架构

[复制链接]
发表于 2022-7-4 17:59 | 显示全部楼层 |阅读模式
本篇我们主要学习一般的游戏引擎都包含哪些内容,主要是由工具套件和运行时组件两部分组成。以下所有内容均来自《游戏引擎架构》一书,这里只是总结学习。
一. 运行时组件

下图就显示了一个典型的三维游戏引擎的主要运行时组件。通常上层依赖下层,下层不依赖上层。



游戏引擎架构

1. 目标硬件

这层主要是代表运行游戏的平台或者游戏主机。主要有基于Windows,Linux或者MacOS的PC,基于IOS或者Android系统的手机或者平板,索尼的PlayStation系列,微软的XBox系列,任天堂的掌机等等。
2. 设备驱动程序

设备驱动主要负责管理硬件资源,屏蔽了操作系统和上层引擎,使得上层的软件不需要知道不同硬件的细节。
3. 操作系统

在PC,手机和平板上,操作系统一般同时运行着多个软件,使用时间片的方式共享硬件,这称为抢占式多任务,我们不能拥有所有硬件的控制权。
但是在游戏主机上,操作系统只运行一个游戏,可以认为我们独占了整台机器。
4. 第三方软件开发包和中间件

大部分引擎都会借用第三方软件开发包及中间件(我们也要!!)

  • 数据结构及算法:STL,STLport,Boost,Loki等。
  • 图形:大多数渲染引擎都是建立在硬件接口库上的,比如OpenGL,DirectX等。
  • 碰撞和物理:主要有碰撞检测和刚体动力学两部分组成,比如Havok,PhysX等。
  • 角色动画:Havok等。
  • 人工智能:主要提供一些与AI相关的接口,例如寻路啊,动态避让等。
  • 生物力学角色模型:主要是考虑了角色的重心,体重分布和地心引力和其他作用力的影响下如何平衡的运动。
5. 平台独立层

游戏引擎需要运行在不同的平台之上,所以需要一层把其余的引擎部分和大部分底层平台隔离。
6. 核心系统

游戏引擎及其他大规模复杂的C++软件都需要一些有用的使用软件,包括断言,内存分配,数学库,自定义数据结构和算法,调试用打印及日志,异步文件I/O等。
7. 资源管理器

主要是提供接口去访问任何类型的游戏资产和其他引擎输入数据。
8. 渲染引擎

在任何游戏引擎中,渲染引擎都是最大及最复杂的组件之一,渲染引擎的设计通常采用分层架构。

  • 低阶渲染器:包含引擎中全部原始的渲染功能,着重于高速渲染丰富的几何图元集合。其中图形设备接口,使用图形SDK(如OpenGL,DirectX)初始化设备,建立渲染表面等;其他渲染组件收集需要提交的几何图元(网格,线表,点表,粒子,地形块,字符串等),根据低阶渲染器提供的viewport将相机结合至世界坐标及三维投影参数;低阶渲染器也使用材质系统及动态光照系统管理图形硬件的状态和游戏的着色器。
  • 场景图/剔除优化:低阶渲染器绘制所有被提交的几何图形,不太考虑这些图形是否确实可见,一般简单的游戏时间只使用背面剔除和相机平截头体的剪切平面就好了,复杂的游戏世界需要高阶的空间细分,包括二元空间分割树,四叉树,八叉树,kd树,包围球树等。
  • 视觉效果:粒子系统,贴花系统,光照贴图,动态阴影,全屏后期处理效果等。
  • 前端:HUD,游戏内置GUI,IGC,FMV等。
9. 刨析和调试工具

游戏是实时系统,所以经常要刨析游戏的性能,以便优化。主要包括内存分析工具,调试用绘图,游戏内置菜单,主控台以及能够录制和回放游戏的功能。
10. 碰撞和物理

主要包括碰撞检测和刚体动力学模拟。一般需要实现布娃娃系统,刚体,碰撞检测,力及约束等。
11. 动画

一般有5种基本动画:精灵/纹理动画,刚体层次结构动画,骨骼动画,顶点动画,变形目标动画。
12. 人体学接口设备

主要用于处理玩家输入,常见的输入设备有键盘鼠标,游戏手柄,还有其他游戏专用控制器,比如方向盘,鱼竿等。
13. 音频

游戏引擎中的音频和图形同样重要,难以想象一个没有声音的游戏,但是这么重要的功能却常常被忽略。
14. 在线多人/网络游戏

让多位玩家同时在同一个虚拟世界游玩,本地多人或者在线多人。
15. 游戏性基础系统

就是属于这个游戏的所有专有逻辑。包含游戏世界和游戏对象模型,事件系统,脚本系统,AI等。
16. 个别游戏专用子系统

为一些特定游戏专门开发的系统,比如相机,武器,道具,AI等。
二. 工具及资产管道

游戏引擎需要读取大量的数据,包括游戏资产,配置文件,脚本等。
1. 数字内容创作工具

游戏的内容大部分都是由美术人员使用数字内容创作工具(DCC)制作出来的,包括Maya和3ds Max制作的三维网格模型和动画数据,PhotoShop制作的图片,纹理,Sound Forge制作的音频等。
2. 资产调节管道

DCC制作出来的数据其实不是很适合用于游戏引擎,主要原因是:

  • DCC软件的内存模型太过复杂。
  • 读取DCC软件格式的文件太慢。
所以数据从DCC导出后我们还需要进行再处理,才能在游戏引擎中使用。从DCC到游戏引擎的管道叫做资产调节管道。
3. 世界编辑器

很多复杂的游戏世界都需要专门的大世界编辑器来存储和编辑游戏世界。
4. 资源数据库

游戏引擎需要处理多种资产类型,每种资产都带有大量的元数据,我们可以把这些元数据存在数据库中也可以存成文本文件,之后还需要提供一个用户界面让使用者创造和编辑这些数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 00:30 , Processed in 0.088607 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表