转载知乎国内有哪些自主开发游戏引擎的团队?

本文乃是我随意而发,可能会表述不清;加上我技术能力有限,如果有什么说错的地方,希望得到各位的指教。
…………………………………………………………………………………………………………………………
我们公司,做街机游戏的。

起初是个在ps3上的赛车游戏引擎,很多人都知道ps3上开发的难度,然后失败了。 那时刚好那行业“钱景”一片大好,财大气粗的敝厂收了这“团队”,并将引擎适配到pc版。

然后这游戏一炮而红!其实这游戏一点都不好玩,但因为公司在业界有点名气,加上当时unity3d windows版才没出多久,业界一直视3d游戏开发为高端技术,还有就是自主研发(大家懂的),所以红也不足为奇。当时推的游戏特色以技术为主,720P次世代,最多支持8人连线对战等等。

说说技术方面,有GI、AO、延迟渲染什么的,我对图形方便不太熟,我就是个写脚本的小菜鸟,不知道这些技术在那时属于次世代还是本世代。

引擎最初由一个日裔英人一人所写,全程使用c++(我所说的脚本也是cpp……)。第一次听到真是佩服到五体投地,再加上之前网上搜到一些ps3的开发资料,说手动分配spu进行计算诸如此类,这么高大上的引擎我真的想一探究竟。

直到看到源码……

到处的manager类,有点像ogre。但manager类的单例还是静态类型,初始化析构顺序不确定,游戏关闭时可能时不时就报错,有段时间我花了很大力气解决了这个问题,后来其他人又加了几个manager又出现了。鉴于街机的特殊性——不关游戏只关机,我也不处理这问题了。

一次性分配内存,这和大多数引擎一样,先向系统申请一大块内存,然后自行管理内存分配。但是内存分配器很简陋(另一面可以说高效),内存分成4块,第一块作渲染队列使用,第二块是ring buffer,第三块用于分配一些初始化时只申请则一次并且大小比较固定的内存,第四块是大内存,一般情况下也只是初始化时申请,update时不断申请会受不了,因为内存不会重用(不需delete free),只有在切换场景时将分配大小置0,还有记得在各个manager的restart函数中将指针设为空。这里我称为基于场景的内存分配器,稍作加工也可以做成可以在update上申请的帧分配器。

还有个比较有趣的是因为游戏刚开始要申请几百兆内存,可能是内存碎片原因(我个人更偏向认为是引擎本身原因,但我又无法解决,求方案),经常导致申请失败。把其它软件关闭后游戏又(有可能)运行了,所以我们上班都很专心,不上微博~

而所谓的spu控制到了pc端逼格就降成了开几条线程…一般开两条线程,一条处理游戏逻辑和物理还有添加到渲染队列,另一条则处理渲染。但是……但是!当处理逻辑时渲染线程一直sleep,等待逻辑包括物理等全部处理完,将状态设为render,逻辑线程进行sleep,直到渲染完毕。喂喂喂!这和单线程有何区别吗?!不过经过测试,这种方法的确比单线程快那么一点点,至于原因,我也不清楚……

说到线程怎么能不说下锁,这引擎最牛逼的地方是整个引擎只用了一次锁,实际上需要用的地方也不多,可是加上上面说的静态变量,一不小心就掉坑了。有次就是打算将两线程尽量并行,渲染线程一但发现队列不为空,则立即处理。然后发现两个线程同时写入用于调试输出的buffer,游戏崩溃,后来唯有将静态变量设为threadlocal。

不过由于能力有限和知识匮乏,这次优化以失败告终……毕竟我只是小菜鸟嘛! 容器类都自行实现,但很简陋,所以我们有时候直接使用stl。

在本身的容器类中我学到了入侵式链表,它没有boost实现的强大,因为其只是在需要链表的类中加一个next指针,我称为“单例链表”。

使用maya建模,用插件导出成xml,再xml转成引擎专用格式(有加密)。场景管理也只是将赛道分成n份,完全没有通配的八叉树bsp什么的。

虽说第一代不好玩,第二代的游戏性大大提高,很多同事午休也是自发进行pk。

随着几款游戏都卖得不错,厂内对自研引擎非常重视,加大了引擎研发的投入,开始了2.0的开发。

我只是只做外围的小菜鸟……这么高大上的核心工作当然由不得我来做,不过后来我看到了半成品……

内存分配成熟了,虽然还是要申请一大块内存。
直接上64位,再也没有申请不到内存的情况。
有锁有临界点,但是锁到处飞,我能力有限实在理解不了这么多锁是要来干嘛……
容易类丰富了很多,但我个人认为还不如直接用stl,不就是适配内存分配吗?
有编辑器了,尽管还没成熟。
再也不用每次写c++了,加上了我最喜欢的lua。
但引擎又使用html5作为游戏ui,又迫不得已地使用js。这是我感觉引擎太杂,不看好的地方。

不过高昂的研发费用最终没敌过unreal的低价格,引擎研发已经停止。向好的说就是把赛车引擎移植到unreal,而我就在用unity3d写着各种垃圾小游戏。

虽说本文大部分都在吐槽引擎的不是,但无可否认它有很多优点。很多引擎也是一步一步发展过来的,都有着各自的缺陷,但他们都有我佩服的地方,但毕竟我一个人是做不出来的,那怕是十个我。

编辑于 2014-10-26
作者:匿名用户
来源:知乎
原文链接:,转发请注明来源落伍老站长!

发表评论