游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。
游戏引擎包含以下系统:
- 渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、
- 物理引擎、
- 碰撞检测系统、
- 音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
对于游戏开发者来说,引擎可以理解为一个封装好的盒子,它的功能是提供调用接口,好让一些复杂的事情通过这个盒子之后变的简单。
常见的游戏引擎有:
- 2D: Cocos2dx
- 3D: Unity3D UE4
游戏引擎:
- 多个低阶基础系统
- 渲染引擎
- 碰撞系统
- 物理模拟
- 人物动画
- 游戏性基础层
- 游戏对象模型
- 世界编辑器
- 事件系统
- 脚本系统
- 游戏性编程
- 玩家机制
- 摄像机
- 人工智能
大规模软件工程中的一些技巧:
- 逻辑软件架构和物理软件架构的区别
- 配置管理(Configuration management)、版本控制(Version control)、生成系统(build system)
- 常用C++开发环境与技巧
读者可以学以下内容:
- 如何架构工业级生产用的游戏引擎
- 游戏团队如何组织及运作
- 主要子系统以及设计模式
- 主要子系统的典型需求
- 那些子系统与游戏类型或者具体游戏无关. 那些子系统与某些特定类型游戏设计
- 引擎与游戏的边界
FPS游戏常会注重技术 例如:
- 高效地渲染大型三维虚拟世界
- 快速反应的摄像机控制以及瞄准机制
- 玩家的虚拟手臂和武器的逼真动画.
- 各式各样的手持武器.
- 宽容的玩家角色运动以及碰撞模型. 通常使游戏有种 “漂浮” 的感觉
- 非玩家(如玩家的敌人及同盟)有逼真的动画及智能
- 多人游戏的能力
FPS中使用的渲染技术几乎总是经过高度优化的.并且根据特定场景类型仔细调整过的.
室内: BSP 二元空间分割树 或 基于入口 的渲染系统
室外: 遮挡剔除(Occlusion culling) 或者预先把游戏世界分区划(sectorizationin).
- 游戏引擎通常由 工具套件 和 运行时组件 两部分构成.
运行时游戏引擎架构
上层依赖下层. 避免循环依赖. 即下层不依赖上层.
从底层向上层:
硬件层
设备驱动层
操作系统
第三方软件开发包
- SDK或中间件
- 如 DirectX OpenGL PhysX STL Boost
数据结构
图形
物理
角色动画
AI
平台独立层
平台检测、元子数据类型、
集合和迭代器、
文件系统、
网络传输层、
高分辨率时钟
线程库、
图形包裹类
物理(碰撞)包裹类
核心系统
这一层主要是 一些有用的实用软件!(Utility)
包括了以下这些常用功能:
断言(Assert)
- 用于检测错误的代码;
内存管理
- 一个或多个自定义的内存分配系统;
数学库:
- 一个以上的数学库;
- 提供 矢量、矩阵、四元数、三角学、直线、光线、球体、视椎体等几何操作;
自定义的数据结构与算法:
- 保证优化
渲染引擎
渲染引擎的设计通常采用分层架构。
低阶渲染器
高速渲染几何图元集合。不考虑场景可见性。
可以分为以下几个子组件:
图形设备接口
- 使用图形SDK;如:OpenGL、DirectX
- 枚举图形设备、初始化设备、建立渲染表面等
其他渲染器组件
-
ViewPort
-
Camera
-
材质系统
-
动态光照系统
场景图、剔除优化
低阶渲染器会有: 背面剔除 和 视椎体剔除。
低阶渲染器无需知道上层使用了哪种场景剔除方案。
场景图提供的是游戏世界中的不可见物体的剔除。
视觉效果
游戏引擎支持广泛的视觉效果:
- 粒子系统
- 贴花系统
- 光照贴图 以及 环境贴图
- 动态阴影
- 全屏后期处理效果
游戏引擎常有 效果系统 组件。专门负责处理 粒子、贴花、其他视觉效果的渲染需要。
- 粒子、贴花系统通常是渲染引擎独立的组件,并作为低阶渲染器的输入端。
前端
- GUI等
剖析和调试工具
- 内存分析工具
- 录像和回放
- 图形调试等
碰撞和物理
物理系统
布娃娃物理
- 当使用布娃娃时,动画和物理系统紧密耦合。
- 布娃娃是无力的。常是死亡的角色,其运动完全由 物理系统模拟。
- 物理系统会把布娃娃当做受约束的刚体系统,来模拟决定身体每个部分的位置和方向。
动画
五种基本动画:
- 精灵、纹理动画(Sprite / Texture Animation)
- 刚体层次结构动画 (rigid body hierarchy Animation)
- 骨骼动画 (skeletal Animation)
- 每顶点动画 (per-vertex animation)
- 变形目标动画(morph target animation)
骨骼动画。
骨骼网格渲染组件 是 连接 渲染器 和 动画系统 的桥梁。
-
动画系统生成骨骼中所有骨头的姿势。
-
这些姿势以矩阵调色板(Matrix Palette)形式传递给渲染引擎。
-
渲染器利用矩阵表去转换顶点。每个顶点用一个或者多个矩阵最终混合顶点位置。这个过程叫做蒙皮Skinning。