|
上回讲到我们的引擎开发启动,这一回将后续数年的一些引擎开发原则提炼一下。
原则
在漫长的引擎开发过程中,有一些原则是我们始终坚持的。
第一个原则是不追求完美,Quick & Dirty,先能用再说。这个是没有办法的事情,Demo2开始,团队人已经变多,要好好协作,都需要完善的工具流程,根本没有时间给你细细打磨。前三年,引擎团队都狂奔,满足越来越大的团队和越来越多的需求。
早期天刀引擎开发,让我想起了石头汤的故事。
三个士兵疲惫地走在一条陌生的乡村路上。他们是在打完仗返家的途中。他们又累又饿,事实上,他们已经两天什么东西也没吃了。
当三个士兵接近一个村庄时,村民开始忙开了。他们知道士兵通常是很饿的,所以家家户户都把可以吃的东西都收藏起来,比如把大麦藏在阁楼上、牛奶桶沉到井里、肉挂在地窖里。士兵们挨家挨户讨吃的,还希望能在阁楼借宿,可是村民们都说没吃的东西、没住的地方,全村人还努力装出饿坏了的样子。这是一场斗智的较量。
饥肠辘辘的士兵们被逼出了一个绝招。他们向村民们宣布,要做一锅用石头做的汤。好奇的村民们为他们准备好了木柴和大锅,士兵们真的开始用三块大圆石头煮汤了!当然,为了汤的味道更鲜美一点,他们还需要一点佐料,比如盐和胡椒什么的……当然有一点胡萝卜会更好……卷心菜呀、土豆呀、牛肉呀配一些也不错……如果再来一些大麦和牛奶,连国王都可以喝了……一锅神奇的石头汤真的煮好了!
马西娅·布朗,1948年凯迪克奖银奖作品《石头汤》,摘自百度百科
前期引擎的天使投资人是我和Tough哥,在前期引擎开发中,我们都贡献出自己业余时间个人开发的一些私人模块,或者是出于学习的目的,或者是出于个人兴趣,这些模块简单粗糙。拼在一起,勉强能用。我主要贡献了底层序列化体系,对象生命周期管理和垃圾回收,热加载框架,属性表单体系,工具框架以及部分底层Utility等等看不见的模块,加班狂人Tough哥搞了多线程渲染体系、Shader管理体系和渲染架构,工作量巨大,但他乐在其中。
开发过程苦乐参半,几年后做完,回头一看,倒吸冷气,如果早知道有如此大的工作量,当时一定鼓不起勇气重做。通过石头汤的模式,我们好歹完成了引擎开发冷启动的工作。
其次我们明确了整个项目最重要的目的不是开发引擎,是产品本身。所以引擎的开发模式只能是伴随开发,和产品共同成长。这也就意味着引擎团队从没脱离项目,封闭开发引擎,我们永远保持能及时拿出产品Demo的状态,引擎巨大模块的重构,都是尽可能拆开,放在一个很长的周期里面慢慢做,大约在3年左右的时间里面,才逐渐成型。
通常脱离项目做引擎都是死路一条。来看一个童话寓言故事:
某印度朋友,在美国组织了一个团队,给国内某游戏团队提供咨询服务。虽然国内团队的游戏质量很棒,但该游戏团队技术选型比较陈旧,印度顾问建议,说你们继续在目前引擎上开发玩法,我在美国的团队帮你们重写引擎吧,到时候你们的玩法做得差不多,我这里引擎也好了,帮你无缝切换,piu的一下,你的游戏就变成Morden的游戏了。
引擎岂能如此轻易替换?团队不信。印度顾问上下活动,发动各方力量来做背书,终于说服团队把合作启动了。
成王败寇,也许初衷是好的,但真没有这种开发模式,印度顾问忙了一年多,最后还是扑街了,项目翘首以盼新引擎,却得到了印度顾问公司破产注销的噩耗。就像国内的ICO风波,我们无从判断募资团队出发点是否善意,但客观上造成了用户巨大的损失。
脱离项目做引擎,唯一成功的例外是unity,没有一个完整的大项目,凭空做了一个引擎。但这个不展开。我理解中unity的成功更多来自于易用性,以及商业模式的颠覆,和咱们这个专题无关。
像你出去遛娃,儿子忽左忽右,走位飘忽,眼神迷离,随时被漂亮的小姐姐或是萌萌的小妹妹吸引,但他只在你身边奔跑嬉戏,从不远离。天刀的引擎也是如此,从不远离产品里程碑,即使这样做要额外付出更多的心力。产品必须随时有产出,告诉公司我还活着,告诉团队别担心一切尽在掌握,停下憋个大招,风险会更大。
第三个原则是世界那么大,我想要偷懒。任何模块,能用中间件,绝不自己写。
在UBISOFT开发项目,也是大量应用中间件,但UBISOFT有一个原则,就是中间件必须有源码,license要经过严格确认才可以用。腾讯管得稍微松一点,不强调中间件要有源码,我们的可选择面就大了很多。
天刀用了不少中间件,帮助我们节约开发精力,迅速在一些技术点上能快速达到一流水准。国产大飞机也不要求全部国产化,发动机等能买就买,我们也不愿意为了技术的理想,放弃了practical的开发流程。
大致想了一下,天刀用过这些中间件和SDK:Scaleform/IME/Video,Morpheme,Speedtree,FMod,RapidXml,QT,也用过公司内部团队开发的TAG Culling,TAG Math等等组件(这个就是大家说的叶老师的作品)另外应付公司的复杂流程接入也用了一些组件,这些和游戏技术无关,不详述。
第四个原则就是开发流程和易用性至上。比如我常说,没有Undo/redo的工具就是耍流氓,Editor开发第一时刻就把Undo/Redo加上了。当然受限于人力资源,以及in-house engine的局限,我们在执行上并没有做到太出色,前几年被策划、美术追杀,以至于编辑器开发小李天天加班,常被约谈,全项目的目光都紧盯着他。人人都是产品经理,天天都是最后期限,所有人都关心小李的进度,小李快则天下兴,小李病则项目亡。好在小李还是扛过来了,作为主力编辑器开发者,几乎完成了70%以上的编辑器开发工作。
第五个原则是双线开发,主线+备胎线。大量全局改动,有风险、带研究性质的feature,我们都安排一个长线的备胎任务,让某个同学在很长的周期里面完成,但主线永远不停。通过合理安排研究和主线比例,我们不停给版本加入了有趣的高端特性。这点在后续开发过程中举例再说。
在这些原则指导下,Tough哥先做了多线程框架,来不及做资源流程,就把内部资源加载后转成可用格式;我做了基础框架和序列化,长期都让新旧数据并存,逐渐把旧数据转成新的数据;数学库和基础utilty也是新旧并存,直到忍无可忍,才由某新加入的同学持续替换改掉。
工作到3-4年的时候,天刀引擎才正式成型。
文艺复兴三杰之一的米开朗基罗,是文艺复兴雕塑不可逾越的高峰,他曾说过:雕像本来就在石头里,我只是把不要的部分去掉。
我想说,天刀的引擎开发,也是一个不停剥离和填充的过程,我们剥离败絮其外,填以金玉其中,说时迟,那时更迟,经历了无数加班、延误、妥协和奋进,引擎就慢慢成型了。
这是一次不约而同的历险,一大群中年男女,罔顾中年危机,聊发少年轻狂,在技术的路上飞奔,我们不想甩开什么对手,不想突破什么极限,我们只想超越自己,做点没做过的事。
下回预告:
第三个Demo,又能怎样驱动老板的悲喜?
场景难产,谁又动了我的光照,大变革酝酿中。
|
|