游戏的程序运作——引擎概说

●概说

    谈游戏程序构成,不得不谈一下游戏的〝底层引擎〞,所谓底层引擎,可以看作为是一个为硬件平台建立的中介环境。为什麽称之为引擎,因为它具备了启动的力量,就像汽车的引擎概念一般,有了一个发动机,然後我们可以设计底盘、车架、内装外壳等等,一切配备完善了,汽车才终於构成。

    驾驶盘与车上所有的可使用物件,可以看作为游戏提供的介面功能,透过这些功能的操作,我们可以使用与享受这部汽车(游戏),大约就是这样的概念。

    一部汽车,可以更换发动机而获取更大的运转力量,那麽一款游戏呢?更换了引擎,原理上确实也是可以获得更好的表现,但实际上更换游戏引擎的目的,多半是因为跨了不同平台版本,或者做某些效能的提升,相对起来後者的发生机率较小。

    更换游戏引擎和更换汽车引擎的概念也差不多,一般总是要做一些『接口』上的修改。如果变动很大,有时还不如重写得快,例如从2D换成3D引擎,那变动有时是很难计算的。

 

 ●游戏引擎里都有什麽?

    游戏引擎里一般除了根据硬件平台所做的一切环境准备以外(例如与硬件、系统API沟通内存管理等),主要还是在显示上的功能,再则就是一些使用极为频繁的功能,例如音乐、逻辑、脚本解译等等,概念上就是把经常用到的东西放进引擎里,做一些接口供游戏上层呼叫使用。

    而尽管好像放了很多东西,实际上引擎本身尺寸一般还是蛮小的,而且多半加以封装,一般上层的使用者是看不到内部程序怎麽写的,仅知道函式的呼叫方式与规则。这一般是引擎作者对於自己知识产权的保护措施,另一方面,封装起来也比较不会被手贱的程序员乱改,产生一些预期外的错误。

 

    显示模组(模块)    

    每一个硬件平台对於画面显示的方式或者条件、限制不同,而每个引擎可能自身也有一些限制所在。显示模块负责图像、文字显示的功能,由它负责和硬件或者系统API沟通(例如DIRECT X),它本身一般也包含了(或者关连到引擎的)内存管理机制(模块),除了加速显示以外,也避免了上层使用者乱用内存,导致游戏死机的危险。

    除此之外,这其中可能还放置了一些常用图像特效运算的功能模块。

 

    硬件沟通

    前面提到的内存管理以及对应硬件介面的沟通,也需要一套机制来处理,在PC上,一般的硬件输入就是鼠标与键盘,这在Direct X中都提供了函式可以处理。而在其他硬件平台上,就必须更换相映的沟通方式,例如Wii  的感应手柄,自己就有一套输出入的机制与数据规则,上层游戏撰写者只要根据这规则向引擎沟通,就可以取得需要的资料,并且做出反应。在声音及其他硬件沟通也是一样的,一般是透过引擎来沟通。

    而并非所有平台都是透过引擎来和硬件沟通,有一些平台把一些显示、声音功能都做到芯片中,提供使用者直接呼叫。例如游戏机平台,为了加速运算与便利性,会把多数常用的图像功能放进GPU里,这也是为什麽次世代游戏机的速度总比PC快的原因之一。

    另一方面来说,游戏机的内存是有限的,不可能随时扩充,所以必须要有一套有效的管理规则。

例如GBA的芯片本身就提供很多种显示模式,游戏程序员只要直接修改RAM中特定位置的FLAG(旗标),直接就能改变显示模式,当中最特别的就属TILE模式,它自动作了显示内存的规划,并提供了图层功能,只要把图像资料放在规定的内存范围里,画面上就能直接显示出你要的位置与图层重叠(内存绝对位置MAPPING),而卷动画面,其实就是把内存中的资料搬过来移过去而已。

 

    脚本解译

    有些游戏引擎自带了一套脚本语言系统,有的则是使用现成脚本(例如第一篇文章提到的LUA之类)。不管後来脚本是以脚本语言写出来、或者是以编辑器实现,最终都会变成脚本文档(多数会经过特殊编码保密),再由引擎的脚本解译模块读取辨识与实现。

    这部分牵涉比较广,有时间另开一个题目来说。 

 

逻辑处理

    逻辑处理这个词看起来很高深,其实现在的程序距离真正的逻辑处理很遥远~

    我们有时会说:那个人的罗极有问题!

    这表示什么?是说一个人遇到事情的思考处理方式和一般人不一样,对吧?

    逻辑处理在游戏引擎里,一般就是放置AI、角色关系处理、事件关系处理以及网络处理相关的运算。这一个层的东西,会因为游戏本身的适性需求而有重大改变,所以也被称为〝游戏有关层〞(意思就是说其他的是游戏无关层了),在概念上是放置在游戏引擎的最顶端,因为它会直接和游戏的上层沟通,然后根据相关处理,调用更底层的功能来达到目的。

    AI部分,一般是对于一些基本的智能需求规则或者寻路相关的运算。例如我有一个NPC角色,他面对玩家会做出什么样的反应,都是透过这里来判断的。

    所谓关系处理,可以看做是我们在游戏提供的环境里,对于每个东西的辨识和反应,这些东西可以称为对象或者对象,游戏者面对这些对象,程序必须要能正确的辨识他是属性,然后做出相对正确的判断。例如我在MMO里面,我所在的地点,所有的人事物都必须清楚辨识它的关系,当我做了一个动作,程序要知道对谁做反应、对谁发封包、改变什么数据。——其实还真TMD难解释~呵呵

    现在的逻辑处理都是小儿科,未来,相信这可能是继GPU以后未来要强烈发展的技术(如果人类还没灭亡的话),但中短期的现在,什么都做不到,除非人类可以验证出以前不知道的公式,或者对于人类大脑的解构有了长足的进步。但以现在的科技和硬件发展方向,仍有极大瓶颈,计算因果是那么容易的吗?尽管现在发展着类神经网络技术,但它需要的机器运算能力太高了,也不是一般家用机器可以承担的,所以没法普及,而且多半仅是对于单一个体技术的发展学习,距离能够真正厘清这个世界的关系还非常非常遥远~

    如果看过MATRIX(黑客帝国),应该知道它所谓的世界是个虚拟的环境。而在这个环境里,有着处理因果关系的程序,这是现代人类科技还没法做到的!因为人们还没找出真正的运算法则!其实这个技术才是人类究极的一切,要人类真能计算因果了,那么应该连计算机都成佛了~~哈!

    说到这里感觉很玄乎?其实后面一样很玄~~不过以现在的技术,这地方能做的事情太少了,如果能实现多一点的东西,都会让游戏更有趣!!当计算机已经可以和真人一样跟你互动,那么MMO也可以是单机!!你不需要其他玩家跟你互动,因为这个游戏世界已经分不出真假~~我最想做的就是可以让计算机和玩家真实互动的H-GAME~估计我有生之年都不会达成!!因为首先要参透因果,并且让将一切数据化~~以现代科技和计算器的运算能力来说-都太遥远了!如果能实现一部份,说实在的能赚到的钱太多了,不仅只游戏开发!!!可以应用在人类生活的很多层面!

 

    物理运算

    物理运算又是算些什么?简单说是力与回馈方面的运算。

    不管谁施了力,有动能就会有反应,就算表面看不出,或者感觉不到!而且有些力是一直存在,一般人却没感觉的。例如磁力(地心引力)。

    这地方所放的,是对这个世界的能量定义,简单说就是碰撞检测和处理。以现在的引擎来说,它能做的仅止于对于特定的某一些施力和反馈做响应。力的种类繁多,相互之间也都有影响,人类距离要能全面的模拟还早得很。

    现在市面上有些不错的物理引擎,而微软也将在未来的DX中,加入物理运算的功能,也就是说未来在开发游戏上,可以直接调用。

 

    声音处理

    现在的3D游戏多数会支持立体环绕音效,在音乐与音效处理上,微软已经做得很好了,所以一般只要把机制(接口)做好,然后调微软的来用就行了,当然也有人可能会自己写一套。

    以上对于引擎的内容简单说明了一下,大致上有这些东西,但每个游戏引擎的框架可能差异很大,因为这些东西都相互关连着,每个引擎制作者,都会考虑到效能与扩张性,自己去规划各部分的内容与组合运行方式。

Bookmark the permalink.

发表评论

您的电子邮箱地址不会被公开。