Skip to content

Commit

Permalink
Update 2024-03-01-游戏引擎架构 第一章 导论.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Makstein committed Jun 18, 2024
1 parent cb5cfcf commit 26803a4
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions _posts/2024-03-01-游戏引擎架构 第一章 导论.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,83 @@ MMO的核心为一组非常强大的服务器,负责处理管理员/用户登
例如 `我的世界` ,玩家可在随机生成的地图上自由建造和创作


## 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.4.7 平台独立层



待完善

0 comments on commit 26803a4

Please sign in to comment.