GEA 1.6 运行时引擎架构

游戏引擎以软件层构成

  • 通常情况下上层依赖下层
  • 当下层依赖上层时会出现循环依赖的现象导致系统之间复杂的耦合导致异常
    GEA 1.6 运行时引擎架构_第1张图片

1.6.1 目标硬件

PC或者游戏主机

1.6.2 设备驱动程序

管理硬件资源使上层软件不需要理解不同硬件的通信细节差异

1.6.3 操作系统

操作系统协调一台计算机上多个程序的运行

1.6.4 第三方软件开发包和中间件

英文简称SDK和middleware为应用程序提供接口

1.6.4.1 数据结构及算法

一些第三方数据结构和算法库

  • STL:C++标准模板库
  • STLport可移植的,优化过的STL实现
  • Boost:数据结构与算法库
  • Loki:泛型编程Genneric programming
    注意:STL内存分配模式不高效,这一点在游戏主机上体现更加明显

1.6.4.2 图形

大多数书游戏渲染引擎都建立在硬件接口库之上

  • OpenGL
  • DirectX
  • libgcm在PS3上更加高效 是一个低阶直接接口
  • Edge PS3的渲染和动画引擎

1.6.4.3 碰撞和物理

碰撞检测和刚体动力学

  • Havok
  • physX 来自unity
  • ODE开源

1.6.4.4 角色动画

  • Granny
  • Havok Animation
  • Edge

1.6.4.5 人工智能

  • KynapseSDK

1.6.4.6 生物力学角色模型

Endorphin和Euphoria

1.6.5 平台独立层

把其余的引擎部分和底层平台进行隔离 确保包装后的接口在所有硬件平台上均为一致

1.6.6 核心系统

核心系统层的常见功能:

  • 断言 assertion 捕捉逻辑错误
  • 内存分配 保证高速的内存分配和释放,控制内存碎片所带来的负面影响
  • 数学库:矢量、矩阵、四元数旋转、三角学、集合操作、样条线spline操作、数值积分、解方程组
  • 自定义数据结构与算法:有时需要手动配置来提高运行效率

1.6.7 资源管理器

统一的资源管理接口以便访问游戏接口

  • 虚幻的包
  • OGRE的ResourceManager

1.6.8 渲染引擎

渲染引擎设计采用的是分层架构

1.6.8.1 低阶渲染器

设计着重于高速渲染几何图元而非其是否可见
低阶渲染器同样会进行视觉抽象
同样也会使用材质系统和动态光照系统
同时应用vertex和frag
其分为以下一些组件

图形设备接口

使用SDK 枚举设备 初始化设备 建立渲染表面(stencil buffer,后台缓冲等)
消息泵问题,放于后续处理

其他渲染器组件

收集需提交的几何图元

1.6.8.2 场景图/剔除优化

因为低阶渲染器只提供了背面剔除和摄像机镜头方向的剪切平面
需要进入更高层次的组件才可以限制图元是否显示
场景图也就是空间分割算法

  • 二元空间分割树
  • 四叉树
  • 八叉树
  • kd树
  • 包围球树

1.6.8.3 视觉效果

  • 粒子系统
  • 贴花系统
  • 光照贴图、环境贴图
  • 动态阴影
  • 全屏后期处理效果
  • 高动态范围和色调映射
  • 全屏抗锯齿
  • 颜色矫正以及颜色偏移

1.6.8.4 前端

使用一些2D图片去覆盖3D场景
这些目的包括

  • HUD
  • 内置菜单主控台以及其他开发工具
  • GUI
  • Full motion video
  • 游戏内置电影

1.6.9 剖析和调试工具

内存分析工具,游戏内置菜单,主控台以及回访功能

  • 手工测试代码实现一些调试功能
  • 性能统计

1.6.10 碰撞和物理

刚体动力学研究力和力矩以及运动
一般使用外部SDK
Havok是今天的业界标准
physX是虚幻引擎4中可以用是NVIDIA公司的

1.6.11 动画

游戏会用到五种基本动画

  • sprite动画
  • rigid body hierarchy动画
  • 骨骼动画
  • 顶点动画
  • 变形目标动画
    骨骼动画是最流行的动画方式
    骨骼网格渲染组件是连接渲染器和动画系统的桥梁
    动画系统的骨骼以矩阵调色板(matrix palette)形式传至渲染引擎,在渲染器中最终生成顶点位置的过程称为蒙皮
    Ragdoll对于死了的角色其骨骼完全交由物理系统模拟决定

1.6.12人体学接口设备(HID)

IO组件:输入输出组件
HID引擎:让个别硬件平台游戏控制器的低阶细节与高阶游戏操作脱钩。

1.6.13 音频

开发每个游戏的时候需要大量的定制软件开发才可以制作出有高质量音频的最终产品

1.6.14 在线多人/网络游戏

支持多人设备会极大地影响某几个游戏引擎组件的设计,最好在项目开始之初就确定是否支持多人游戏。但同时将多人游戏改装为单人游戏更为简单,可以将单人游戏当作多人游戏的一个特例。

1.6.15 游戏性基础系统

游戏性基础层实现游戏内进行的活动,支配虚拟世界的规则以及玩家角色的能力。

1.6.15.1 游戏世界和游戏对象模型

想清楚游戏对象模型与软件对象模型,

1.6.15 .2 事件系统

事件传递给接受对象时调用接受对象的事件处理函数
事件存储在队列上以便未来处理

1.6.15.3 脚本系统

提高开发效率 更改游戏逻辑和数据只需修改脚本代码并且重新载入就可以不需要重新编译链接方可执行程序

1.6.15.4 人工智能基础

将各个游戏中普遍存在的通用部分写成一个SDK集成于引擎当中,使制作规模宏大的游戏更加容易。

1.6.16 个别游戏专用子系统

特定游戏设计所需要的基础软件制作

你可能感兴趣的:(GEA笔记,游戏引擎,游戏开发)