目录

  • 系列文章前言
  • 游戏是什么
  • 游戏引擎是什么
  • 运行时引擎架构
  • 总结

系列文章前言

  《游戏引擎架构》一直被奉为游戏引擎方向的泰斗之作,难能可贵的是其不但内容翔实,可读性也非常强。往往三言两语就把艰深晦涩的知识点讲的清楚明白,可见作者及译者的功力深厚,笔者在读书过程中愈发觉得书中包罗万象,有必要为其做一个个人的总结提炼。


游戏是什么

  “游戏”是什么,每个人都有非常直观的理解。我们接触过的有棋类游戏,纸牌游戏,赌场游戏,军事战争游戏,计算机游戏等等。这里给出几个经典的关于游戏的定义:

  • 学术上有个“博弈论”,它是指在一个明确的游戏规则框架下,多个代理人选择策略及战术,以求达到利益的最大化。

  • 拉夫·科斯特把游戏定义为一种互动体验,为玩家提供一系列渐进式挑战,玩家最终能通过学习精通整个游戏。拉氏把学习和精通作为游戏的乐趣,正如你听一个笑话,明白笑点的一瞬间才感觉有趣。

  • 在计算机科学家口中,游戏被称为 软实时互动基于代理的计算机模拟。这个词组实在精妙,可能是从科学层面对电子游戏最好的概括,我们把这个词组拆分讨论以便理解

    计算机模拟是指在大部分电子游戏中,会用数学的方式为一些真实世界的子集建模。但很明显,我们不可能完全模拟世界的所有细节,所以这些模型只是真实世界的简化或近似化版本,“近似化”和“简化”是游戏开发者最重要的工具。

    代理则是指模拟中多个独立的实体一起互动,游戏中的载具,角色,火球等都可视为代理。从这个角度上说,更广为人知的说法是“对象”。

    互动是游戏世界的另一个重要概念。随着游戏事件和故事的展开,游戏世界的状态随着时间改变,游戏也必须回应玩家的输入,这些输入是游戏本身不可预知的。

    时限则是所有实时互动模拟的核心概念,在电子游戏中,典型的例子是屏幕每秒最少更新24次以造成动作的错觉。当然电子游戏也有其他类型的限制,如物理模型可能需要每秒更新120次以保持稳定,这里就不赘述。

    实时系统是指一些系统即使错过期限也不会造成灾难性后果。如果帧数不足,人类玩家在现实中不会怎么样,与此相对的是直升机的航空电子系统这类“硬实时系统”。

  模拟虚拟世界许多时候要用到数学建模。数学模型可分为“分析式”,或“数值式”。例如一个刚体受地心引力以恒定加速度落下,其分析式可写为:

  对于给定的初始条件,就能设任意时间t求y(t)的值,可是大部分数学问题并没有这种闭型解。在游戏世界中,用户输入是不能预知的,因此不能期望对整个游戏完全用分析式。
  刚体受地心引力落下的数值式模型可写为,即是说刚体在未来一段时间的高度,可以用目前的高度,高度的第一导数,高度的第二导数及目前时间t作为参数来表示。为实现数值式模拟,通常需要不断重复计算,以决定每个离散时间的系统状态。游戏也是如此运作,一个主循环不断执行,在循环的每次迭代中,各个游戏系统就有机会计算或更新出下一离散步时的状态。这些结果最后可渲染成图形显示,或者输出到其他设备。


游戏引擎是什么

  “游戏引擎”这个术语最早出现于20世纪90年代中期。与著名的FPS游戏《Doom》有关,《Doom》当时的软件架构被相当清楚的划分为核心软件组成,美术资产,游戏世界,游戏规则。这种划分的价值在后续逐渐体现出来,另一个开发商取得授权后,只需要改动很少一部分,就可以把游戏打造成一个新产品。同时它也引发了mod社区的兴趣。

  20世纪90年代末,一些游戏开发商在设计时已经有意识的考虑到复用性和mod,如《雷神之锤》。同时,游戏工作室也开始对外授权引擎。

  通常,游戏和引擎之间的区分是很模糊的。如果要做个区分,我们大概可以用“数据驱动架构”来分辨软件的哪一部分是引擎,哪一部分是游戏。若一个游戏包含硬编码逻辑,复用该软件去制作另一个游戏会变得非常困难。因此,这里的“游戏引擎”值得就是可扩展可复用的软件,不需要过多修改就能作为大多数游戏的基础。

  很显然,这样的游戏引擎不可能变成一个通用软件,大部分引擎是针对特定游戏或者特定硬件平台微调的。出现这种现象的原因是设计高效的软件总是要经过取舍的,例如一个为渲染紧凑的室内环境而设计的引擎就不能很好的渲染广阔的室外场景。随着计算机技术和硬件的发展,不同游戏类型的图形引擎差异已经缩小,但通用性和最优性依然需要取舍。实际上,现在的一些比较通用的游戏引擎,也只是适合制作某些类型的游戏。


运行时引擎架构

  游戏引擎通常由工具套件和运行时组件两部分构成,下图展示了一个典型三维游戏引擎的主要运行时组件。可见,游戏引擎无疑是一个非常庞大的软件系统。正如所有的大型软件系统,游戏引擎也进行了分层,通常上层依赖下层,下层不依赖上层。

王希老师的Games104课程中把游戏引擎分为工具层,方法层,资源层,核心层,平台层和第三方软件包,这样5+1的架构。本文余下部分会综合这两种说法简要介绍各部分组件。

  1. 硬件,驱动和操作系统:硬件层表示用来执行游戏的计算机系统或游戏主机,典型平台包括PlayStation,Windows等。驱动程序负责管理硬件资源并隔离了操作系统和上层引擎。而操作系统负责协调一台硬件设备上多个程序执行。本系列大部分内容与这三部分无关。

  2. 第三方软件包:大部分游戏引擎都会借用第三方软件开发包(SDK)及中间件(middleware),它们提供一些基于函数或类的接口(API),下面介绍几个例子

    • 数据结构和算法:STL
    • 图形:OpenGL,DirectX
    • 碰撞和物理:Havok
    • 角色动画:Granny,Havok Animation
    • 人工智能:Kynapse
  3. 平台独立层:大多数游戏引擎需要运行在多平台之上,而平台独立层包装了一些基础API,确保包装了的接口在所有的硬件平台上均为一致。平台独立层位于硬件,驱动,操作系统和第三方软件之上,把引擎的其余部分同底层平台隔离。

  4. 核心层:核心层包括了一些实用软件,包括容器创建,内存分配,数学计算,线程管理等,核心层为更上层提供支持。

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

  6. 方法层:方法层提供游戏绘制,运动等基础功能,它包括很多内容,最主要的有:

    • 渲染:在任何游戏引擎中,渲染都是最大和最复杂的组件之一。虽然现代渲染器有很多不同的架构方式,但大多数渲染引擎都有一些通用的设计哲学,比如分层架构等等,这里暂且按下不表,后续的文章会做更详细的介绍。
    • 碰撞和物理:碰撞和物理系统是紧密连接的,因为当碰撞发生时,碰撞几乎都是由物理积分和约束满足逻辑来解决的。如今很少有游戏公司会编写自己的物理引擎,取而代之的是第三方的物理SDK,例如:Havok,PhysX
    • 动画:骨骼动画是如今最流行的动画方式,上图中展示了一个典型的骨骼动画系统。
  7. 工具层: 工具层指能直接和开发者交互的一系列开发工具。比如性能和调试工具,地图编辑器等等

  8. 游戏性基础系统:游戏性这一术语是指游戏内进行的活动、支配游戏世界的规则,玩家角色的能力,其他角色的能力,玩家的长短期目标等,游戏性系统是电子游戏乐趣的来源。


总结

今天的文章主要介绍了对游戏和游戏引擎的理解,以及运行时游戏引擎的架构,算是给本系列开了个头。希望能够有始有终完成这个系列。

【《游戏引擎架构》提炼总结】(一)游戏是什么,游戏引擎架构导论相关推荐

  1. ps游戏在什么系统下开发_引擎级防沉迷! Unity携手腾讯游戏推出防沉迷系统开发工具...

    2020年5月18日,深圳 – 今日,腾讯游戏对外宣布,联手全球领先的实时3D内容创作平台Unity共同推出防沉迷系统开发工具,该工具将由腾讯成长守护平台提供技术后台支持. 目前Unity是业内应用最 ...

  2. unity 3d水的资源包_引擎级防沉迷! Unity携手腾讯游戏推出防沉迷系统开发工具...

    2020年5月18日,深圳 – 今日,腾讯游戏对外宣布,联手全球领先的实时3D内容创作平台Unity共同推出防沉迷系统开发工具,该工具将由腾讯成长守护平台提供技术后台支持. 目前Unity是业内应用最 ...

  3. 在虚幻引擎5中构建你的首款游戏 - 10[完] - 特效音效镜头震动打包

    在虚幻引擎5中构建你的首款游戏 - 10[完] - 特效&音效&镜头震动&打包 前言介绍: 原版地址: << [功能亮点]在虚幻引擎5中构建你的首款游戏(官方字幕) ...

  4. 时下几款著名的游戏引擎介绍,也许你只听说过“虚幻引擎”

    "游戏引擎"顾名思义,就是指一款游戏的"引擎".(好吧,我知道这句话是废话......) 让小编给大家举一个更加形象的例子:大家不妨联想一下汽车引擎. 汽车之所 ...

  5. 手机游戏服务器都是什么协议,手机网游的服务器架构

    在今日(3月15日)于国家会议中心举办的"2014CocoaChina春季开发者大会"上,UCloud高级架构师韩新亮分享了网络游戏的服务器架构问题,以及他认为的优秀游戏架构的特征 ...

  6. 基于egret引擎、P2物理库的搭积木游戏

    最近更新源代码: https://github.com/lixintong1992/egret_game 最近不务正业,参加了一个HTML5游戏设计比赛.速成了一个搭积木游戏. http://dev. ...

  7. LayaAir引擎放弃Canvas API,打造次世代3D引擎与云游戏引擎,提供AI赋能!

    LayaAir引擎放弃Canvas原生API,并不等于放弃2D,而是为更好的发展2D和3D!那为什么要放弃Canvas原生API,以及LayaAir引擎未来的发展规划,这里我们来和大家聊一聊! 1.C ...

  8. 在虚幻引擎5中构建你的首款游戏 - 05 - 岩石和植物

    在虚幻引擎5中构建你的首款游戏 - 05 - 岩石和植物 前言介绍: 原版地址: << [功能亮点]在虚幻引擎5中构建你的首款游戏(官方字幕)_哔哩哔哩_bilibili >> ...

  9. 在虚幻引擎5中构建你的首款游戏 - 04 - 地形和草地

    在虚幻引擎5中构建你的首款游戏 - 04 - 地形和草地 前言介绍: 原版地址: << [功能亮点]在虚幻引擎5中构建你的首款游戏(官方字幕)_哔哩哔哩_bilibili >> ...

  10. Vision 引擎8.2带来了跨平台的3D游戏技术

    Vision 引擎8.2带来了跨平台的3D游戏技术 美国旧金山-2011年10月11日-Havok公司,一家游戏和娱乐产业中知名的互动软件提供商,今天发布公告:正式推出Vision引擎最新版本Visi ...

最新文章

  1. 与word2vec_NLP--Word2Vec详解
  2. 心电图心电轴怎么计算_浅谈心电图
  3. python list的一个面试题
  4. 51 java_51javacms
  5. 50种不同编程语言的“Hello, World”,你会写几种?
  6. C语言课后习题(4)
  7. java 同步块关键字_Java同步关键字,同步方法和块
  8. 苹果Mac测试及维护工具:​​​​​​​​Techtool Pro
  9. navicat 连接mysql is not allowed to connect to this mysql server
  10. 测试用例设计方法——判定表法
  11. ImageAI训练自定义数据总结
  12. 系统服务器断电数据会丢失吗,服务器断电数据丢失恢复原理和图文过程
  13. JavaScript高级程序设计[美]Nicholas C.Zakas著 读书笔记(一)
  14. python聊天室socket+tkinter_基于socket和tkinter的python网络聊天室程序
  15. oracle的listener监听启动报TNS-12555/ TNS-12560 TNS-00525错误
  16. Linux配置ntp时间同步
  17. 在linux服务器上安装git
  18. 难做的IP游戏 究竟要如何才能跨时代持续成功?
  19. 数据结构(C语言描述)——复数
  20. ch.ethz.ssh2._MindTerm SSH客户端3.4版已发布

热门文章

  1. 葫芦兄弟java7723_颠峰对决之喜羊羊大战葫芦娃
  2. 【机器视觉】二维码检测(QR 码)
  3. QR码生成原理(一)
  4. NeRF神经辐射场学习笔记(十)— BungeeNeRF(CityNeRF)实现以及代码注释
  5. 在中国搞定粉丝秘笈:如何创造粉丝经济
  6. 移动apn接入点哪个快_千兆交换机和快速以太网交换机哪个更好呢?
  7. Python基础知识之7
  8. mem leak debug
  9. 阿里、华为和微软等多家国内外厂商组团搞OpenJDK,Oracle为啥不参加?
  10. 小马哥robofly四轴代码解读:PWM电机输出