代码改变世界

我,又回来了!

2014-07-21 12:12  风恋残雪  阅读(963)  评论(0编辑  收藏  举报

  看看最近一篇随笔的纪录,居然是2012年11月的一篇,很遗憾没有坚持下来,其实好多时候都想把自己在工作过程中遇到的问题和解决方法记录下来,使自己在以后做同样的事情的时候有个参考,当然如果能帮到其他的人是最好的。最近两年一直引擎开发和维护的工作,也多少有些心得吧。本篇文章不会具体讲某个东西算是一个概述吧,讲讲最近两年的感受,技术性的东西会在接下来的文章中展开讨论。

  从毕业到工作已经三年了,我很庆幸自己当初选择了游戏这个行业,而且一直坚持在端游这个市场中,并没有跟风去做手游或者页游,当然我不是觉得手游或者页游不好,主要问题是觉得端游更利于技术的积累,真正做到厚积薄发,当然本人离大牛还有很长的路要走,路漫漫其修远兮,吾将上下而求索。记得有句话说的很好,别人比你厉害并不可怕,可怕的是他比你更努力,所以各位要努力了!总的来说,这两年的成长还是很快的,接触过几款商业引擎包括,自研的、开源的(ogre),及收费引擎,自研引擎相比其它的维护起来更方便,毕竟是自己写的东西,工具链也相对完善,但是比起来商业引擎来说可能效果和效率上多少有些欠缺,当然凡事也不是绝对的,比如最近出的天涯明月刀,也是自研引擎,效果就非常棒,我们目前引擎的目标也是向它和 cryengine 靠拢。开源引擎的好处就是前期 demo 开发时可以节省重复发明轮子的大部分时间,但是要做出的好的效果和获得较高的效率,所花费的时间也不一定少,比如工具链不完善,冗余代码过多(开源引擎一般倾向于做通用引擎,比如 Ogre),我们目前使用的就是在 Ogre 基础之上的改进版本,基本上把它的核心功能都改了个遍,因为我们是纯3d游戏,画面和效率上都有较高的要求,原始的 Ogre 并不能满足这些需求,所以我们对它进行了大刀阔斧的改进,目前算是基本上搞定了,就剩一些后期效果的添加,比如 SSAO(SSDO),DOF, 雨雪效果等,以及一些现有效果的优化,如 HDR、 Color grading、MLAA,等。目前画面还算说得过去,但是跟其它引擎相比还是有比较大的差距,但是我们在一步一个脚印的踏实前行,相信效果会慢慢接近那些大作的。商业引擎的优点就不用说了,好的效果和效率,当然这个要看对它的驾驭能力,缺点就是授权费用高,当然现在有所改变,比如虚幻引擎已经开源,只需要每月9.9美元就可以订阅源码(具体怎么个收费方式并没有认真去研究)。或者引擎比较庞大,导致需要很多人花几年时间才能很好的驾驭这个引擎,技术不过关导致整个项目失败的例子也不是没有。

  因为最近不能一年的时间主要是修改 Ogre, 所以本系统技术讨论主要以 Ogre 为主,当然技术和思路是通用的。大致内容有:

  1、Ogre 渲染流程的改造,包括去掉功能不完善的 Compositor,只所以去掉是因为他并不是特别灵活,并且整个 Ogre 流程并不太适合做延迟着色或延迟光照。

  2、材质系统的改造,Ogre 材质系统本身并不是特别灵活,而且效率极其低下,故很有必要改造下材质系统。

  3、效率的优化:包括 CPU 和 GPU 上的优化,保证在比较低配的机器上也有理想的帧率。

  4、延迟渲染,在目前主流引擎已经成为标配的情况下,支持这个已经很有必要,为了更好的支持点光源以及后期效果。

  5、SSAO (SSDO),这个实现起来还是比较快的,毕竟有现成的代码和论文,主要是要理解其中的原理吧。

  6、各种基于Physx 以及Apex的物理效果的实现,包括布娃娃、布料、破碎的集成。

  7、多线程渲染。

  8、动画效果,包括IK、动作融合等。

  先分这些,以后再慢慢添加,毕竟接下来还会做些新东西,包括代码重构等等。

  下面说下我这两年来的感受,因为期间换过公司,所以从上家公司说起吧,因为引擎是自研,加上引擎也比较稳定,所以基本上是在做维护的工作,开发的功能很少,基本上都在熟悉引擎和开发一些功能,总体来说这个引擎还是不错的,包括代码可读性,效率,以及工具链(各种编辑器),虽然不能大展身手,但是现有的引擎代码也够我消化的了,但是过了半年多的时间,我觉得这个地方对我提升的空间不是特别大,因为引擎并不打算有太大改动,所以我觉得这里并不太适合我个人成长。再加上项目成功上线,收入还不错的情况下,公司并没有想到员工,下面也是议论纷纷,对公司多少有点不满吧,最后就导致了整个工作室的动荡。其实现在回过来想想,毕竟在上线前大家都辛苦地付出过,如果公司多少考虑下员工的感受,就不会出现这样的悲剧了,而且还会更愿意拼命工作,因为他觉得自己的利益和公司是一致的,你们有肉吃,我就有汤喝。其实这样好处多多,公司其实花不了多少钱,但是公司得到的却多得多,比如技术的积累,能留住人才是一个公司最大的法宝,这样公司也会有一个好的口碑,大家也都喜欢到贵公司来求职,这样就会形成一个良性循环,我想这样的公司也不挣钱都难吧。财散人聚,财聚人散道理谁都懂,可是一旦施行起来就变了味。当然我离开的主要原因并不是因为这个,而是原来的老大给了我一个更好的机会,让我有更大的空间来成长自己,这才是最重要的。来新公司也快一年,给我整体的感觉还是很不错的,至少大家都是踏实想做成事的人,大家都很努力,而且能力也都很不错。虽然引擎先前走过很多弯路,但是现在也基本已经走上了正轨,整个基础已经比较完善,下面就是一些高级效果和细化调优(这是一个长期的过程,当然还需要各部门之间配合完成)。这也是让我们整个团队比较欣慰的地方。回首过来,期间开发过程还是承受了不少压力和挑战,当然问题最终都解决了。有时我在想如果我们静下心来踏实做,也是可以做到世界先进引擎的行列的,比如天涯明月刀的引擎,只所以大多数没有成功,是因为一个人并不会在一个公司待很久,这样就不会有太多的技术积累,换家公司又基本重头再来或者需要一些时间来熟悉新的引擎,其实这都是资源的浪费。如果对一个引擎不断修改、重构、改进,那它必定会成为一个牛逼的引擎,不论从画面和效率来讲,就像好游戏也是 不断修改打磨出来的一样,引擎也需要不断修改打磨,这样才能成为一个牛逼的引擎。还有一个比较大的感触就是,做技术不但要知道怎么做,还要明白背后的原理,否则就很难在原来的基础上进行改进,或者写出来的效果比较低效等等,比如一些效果,网上都会给一些 代码(Microsoft Nvidia ATI),但是直接拿过来用,多少有些效率问题,或者如果你想很好地集成到引擎中,需要对原来的方法多少做些改进的时候,如果不明白其中的原理,好多时候就变得无从下手。所以不但要知其然还要知其所以然,这样才能做到游刃有余,这方便我也需要更大的努力。

  或许我的很多看法不成熟,不过我想随着时间的推移,应该会有更多的认识,那些我们一直认为对的到头来发现是错,或者错的是对的,或者本来就没有对错,只是看问题的方式不同而已。最后大家在朝着自己的目标奋斗时也要注意自己的身体哦,这才是革命的本钱。废话不多说了,接下来的几篇随笔会展开讨论上面提到的这些。