|
难得工作告一段落清闲了一周,趁着日本人纠结新工作究竟要怎么做的时间,就写点东西打发一
下时间。就跟以前一样。
其实本来按习惯我应该喷点什么东西,不过思考了良久,喷完了也就完了,没啥意思。而且也没
什么好话题。
不过正好刚刚看到了一个神奇的东西OpenAge,也就是题目上所说的开源文化中的开源游戏引擎
。那就来聊聊这个,这个比较有营养。
先说说开源文化。首先这个词大家应该并不陌生,毕竟程序员已经被黑到死了,所以我也就不解
释了。不过有一点需要明确一下,实际上“开源文化”这个东西是根据证书来的,也就是软件的版权
声明,记住,开源软件不代表着他没有版权,没有版权的软件不代表它开源。
当然,我不是说在了解开源文化的时候需要去读那些废话多到能把人说死的版权声明,不过其中
的经纬还是要了解一下。
开源版权有很多个体系,其中中心思想也不尽相同。比如说现今传播最为广泛的GNU/GPL协议体
系,这个体系的核心思想是知识和代码的共享,谁都可以复制,发布,修改,使用软件,所以协议中
最核心的声明便表达着“遵循该协议的软件可以被任何人修改,复制,使用并发布;可以用于任何用
途(包括盈利)。但是任何人在发布其修改过的版本同时必须一同将源代码公开”这样一个意义。而
另一个协议体系则是完全自由,即等同于放弃版权,任何人可以以任何目的修改并使用软件,并且不
强制要求公开自己的源代码。当然,开源协议体系并不只有这两个,其他还有很多。
不过,当今聊起开源文化的时候,多会被等同为GNU(即革奴计划)。这其中多半要归功于Linux
,Linux作为使用最为广泛的类Unix系统,同时也是最好的GNU软件平台,而其本身也使用GPL证书。
所以跟着Linux,开源精神也就传播开来,再加之Linux出现之前GNU成员奠定的基础,使这个协议家
族一下子就生根发芽发展壮大,以至于现在几乎等同于开源文化。而其他协议体系则没有这么好的天
时地利,只能默默地存在于这个世界上。
说完背景,就该谈谈实际了,开源软件是怎么来的。说的简单暴力一点,就是“抄”。其实形容
为“山寨”,要更为贴切一些。这里说的抄,并不是说扒着别人的源代码改改就拿来用,而是在了解
目标软件有那些功能实现之后,用自己的逻辑写一套自己的代码,实现跟他完全相同的功能。经过维
护使代码稳定之后,再在性能、功能、完备性上超越原软件。
前面也说过Linux是类Unix系统,而Unix系统就是Unix系统,没人叫它类Windows系统。这就是因
为Linux在设计初就是以山寨Unix为目的编写的,所有功能实现都是参照Unix来的。其他还有很多开
源项目都是类似的,OpenSSL,OpenSSH,OpenGL等等等等。这些项目在创立初,都是以一个比较完善
或者使用广泛的软件为目标,进行山寨,做出一套功能完全相同的实现。其中的佼佼者,在成员的努
力下,能从功能、性能上超越目标,从而和原软件平起平坐,比如OpenSSL,世界一大半的网站都在
用它的代码(这个稍微特殊SSL是个协议而不是软件,定义这个协议的公司有自己的一套对SSL的实现
,OpenSSL则是另一个开源实现)。比较倒霉的就只能石沉大海,走进历史书,像OpenGL。当然也有
极其特殊的原创项目,像OpenCV,这是以图像处理研究、教学为目的创建的一个开源项目(也有人认
为这个是山寨Matlab,但是二者的来龙去脉完全不相干)。这也是开源项目中极少数拥有世界尖端研
究成果的项目,如果了解过图像处理领域应该会知道,这个项目几乎拥有所有最新的论文方法的实现
。
现在铺垫说完了,该说说正题了,那就是开源游戏引擎。前面已经说了,开源项目多是以山寨某
个目标为目的开始的,所以现在能看到的开源游戏引擎也是山寨了某个游戏后的产物。
OpenAge,山寨了帝国时代II的产物,C++11作为核心,用python作为脚本控制和控制台,可以提
供与原游戏几乎完全一样的体验。
OpenMW,山寨了老滚3的产物,从画面上看,效果已经达到了和原游戏相同的效果,不过似乎版本
还不太稳定,上一个版本修正的bug数连起来快超过一页了。
OpenTTD,山寨了运输大亨的产物。这个项目的存在时间已经比较久远了,相对稳定而完善。从
主页上来看现在项目的方向是进一步完善功能,并招募志愿者进行国际化,翻译成各种语言。
OpenRA,这个自不用说,是山寨红色警戒的产物(不是红警2,是红警)。基本上所有西木时代的
游戏都可以通过这个引擎再现。但是,首页的第一条评论竟然是“请改善游戏运行速度,这个速度没
法玩”………………让我笑一会去。
先说说优劣吧。这些开源项目主要做的是引擎架构部分的开源实现,简单的说就是你可以拿到一
个能直接利用的框架,然后添点砖瓦就能做成自己的游戏。如果有心,还能去阅读代码,学习一下别
人的编程思想,学学如何做一个游戏。也就是从一个真正的程序员出发,去做一款游戏。这是好处。
而不好之处就是,这些项目的山寨目标比较老旧,都属于游戏引擎还没有形成体系时的产物。这一代
的游戏多会有一些奇奇怪怪的限制,而大多数都是因为当时的编程技术和思想限制造成的。现在为了
模仿,或者说还原这些游戏,会出现故意去制造这些限制的情况。也就是所谓的故意走弯路。这对不
了解的人来说是个坑,有可能会影响到将来的编程风格。其次,开源软件其实缺少品质控制,里面可
能有很多实现都是有问题的,这会造成程序不稳定,同时学习的时候也有可能学习到错误的实现方法
。
接着说说能干什么。一个游戏引擎,最好的情况,是它能兼容各种类型的游戏,也就是说封装底层,
实现上层。不过说这也是种理想情况,因为这样的引擎即原始又复杂。说原始是因为它要给使用者提
供更灵活的功能,自然封装层次就低。说复杂是因为实现者要考虑到各种情况来设计功能,让它能适
应所有情况。很不幸,现在的开源项目并没有这样的东西。不过这并不妨碍什么,毕竟人是活的,想
要的一切都可以通过双手制造出来不是。
开个玩笑。这些游戏引擎看上去山寨的目标很老,但是其实他们直到今天都是活跃状态,也就是
说不断有人在更新它,改善它。里面很多内容其实都是用的新思想来实现的,灵活性和健壮性也不可
同日而语。也就是所谓的新瓶装旧酒。如果有心,你可以把它变成任何你想要的东西。
其次,开源项目大多数都是以Linux平台为基础进行的,以上说的这些游戏引擎都是这样,他们
的编译环境全都是Linux。但是跟大多数开源项目一样,他们都支持交叉编译,从而编译出Windows
下可以使用的版本。也就是说,这些代码是半跨平台的。这为游戏的移植打下了良好的基础。
说到这里其实也就差不多没什么了,毕竟开源文化要亲身参与到其中才能感受的到。不管是作为
开发者,还是作为二次开发者,甚至作为使用者。如果有心,可以从开源项目中学习到很多东西。如
果有热情,还能参与到开源项目中。二者都没,只作为一个受益者也没有任何问题,因为这就是开源
的初衷,让更多的人能免费享受到软件带来的好处。
哦对了,似乎没有说要怎么找到这些开源项目。其实很简单,拿OpenRA举例,去百度一下OpenRA
,第一条第二条就会看到一个openRA.org的网站,一般开源项目都会以这样的形式注册一个网站,提
供项目进展,最近版本以及使用手册。如果有兴趣,就去百度一下吧。
|
|