经常会看到一些开发者因为引擎使用不顺当或某些功能不匹配而抱怨,那么在当今的游戏产业格局下,有没有必要自己开发3D引擎呢?
作为曾经的游戏引擎开发者,现在就来说说这个问题。
开发一个引擎,要明确三件事:
收益
意义
如何做
首先,需要面向事实,我曾凭借引擎拿过授权金,但是我不认为在当今国内的大环境,商业引擎的成熟度,以及相应的商业模式运作里,自研引擎还能产生经济价值。自研引擎并非简单的造轮子,你需要面临地是花费巨量的时间成本,使用价值几乎为零,赚钱的可能更是微乎其微。我说直白一点,如果你指望开发一个游戏引擎来为了给你带来经济收益,远远没有你在自家门口摆红薯摊卖红薯来得实在。
为什么?作为开发者,我要为一套解决方案买单,无非就是考虑三个问题:
1.它是否能满足项目需求
对于游戏引擎来说,如果不能满足项目需求,是无法商业化的,而你要做到满足大部分项目需求这一点,需要付出大量的时间和精力。
2.它是否能大量缩短开发周期
这一点取决于你的工具链,工具链虽然不是什么技术活,但是是一个堆量的工作,个人是跟一个团队有本质差距的。随着时间的推移,这个差距会进一步拉大。
3. 它是否能节省人力成本
这点是根本性问题,游戏研发成本几乎就是人力成本。而人力成本就是合作(磨合)成本及学习成本。这些无不是基于对解决方案的熟悉程 度,也许你对自己的引擎很熟悉,但是其它人不是。使用你的引擎,开发团队每个人都需要先学习再使用,这对企业,是不可承受之重;对个人,学习你的引 擎并不能带来长期的技术储备。而相反,商业引擎有大量的学习资料,掌握之后,在不同的企业都能运用。
而至于其他,比如性能,功能等,不能满足以上3条,这些都只是幻影。
也许你好奇我是如何拿到授权金的,我的引擎在商业引擎早期,那时还没有Unity,UE还要很贵的授权金,我也许是最后一批自研引擎的受益者。
如今,必须承认的是,这一页已经翻过去了。
那么如果开发引擎不能带来经济收益,这件事本身是否有意义?
我觉得还是有意义的。
到现在,引擎虽然不能再为我带来金钱上的直接收入,但是带给我的是:
1.规划团队开发,评估成本,设计架构得心应手,做全栈算是附送的技能。
2.更了解一个游戏引擎的底层运作原理。我现在使用Unity,对于如何针对性为Unity项目做优化,提供解决方案有比较清晰的思路。想想如果我不知道有PIX调试这种东西,那得多可怕。
3.快速地上手并深入一个商业引擎。
4.很轻易地扩展商业引擎。
这些都是隐形的收益,对于个人来说,也许这是可以运用一辈子的经验。
所以这些,不是所谓的“意义”吗?
那么,现在如果你有决心付出大量的时间成本做一个不会给你带来直接经济利益的引擎,如何去做?
我的建议是:
1. 避开竞争
一件有意义的事情,需要有其特点,造轮子也要分是否是技术活。针对某一个方向,或者需求点去做,效果会好很多。比如在页游时代,Flash平台 做3D很难,商业引擎都还在观望,仅有的几个框架(如Away3D等)都无法在性能和工作流上很好地支持一个项目的研发,我引擎做了这个跨平台支持,很自 然从中受益(这跟Unity首先做对移动平台支持是一样的策略)。
2.从实际项目需求里提炼架构
我认为没有需求凭想象力去做是很多引擎程序员常犯的错误(我也是)。因为想象出来的框架通常无法适应真正的项目需求,常常是一个技术成果想得很好,真正用起来很糟糕。
3.先实现,再谈架构
引擎很容易陷入设计陷阱,有时底层实现是比较复杂的,实现之前很难想清楚,经常在你花费大量的时间做好一个你认为完美的设计后开始信心满满地编码,然后不得不为了性能或算法实现推翻你的设计。