» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 26 12
发新话题
打印

[原创]游戏引擎,3D引擎,物理引擎以及其他

游戏引擎,3D引擎,物理引擎以及其他。

原创,首发于tgfc,未经作者书面允许禁止转贴。

某自称xxx老师的ID说我没实际本事。好吧,我怎么也算是写过几年程序,也算曾经当过业内人士,这次就来简单喷喷游戏引擎,3D引擎,物理引擎以及其他,看看到底是谁没营养



出错请指出,欢迎讨论,要战的话请拿出所引用的参考文献的出处。

一,游戏引擎

在游戏的启蒙时代,其实是没有游戏引擎的,那时候的游戏足够简单,类似于pacman之类的游戏用头发想想也明白它根本用不到引擎这种概念。

随着游戏的复杂,对游戏项目的复杂性和开发周期提出了更高的要求。首先是代码的重用,为每个游戏完全重写一套代码实在是不划算,而且伴随代码的重写,测试的压力也很大

。其次是开发周期的压力,商业竞争要求游戏厂商要足够快地推出更复杂更好玩的游戏,把游戏的内容硬编码进代码很快成为了一种很愚蠢的做法,因为这样的话,简单的修改就

会牵扯很多地方。

于是,游戏引擎的概念被提出,从游戏架构上来说,3d的fps和2d rpg/slg可能是最早引入引擎概念的。而随着技术的进步,引擎也越来越成熟。

那么,游戏引擎究竟做了什么?

1 封装了硬件平台和操作系统的功能调用。
大多数的通用引擎封装了硬件平台和操作系统的功能调用,用统一的接口暴露给程序员,这样便做到了跨平台。举个例子,绝大多数的pc游戏引擎都同时支持DirectX和openGL,为

Windows编译好的游戏可以用DirectX,为Linux编译的版本则显然会自动使用openGL,而这些在某种层次上可以做到对程序员透明(当然,3D部分是最麻烦的,稍后说明)。

2 提供基本的功能服务。
游戏引擎会提供一些基本的功能服务。
比如:
A 对文件系统的抽象,研发的时候直接读取硬盘上的游戏资源,发行版本自动改为读取打包文件中的资源。
B 提供统一的对象管理,大部分是树装的层次结构。
C 内存管理,异常处理
D 游戏脚本支持,把游戏引擎的功能以脚本函数的方式暴露给脚本,这样可以在脚本中编写游戏逻辑,操作游戏引擎,大大方便了修改游戏,举个例子,WOW的UI部分就暴露了脚本

接口,玩家可以自己用LUA编写UI插件。

3 提供一个易扩充的框架结构
很多游戏引擎是易扩充的,比如更换渲染模块,添加物理引擎等,这样可方便的针对项目量体裁衣。比如我需要DirectX不需要物理引擎,都可以自由定制。

4 提供研发用的编辑器
很难想象没有编辑器如何做游戏。玩家熟悉的编辑器举几个例子:星际争霸,魔兽争霸3。

二,3D引擎

随着技术的进步,现在的游戏基本都使用3D技术来渲染画面了,很多玩家根本就想不到即便是那些看起来是2D的游戏,其实也是用3D模式渲染的。举个例子,PS2的GS硬件上对纯2D

其实基本可以说没有支持,PS2的2D游戏,基本上都是用正交投影的3D模式渲染的,不论是 SSF3.3还是GGXX都是这样,平面的人物也是用三角形构成的。用3D有很多优势,比如3D

硬件速度快,支持alpha十分简单等等。

如果大家学过D3D或者openGL,就会发现往屏幕上画一个三角形,贴图然后让它转起来,其实很简单,关键的代码不超过50行,那为什么还要搞出3D引擎这种听起来很华丽的词汇呢



工程学上,盖一个平房和造帝国大厦,其规模和复杂性完全不在一个数量级。同理,往屏幕上画一个三角形,贴图然后让它转起来和大家玩到的FF12也完全不是一个档次。现实生

活中的游戏太复杂了,以至于必须要3D引擎来完成很多工作。

1 场景。
游戏引擎需要管理场景,也就是玩家所在的某个区域,不管是战场还是道具屋。根据需要剔除不需要显示的部分(对于FPS来说玩家身后显然是永远也看不到的)。

2 对象
游戏引擎需要管理场景中的对象,比如一个木桶,一棵树,在需要的时候向硬件提交对它们的渲染。

3 动画
这里的动画指的是3D物体的动作。游戏中有很多需要动画的地方,例如草的摆动,开门,乃至于玩家控制人物的走动。很难想象手工写代码去计算构成玩家角色的每一个三角形的

坐标变换。常见的方法都是在3D创作软件中设置好动作然后导出,动作用专用的脚本来描述,3D引擎会对它进行解释。

4 渲染
我这里只就现在的先进的渲染方法来说。现在的pc和console硬件都具备了可编程的显示硬件(不论是pc还是ps3,xb,xb360),叫做shader,shader分为两种:vertex shader和

pixel shader,更先进的硬件还会提供一种叫做 geometric shader 的可编程硬件。shader是在显卡上的,它需要对应的代码来运行,可以用shader的汇编或者专用的c语言来编写

shader(我有个朋友就喜欢用汇编直接写shader - -b)。shader使用起来没有想象的那么难,买本nv的CG教程,至多三天就能大概知道怎么用了。

渲染每一个模型的时候,乃至于渲染模型的不同部分,动作的不同阶段,3D引擎会自动选用适当的shader来执行渲染,手工完成这件事情几乎是不可能的。


三,物理引擎

越来越多的玩家对游戏的感官真实性提出了要求,他们追求更真实,于是仿真现实世界的物理引擎被提出来,物理引擎把游戏中的物体的行为进行修饰,让他们表现得看起来更真

实。举个简单的物理引擎的例子:直到CS 1.6,游戏玩起来还是那个样子,然而CS:Source则不同,尽管只用了简单的物理效果,我们已经可以用枪击倒油桶之类的物体了。

那么物理引擎究竟是怎么工作的呢?依我看来物理引擎其实有两个任务:物体之间的物理交互,物体自身的物理交互。

1 物体之间的物理交互。
比如刚才说的子弹击中油桶,油桶被击倒。这个比较简单,CS中子弹是没有体积概念的,这种碰撞计算很简单。而其他的类型就不那么简单了,比如有立方体的碰撞,球体碰撞,

乃至于曲面的互碰撞计算。不要忘了,这可是3D坐标系中的碰撞计算,回想一下你的空间解析几何知识吧,这种计算对资源的消耗有多么大。

2 物体自身的物理交互
如果我击中了一块玻璃,玻璃碎掉或者扫射旗子,旗子上被打出很多弹孔,这也需要物理引擎来帮忙,当然并不是必须的。但是玻璃的碎裂如果要求很真实,用物理引擎计算碰撞

的结果就很必要了,碰撞是仅导致玻璃裂开还是粉碎,取决于碰撞的强度。

题外话:游戏中的矩形玻璃最简单的实现就是俩三角形一层材质,但是,计算机很笨,玻璃碎掉它不会自动增加多变形来表达每一个碎片。即便是物理引擎也不会做这件事情。现

在都是需要程序员做额外的工作,未来DX10会提供geometric shader,做这个工作就会大大简化。

四,其他

刚才说了很多理论和原理上的东西,那么游戏引擎,3D引擎,物理引擎是怎么攒到一起的呢?前面说了,游戏引擎是个框架,3D引擎,物理引擎被装在里面。更进一步说,其实物

理引擎是受制于3D部分的。物理引擎要计算的物体数据是3D引擎提供的。

下面是一个简化的frame渲染流程:

调整3D场景状态(CPU)
处理输入(CPU)
处理音效(SPU)
处理物理效果(CPU/SPE/PPU/GPU)
渲染3D(GPU)
渲染2D(GPU)

这个流程可以说基本上所有的游戏都会有,而且我也把主要负责的模块写在了后面。从目前的技术来看,程序中能充分发挥多核,也就是多处理器优势的部分,必定是能够多线程操作的部分,就游戏而言,网络通信和处理音效是最容易多线程化的,因为它们本质上就必定是多线程实现。渲染基本上是单向的,CPU向GPU提出需求,除非CPU需要GPU的运算结果,这种情况不是很多。

好,现在剩下处理物理效果(CPU/SPE/PPU/GPU),对于没有专用物理硬件的环境来说,目前常见的就是用CPU来算这种对浮点要求极高的任务,当然,PS3可以借助CPU中的SPE。未来可能会有用GPU来协助的实现。当然最好的就是用专用硬件,传说中的xx物理加速卡。这里有个关键的问题,这种运算很难多线程,换句话说,渲染之前,必须等待物理计算完成,如果我们采用的是CPU来计算,很可能计算速度不够,速度不够的结果我就不用再多描述了,玩过游戏的人都知道这意味着什么。

好,基本上我要说的技术上的也就这么多,现在回头来看看某xxx老师的言论:“havok是负责物理,和丢帧没什么关系。”,希望大家可以笑一笑了。


TOP

没想到PS3的机能这么差,真是后悔买PS3了,早知道买PS2了



TOP

需要补充的是,用CPU计算物理,如果要想达到可以接受的效果,速度上基本上不可接受(以目前高端民用的CPU来论)。

Ageia PhysX物理加速卡的官方销售人员曾和我们部门联系过,也寄过一些技术资料和演示,demo之类的我还是见过的。


TOP

写这么多,支持一下....

TOP

楼主 码字辛苦 +10分

TOP

码字辛苦,入门好文。

TOP

http://www.yxbns.com/gd/engine/engien.htm

探游戏引擎

引言:游戏引擎,实在是一个深奥而又宽广的话题.笔者并非游戏从业人员,对其所知甚少.本文只是从一个转述者的角度切入,通过众多游戏设计师之口,使玩家能对授权引擎与原创引擎之间的优劣,有一个初步的了解.其目的还是在于抛砖引玉!

20多年前,大部分电脑游戏都还是以文本为基础的,少数则是以低分辨率的图像及各种很聒噪的音效构成的.因此,在这一时期,为游戏编写代码与着色可以说是一件非常简单的工作,只需要将图像填充到最初的位置上就行了.于是 乎,用不了几个程序员,便能在几周,甚至几天的时间内,在他们的车库或是阁楼里做出游戏来.


但是随着电脑技术的进步,玩家的胃口也越来越高.现在的游戏已是非3D加速画面不用,非数字式环绕音效不支持,为了使游戏角色在充满细节的三维世界中的移动更 加真实,游戏代码的编写成了一件需要耗费大量时间,耗费大量金钱的事情.可以说,这一进程(编写代码)的好坏,甚至在游戏公司开始创作最终的内容之前,就已经决定了游戏的最终品质.


发动引擎


今天,很多游戏公司都心里明白,仅凭自身的财力,根本不足以平地起高楼——开发从头到脚都完全崭新的游戏.于是他们决定从其它公司获取那些在屏幕后面驱动游戏运行的程序代码,也就是俗称的"游戏引擎".


由Rogue Entertainment根据著名童话故事Alice in Wonderland(爱丽丝梦游仙境)所改编的第三人称射击游戏American McGee's Alice,是其中一个典型的代表.其设计师American McGee对此解释说:"要想白手起家,创建一套功能强大的3D游戏引擎,实在是超出我们力所能及范围之内的不可完成之任务,因此我们唯一的选择就是寻找一套市面上现存的,具备强大功能及适应性的引擎."


许多开发者都有着类似的处境,他们无力独自开发一套全新的游戏引擎,大部分是因为没钱,没时间,甚或只是因为他们没有足够的程序师,以完成这项日渐艰苦的工作——毕竟如今游戏市场上可供选择的游戏引擎并不在少数,纵使你有幸得以开发出一套新的引擎,也不足以保证能从众多同类者中脱颖而出!


对此,Legend Entertainment的Glen Dahlgren也是深有感触,他评论说:"若仅仅只靠自己的技术力量开发游戏引擎,你就要冒远远落后于技术潮流的巨大风险,因而很可能当你还在使用第一代引擎的时候,市面上第二代,第三代的引擎却早已出现了,那么你怎么可能竞争得过他们呢?"


最常见的解决办法便是去寻求某些公司为自己提供已有的引擎,当然这些引擎还要能够根据自己的需要进行改良与延伸.


Unreal引擎


当前最主流的3D游戏引擎之一便是Unreal的引擎,它是由Tim Sweeney及其开发小组Epic Games所提供的.该引擎不仅为Epic自己的游戏,比如Unreal与Unreal Tournament提供了强劲的动力,它还被众多其它开发者所选用.


Ion Storm奥斯汀部的Warren Spector便是其中之一,他的RPG大作Deus Ex(杀出重围)正是采用的这部引擎.Spector在谈到他之所以选择这款引擎时说道:"当我们还 处于前期制作阶段时,便发现Unreal可以说是性价比最高的引擎."


"他为游戏设计师们准备了极为强大的开发工具组件,并且似乎具有 相当简便的扩展性.当我们决定无论我们签下哪一款引擎,我们都会加入许多新要素时(当然我们也不希望完全从头开始),这款引擎注定必须拥有轻而易举的修改性."


"最终,我们为其加入了一个交谈系统,大量的二维界面画面,新型的武器与物品,极度增强的AI,以及一个非常贴近真实效果的实时嘴型同步系统.当然,不管有多少新要素的加入,提供了一个稳定基础的Unreal引擎是必不可少的前提."


Quake引擎


能与Unreal引擎比肩的主要竞争者毫无疑问是Quake 3.其拥有者id Software也许是这个世界上对引擎授权行当最不陌生的公司了.根据其前设计师John Romero的说法,id授权引擎的历史最早可追溯到1991年的Commander Keen系列.


到90年代中期,以其大获成功的共享游戏软件Wolfenstein 3D(德军总部3D)为基础,诞生了Apogee的Blake Stone与Raven的Shadow Caster.自那以后,他们不仅使用自己的引擎开发本部游戏,还将其授权给其它一些公司.其中,Doom催生了Heretic与Hexen, Quake催生了Hexen II与Half-Life, Quake II引擎则被Kingpin,Heretic II(异教徒2), Soldier of Fortune(命运战士), Sin(原罪)以及Daikatana(大刀)等等一长串游戏所引用.


曾开过Soldier of Fortune, Heretic II和Voyager:Elite Force的Jake Simpson(Raven)对于id的技术一点也不陌生,他形容他们的最新引擎(Quake III)"简直是酷毙了!"


"Quake III中强大的功能节省了我们不少的时间,它实在是难以置信—尤其是其阴影系统就完全值得我们购买."


"当然,这部引擎也缺少我们过去所熟悉的某些要素,比如游戏存档,以及Quake II中最基本的要素:单人游戏模式.但是我们会花费一定资源对其进行扩展的,所以没什么问题."


并非完美


当然,使用任何现成的游戏引擎都会遇到许多问题,Quake III自然也不例外.Jake对此评述说:"(Q III引擎)在描绘广阔户外场景上的不足,是我们不得不面对的一大难题.而Unreal Tournament与Tribes在这方面就做得很不错.此外,Quake III引擎还存在一些并不容易被察觉的问题,直到你试图尝试一些特别设计的时候,这些问题才会显现出来."


"Carmack是一个十足的实用主义者.他只会使他的引擎能尽量满足他 自己的要求就行,而很少顾及别人的需求,这就使我们这些购买引擎的人不得不进行大量的钻研与特性修改."


这种看法得到了3D Realms一位程序员的附应,他就是负责Duke Nukem Forever(永远的毁灭公爵)开发的Scott Miller,虽然花大价钱购得了Quake II引擎,但经过一番努力后,他却痛苦地发现:如果非要说Quake II适合某一款游戏的开发的话,那么这款游戏就只有是Quake 2.


最后3D Realms不得不于1998年作出了一个令世人震惊的决定,放弃Quake II引擎而转投Unreal引擎来重新开发DNF——哪怕他们的这部新作 才在几周前的E3展上给新闻界留下了深刻的印象,还是哪怕他们已经为Quake II引擎的使用权向id支付了不菲的代价.


也许,Quake II引擎的缺陷并非3D Realms作出如此决断的最主要因素,但Scott Miller所给出的官方解释就是如此:"理由很简单,Quake引擎对于户外场景的处理并非尽善尽美,而我们则必须要用到这一功效来制作DNF中的众多关卡."


当然,也并不是每一位设计师都会被Quake引擎的缺陷所限制,主持开发<爱丽丝梦游仙境>的前id老兵American McGee就是其中之一,他告诉我们说:"就Alice与Quake III引擎而言,我们还真的没有发现它们有什么重大设计缺陷."


"因此,我实在找不出我们选用Quake III引擎会有什么错,也许是因为我们对其研究得更加深入吧……!"


诱人的引擎授权


虽然引擎授权对id Software来说只是一个小小的副业,但正是这个副业却为id带来了不菲的利润——每授权Quake III引擎开发一部游戏,大概可收入50万美元左右,这还不包括版税!


如今,Quake III引擎已经为数部游戏所采用,他们有:"American McGee's Alice"(爱丽丝梦游仙境), "Heavy Metal:FAKK2"(重金属2),"Return To Castle Wolfenstein"(重返德军总部),"The World Is Not Enough"(末日危机)与"Voyager:Elite Force"(星际迷航记:精英力量).再考虑到id并没有花费多少资源在推销(或是支持)他们的引擎上面,那么几乎可以肯定:他们从引擎授权中获得的利润要比光靠贩卖"Quake 3 Arena"所获得的利润还要多.


出于这样的诱惑,Monolith也深信引擎授权是一项绝对有利可图的生意,于是他们最近也 成立了一个全新的公司,名称就是以他们公司的代表引擎LithTech命名的,而这家公司的业务便是从事设计,开发,授权他们的LithTech引擎,并提供相应的技术支持.


LithTech引擎的买家还不少,他们之所以选择它不光是因为它的强大性能,还因为Monolith完善的售后支持.对此,Third Law公司的David Namaksy(开发作品为KISS : Psycho Circus<变态马戏团:噩梦男孩>)的话颇具代表性:"Monolith承诺将为购买者提供技术支持与不断的升级服务,并一直持续到我们的游戏发售 后,这一点对于我们将决定购买哪款引擎是非常重要的.而Monolith的承诺就像是我们拥有一个自己的引擎专门小组一样."


持这一观点的还有大名鼎鼎的John Romero,他新成立的公司同时购买了Quake与Unreal引擎的授权,这便使他对这两大引擎的售后支持力度有了一个直观的比较,他首先指出"这主要还是得依靠引擎提供商".


"如果从id购买引擎,基本上得不到任何支持与帮助,也没有任何相关资料.这并不是件好事.但如果你从Monolith,或是从Epic购买引擎,他们则会给予你相当相当大的支持."


问题


购买授权引擎还会引发其它一些问题.Raven就遭遇了受制于引擎更新进度的麻烦,本来其Voyager : Elite Force的开发工作早在Quake 3 Arena上市前就已展开,但id这部作品的开发进程一拖再拖,给Raven造成了极大的不便.


"试图去击打一个移动目标一直都很非常困难,"Jake Simpson诉苦到."我们很久之前就已期盼着这部引擎能够快点完成,不然这显然会对我们自己的上市日程造成极大冲击——尤其是在我们与id还有着特别协议的情况下,即我们作品的发售日期不能 与id的QuakeIII挨得太近."


"我们游戏的开发进度只能与Quake III引擎的开发进度大致相当,因此当我们有时获得了更新源代码后,只能将其中变化的部分进行简单的剪切粘贴,而没有时间进行深入细致的改良."


不过,就算开发者能够拥有一套现存的完善引擎,其大部分功效最后也不得不被扔弃——如果你不仅仅只是希望制作一部看得过眼的资料片的话.对此,Scott Miller评述到:"理论上说,购买了现有引擎使用权的开发商确实能够节约大把的开发时间."


"但事实上,如果他们真心希望开发一部3A级别的游戏,他们就需要对所获得的引擎进行根本上的升级与改进.Half-Life就是一个典型的例子,Duke Nukem Forever也是一样.到最后,引擎大部分地方其实都是我们自己的成果."


"当然基本上,所有的Unreal Tournament基础核心代码还是会得以保留,"Scott进一步解释到."我们自己新开发的代码则主要用于增添引擎的其它特效."


或者用John Romero最近在达拉斯Razer-CPL大赛上所说的那样:"有时我想,要是能只购买引擎的核心部分就好了,那样我就能随心所欲增加任何自己想要的东西."

自创


既然你打算将引擎的大部分代码进行重写,有人也许会想:"那何不干脆从头干起更好?"


英国开发商Rebellion的创始人之一Jason Kingsley便是持有这种想法的开发人之一,而它的两部作品:Aliens vs Predator(异形vs掠夺者)及组队型动作冒险游戏Gunlok(钢铁战场),也正是用自家的引擎开发的.


Jason告诉我们说:"用我们自己的引擎,使我们能够自由尽情的发挥,这样就不必妥协于他购的引擎——或准确的说是二手引擎."


Rebel Act工作室的Xavier Carrillo也同意Jason(作品Blade<黑暗之刃>)的看法,他告诉我们说从头创建属于自己的游戏引擎比外购引擎"更具有灵活性",它将使你自己对整个游戏的开发"拥有完全的掌控权,并能依据自己的开发需求对引擎进行设计规范."

Starbreeze公司一位正在忙于在线第一人称射击游戏Enclave(困土)开发的关卡设计师:Jens Matthies也认为使用自己开发的引擎使开发者们有了"对游戏设计过程中的所有方面 全面施以影响的权力"


他还说:"如果我想到了一个新点子,我便会把它告诉Magnus[Starbreeze的主程序员],如果他赞成的话,他就会将其加入游戏中.这对我这样的关卡设计者来说实在太有利了,因为这种做法有可能使一切都能变得尽善尽美.这实在是太令人高兴了."


自创的弊端


很显然,开发全新引擎也有很大的弊端.Xavier就告诉我们从头设计独立引擎:"无疑需要更多的程序员,而所有其它部门的工作进程都得要视引擎的进化程度而定."


而Jens也直言不讳地认为这确实是一个大问题.他解释到用一个尚在开发中的引擎制作游戏,意味着"永远都会存在着你很想加入,但事实上却无法加入的特效,",甚至"要到很晚才能进行关卡设计."


虽说若真的有必要从头设计一部引擎,开发者还可以根据游戏的需要对其进行量身定制 的话.那么如果游戏引擎的设计实在变动得太过频繁,那将意味着大量的早期工作将被浪掷,返工,或至少是在工程后期需要重新编译.


结束语


综合上段所言,相对于自主研发的引擎,授权引擎的最大优势便体现了出来——它起码可以给你的开发小组一个稳定的开发环境.


正因为大部分授权引擎的技术相对都比较成熟,因此你的美工与策划们可以按照自己的节奏进行开发设计,而不必停下来等待程序师们的步伐.


虽然,有时候对授权引擎的大规模修改也不可避免地造成设计上的返工,但通常,引擎的基本特性还是足以保证公司的剩余力量能够继续前进,而不必一遍又一遍地重头再来!

TOP

顶了再看

TOP

等靠版的加分评语

TOP

感觉写得很好,要支持


PS:开头的XXX老师是谁哦..

TOP

引用:
原帖由 dgclan 于 2007-1-28 19:42 发表
http://www.yxbns.com/gd/engine/engien.htm

探游戏引擎

引言:游戏引擎,实在是一个深奥而又宽广的话题.笔者并非游戏从业人员,对其所知甚少.本文只是从一个转述者的角度切入,通过众多游戏设计师之口,使玩家 ...
这文TG转过。内容太老了。out of date

TOP

引用:
原帖由 foxhounds 于 2007-1-28 20:14 发表
感觉写得很好,要支持


PS:开头的XXX老师是谁哦..
你去playstation版看看就知道了,一个老“专家”

TOP

科普文是要赞的

TOP

张果汁老师?

TOP

:D LZ+10

TOP

 26 12
发新话题
     
官方公众号及微博