游戏引擎架构【笔记二】

1.5 的部分是关于游戏引擎的介绍

这部分暂时略过(因为书籍有一定的时间延迟)

1.6运行时引擎架构:

1.6 运行时引擎架构

游戏引擎通常由工具套件和运行时组件两部分组成。上图显示了一个典型三维游戏引擎的主要运行时组件。且此图并未包含工具方面。

如同所有的软件系统,游戏引擎也是以软件层构建的。通常上层依赖下层,下层不依赖上层。

当上层依赖下层时,成为循环依赖。再任何软件系统中,循环依赖都要极力避免,不然会导致系统间复杂的耦合,也会使软件难以测试,并妨碍代码重用。

目标硬件

设备驱动程序

设备驱动程序是由操作系统或硬件厂商提供的最低阶软件组件。

负责管理硬件资源,也隔离了操作系统及上层引擎,使上层的软件无须理解不同硬件版本的通信细节差异。

操作系统

PC上的OS是一直在运行的,OS协调一台计算机上多个程序的执行,其中一个程序可能是游戏。

在最开始的游戏主机上,操作系统通常只是个轻量级的库,链接到游戏的执行档里,游戏通常“拥有”整个主机。但是随着发展,PC和游戏机的分野正在慢慢收窄。

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

注意:这里由于书籍出版时间的限制,所以下面提到的第三方软件开发包和现在有一定差异,书中主要面向的应该是PS3的时代。

<1>数据结构及算法

  • STL
  • STLport
  • Boost
  • Loki

<2>图形

  • Glide
  • OpenGL
  • DirectX
  • libgcm
  • Edge

<3>碰撞和物理

  • Havok
  • PhysX
  • Open Dynamics Engine(ODE)

<4>角色动画

  • Granny
  • Havok Animation
  • Edge

<5>人工智能

  • Kynapse

<6>生物力学角色模型

Endorphin和Euphoria:

注释:《侠盗猎车手4》是其中一个利用了Euphoria的知名游戏。NPC会对其外在环境生成自然反应的动作。

平台独立层

平台独立层包装了常用的标准C语言库、操作系统调用及其他基础API,确保包装了的接口在所有硬件平台上均一致。

核心系统

常见功能:
<1>断言(assertion):断言是一种检查错误的代码。断言会插入代码中捕捉逻辑错误或找出与程序员原来假设不符的错误。在最后的生产版本中,一般会移除断言检查。

什么是断言:

https://www.jianshu.com/p/22701f40430a

虚幻文档中的断言:

https://docs.unrealengine.com/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/Assertions/index.html

<2>内存管理

几乎每个游戏引擎都有一个或多个自定义内存分配系统,以保证高速的内存分配和释放,并控制内存碎片所造成的负面影响。

<3>数学库

游戏本质上就是高度数学密集的。因此,每个游戏引擎都有一个或以上数据库,提供矢量、矩阵、四元数旋转、三角学、直线/光线/球体/平截头体(frustum)等的几何操作、样条线操作、数值积分、解方程组,以及其他游戏程序员需要的功能。

关于四元数和旋转可见下面这篇文章,写的很好:

https://zhuanlan.zhihu.com/p/104288667

<4>自定义数据结构和算法

除非引擎设计者想完全依靠第三方软件包,如STL,否则引擎通常要提供一组工具去管理基础数据结构以及算法。

资源管理

每个引擎都有某种形式的资源管理器,提供一个或一组统一接口,去访问任何类型的游戏资产及其他引擎的输入数据。

渲染引擎

渲染引擎的设计通常采用分层架构。

<1>低阶渲染器

这里包含引擎中全部原始的渲染功能。这一层的设计着重于告诉渲染丰富的几何图元集合。

  • 图形设备接口:使用图形SDK,都需要编写不少代码去枚举图形设备,初始化设备,建设渲染表面等。这些工作通常由书籍作者称为图形设备接口的组件负责。
  • 其他渲染组件:低阶渲染层的其他组件一起工作,目的是要收集须提交的几何图元(geometric primiitive)。最后将收集到的图元尽快渲染。低阶渲染器通常提供视区抽象,每个视区结合了摄像机至世界矩阵,三维投影参数如视野、近远剪切平面的位置等。
  • 低阶渲染器也使用材质系统动态光照系统去管理图形硬件的状态和游戏的着色器。每个已经提交的图元都会关联到一个材质及被照射的n个动态光源。
  • 材质是描述当渲染图元时,应该使用什么纹理,设置什么设备状态,并选择哪一对顶点着色器和像素着色器。
  • 光源则决定如何应用动态光照计算于图元上。

<2>场景图/剔除优化

这部分更仔细的部分,可以看我之前博客中的BSP树相关文章。

低阶渲染器绘画所有被提交的几何图形,不太考虑那些图形是否确实为可见。一般需要较高层次的组件,才能基于某些可视性判别算法去限制提交的图元数量。

非常小的游戏世界可能只需要简单的平截头体剔除(frustum cull)算法(即去除摄像机不能“看到”的物体)。

比较大的游戏世界可能需要较高阶的空间细分(spatial subdivision)数据结构,这种数据结构能快速判别潜在可见集(PVS),令渲染更有效率。空间分割的更多内容可以看下面这篇文章:

https://gameinstitute.qq.com/community/detail/121167

<3>视觉效果

如图引擎支持广泛的视觉效果,包括:

  • 粒子系统
  • 贴花系统,用作弹孔、脚印等
  • 光照贴图及环境贴图
  • 动态阴影
  • 全屏后期处理效果,在渲染三维场景至屏外缓冲后使用

一些全屏幕后期处理效果如下:

  • 高动态范围光照HDR(准确来说,HDR色调映射tone mapping是后制效果,而HDR光照是在后制之前进行的)
  • 全屏抗锯齿
  • 颜色校正及颜色偏移效果,包括略过漂白、饱和度、去饱和度等

<4>前端

剖析和调试工具

碰撞和物理

碰撞和物理系统一般是紧密联系的,因为当碰撞发生时,碰撞几乎总是由物理积分及约束满足逻辑来解决的。

动画

游戏会用到5种基本动画:

  • 精灵/纹理动画
  • 刚体层次结构动画
  • 骨骼动画
  • 每顶点动画
  • 变形目标动画

这本书会主要讨论骨骼动画系统。

人体学接口设备

音频

没有出色的音频引擎,就没有完整的优秀游戏。

在线多人/网络

游戏性基础系统

游戏性(Gameplay)

<1>游戏世界和游戏对象模型

<2>事件系统

<3>脚本系统

<4>人工智能基础

这里提到了一个称为Kynapse的商用AI,充当人工智能基础层。功能特征包括:

  • 用路径节点和漫游体积组成的网络,定义AI角色可行走的地区和路径,防止与静态世界几何物体碰撞
  • 在漫游地区边界周围的简化碰撞信息
  • 每个区域的入口/出口知识,当中包含敌人能看见或埋伏玩家的地点。
  • 基于著名的A*算法的路径搜寻。
  • 联系碰撞系统及世界模型,进行视线追踪及其他感知。
  • 特制的世界模型。使AI系统知道感兴趣的实体在哪里。并防止和以动物体做动态回避。

个别游戏专用子系统

 

1.7工具及资产管道

这部分不做过多介绍。

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值