生活 & 工作

睡梦中被女儿的哭声惊醒,一阵安抚后,女儿睡去,抬头看已经快凌晨 5 点了,睡意竟全无。于是打开 blog,随便写点什么吧。
生活:
我有些时候选择性失明或者失聪,一方面不想让无谓的事情妨碍自己前进的脚步,另一方面其实也是无可奈何。其实这样没有什么不好,什么事情都较真才是和自己过不去,尤其是自己无法控制的事情。我选择引擎开发而非游戏开发也许就是在这种指导思想下的一个反映吧。回首引擎开发 2 年中,真是什么滋味都尝过了,从怀疑、质疑到信任、赞许这个过程我是历历在目、百感交集。不过,我认为这是非常正常的,人们在接受一个新事物(人)的时候都要有个心理路程,每个人都是如此,尤其在自己已经有了思维定势之后更是如此。前几天跟 CEO 吃饭时我对他说:我不在意职位,我在意我做的事情。其实职位只是个 Position,重要的是能否在所做的事情过程当中提升自己,超越自己。CTO 也好,程序员也罢,本质上都是要写程序的,都要以程序的思维去思考工作中的问题,在这一点上两者没有任何差别。一直到现在,我仍以程序员的标准来要求自己,而且我的情绪依然会受到程序的影响,不过另一方面作为管理者的角色,自我控制力也比以前强了许多,但是内心中的波澜还会被程序所控制,这一点我自己非常清楚。其实我多少有些抵触管理上的工作,琐碎、繁杂,而且难于控制,这一点我在7年前第一次做项目经理的时候就体会到了,但是也有好处,它会迫使你从纷繁复杂而又非常理性的程序中跳出来去解决一个完全不同领域的问题,看似无关其实也有些内在联系,这使得我在程序上很少走死路,尽可能尝试其他方法,在面对新知识的框架体系时不会慌乱不知所措,而是跳出来从整体的高度来审视自己面对的问题,这种时候往往能得到意外的收获。其实,最近一年最重要的是我的女儿,无论我面对多么头痛的问题,每当我回到家里坐在椅子上愁眉苦脸的思考时,女儿往往会站在书房的门口,拿着她心爱的“宝贝”朝我微笑,那天使般的笑容完全化解了我心中所有的烦恼和忧愁,我觉得那是世上最美好的事物,而那些所谓的问题也经常在女儿的笑容背后被我一一干掉了。也许同事们很奇怪我经常在早晨上班时兴奋的给大家讲开发上的新想法,其实他们不知道我有这样一个秘密武器。:)
工作:
拥有次世代渲染效果的引擎就是次世代引擎吗?回答当然是否定的。6月份我调整了 3D 引擎的开发计划,决定实现一些所谓的次世代渲染效果,从完成情况上看基本符合我的预期,另一方面也是让引擎组的开发人员认识到这样一个道理:写 shader 容易,整合难。事实确实如此,从调研实现方案到在引擎中实现出来2个研发小组总计花去了不到3周的时间,而整合这些渲染特效到引擎中并提供良好的使用接口则直到现在也没有完全结束,更别提优化了。一个不了解 3D 引擎开发的程序员往往会很羡慕引擎开发的工作,他以为做引擎开发天天接触的都是图形、shader、华丽的渲染特效,但事实上并不是这样。不妨举个例子,一个去年进入引擎开发的新人,在引擎开发的一年多的时间里参与了如下的开发工作:字体绘制、文件系统、序列化系统、粒子系统及编辑器、特效系统及编辑器、纹理管理、异步资源管理,在这个过程中他学到了 win32 编程、GUI 框架(wxWidget)、windows File System Management、粒子系统逻辑、特效逻辑、多线程、纹理格式解析等等。可以看出这些知识覆盖面比较广,每一个部分精通都不容易,都需要时间和经验,而这些其实就是引擎的本质,是引擎的基础,没有这些就不能称之为引擎,没有这些引擎也无法工作。在这背后他所学到的更多的是对软件开发的理解,这包括:如何设计人性化的编辑器UI?如何提供良好的使用接口?如何保证开发过程中系统结构的可扩展性?如何解决原有系统和新功能之间的冲突?如何用最简便的方式来实现功能?如何解决 bug?如何修改一个 bug 而不会因此产生新的 bug?如何多人协作开?如何与其他成员沟通交流?如何最大化的表达自己的想法而尽可能的减少信息丢失?这些是软件开发本身的东西,无论开发哪种领域的软件都要面临这些问题,但是这些确实非常重要的,会写 shader,会点图形学知识是远远不够的,3D 引擎是众多开发技术的混合体,这是个庞大的体系结构,图形渲染是上层结构,是最后的数据呈现,而驱动这些数据的却是那些底层的基础功能,没有这些基础功能的保驾护航,单单一个渲染 API 是没有任何意义的。
在开发中另一个头痛的问题是如何选择的问题,很多时候已经找到了解决之道,但存在着多种解决方案,如何选择就成为了一个难点,因为开发者都希望做出最优的决定,但系统在没有实现和被应用之前是很难判断出选择的对错。这时需要的就是经验的判断和对未来的假设,如果缺少了这一步所作的决定是比较危险的,当然,可以通过后期的重构来不断调整,但是重构并不是推翻重来,重构是基于原有系统的局部修改,使原有系统尽可能的适应新的变化需求。这几乎已经是一个固定的要求了。而且当系统本身被大量的使用的情况下,即使推翻重来也是需要决策的勇气的。我经常被困扰的就是选择的难题,现在我已经形成了习惯,在头脑中自己和自己辩论,看哪边更有说服力,最后做出一个决定。其实我更希望和别人去讨论,因为自己的思维也是有局限性的,不同的思考方式往往使自己辛辛苦苦建立起的思维体系有所变化,也许是更加完善,也许是完全推翻。即使自己被推翻也没关系,重要的是最后会得出一个结论,而这个结论在大多数情况下会更加接近真实。
Advertisements
此条目发表在乱语分类目录。将固定链接加入收藏夹。

5 Responses to 生活 & 工作

  1. 继生说道:

    百尺竿头,再进一步。

  2. shi说道:

    老大,终于看到你写总结了。转眼就2年了。
    朋友给我介绍工作,碾转到了一个人手上,给他电话,他说,你没有什么经验,而且我们这边的事情很琐碎,你未见得愿意做。
    我说对的。
    挂了电话以后去公司会餐,喝多了,眼泪差点掉下来。
    我们同时在线过8万了,程序员就4个,还有海外版,常常几天就睡几个小时。琐碎,我连db里面null的字段没办法直接在update语句里面做算术运算的bug都要修,改core library,server memory pooling, object profiling找吃内存的瓶颈,就像朋友说的,程序员的工作就是要把琐碎的事情整合工具化,让它不再琐碎,琐碎才是挑战不是吗?我可能做不成一个好的程序员,可是想做一个负责任的人。
    你问我想做什么,其实我只想做一个让人觉得爱和执着是有意义的游戏,这种答案怎么说得出口,呵呵。
    还有好多事情要学,很多事情要尝试。
     
    对了,你的lightmap generator,我以前做过一个很搓的,支援mini, point, spot light。被卡在2件事上,1,tex coordination和texutue的排放,其实是同一个问题,简单的6面投影后患无穷,完全没有教育意义。后来是按mesh面的连接关系分片(减少接缝)然后计算一个均面投影上去,3d->2d得以映射就这样了,2d的这几块最后要排到一个texuture上,用了机械专业里面的排样算法,下载的,没怎么看懂,反正用命令行测过没问题-_-//…还有个被卡的就是instance,一个mesh的每个instance都会有不同的lightmap,生成的lightmap得挂在actor的层次,mesh应该在下面的component层次,我那时候和朋友没管那么多,mesh导出来直接就渲染了,也懒得改,反正designer也懒得弄instance,这个就没做,就是个navigation的小项目。。。。希望对你有帮助阿。。。这个我们2年前好像就聊过啊。。。喀喀。。。我好能敲字。 
     

  3. 说道:

    你说得很对,程序员每天的工作其实就是琐碎组成的,但我希望每天对自己都能有意义,挑战自己的能力,而不是重复重复再重复的做之前已经做过的很多琐碎的事,我想程序员另一个很重要的目标就是扫除那些已经解决过的问题,而不是每次都去解决相同的问题,否则就不是有意义的程序人生.
    Lightmap generation 一个主要的问题就是 uv,这里我采用不同的方案:对场景和地形使用生成的 uv,对于 static mesh 来说让美术在 max 里预先铺好,比自己计算要好而且利用率最高,这个方法我是从 ue3 学来的。第二个问题我还没考虑过,不过我们的引擎在渲染数据的组织上本来就是几何数据和渲染实体数据是分离的,所以可以做到每个 instance 拥有不同的 lightmap。
    如果你回上海,一定要跟我联系,我们聊聊。

  4. shi说道:

    好的好的,一定找你啊,呵呵。老大,那个直接用staic mesh uv的方法可以省很多资源了,但是有个小毛病,就是美术贴图的时候不能用tile(贴瓷砖那样的),uv值必须在0-1.0之间,好在其实我觉得tile出来的场景也蛮丑,游戏里面没有也罢。我以前就是被那个美术哥哥折磨的阿。。。非要用tile,而且个个房间都贴,烦死,所以自己生成uv,然后多占了一个texture的层。

  5. wu说道:

    整合我倒觉得挺简单的,我是用的脚本整合的,脚本里可以include脚本类似dll,调用c++代码,使用shader,创建RTT,控制渲染流程等。复杂的效果直接用c++写好,然后脚本委托到c++,简单的直接用脚本写。使用也简单,直接调用SetMaterial(Material  *  pMaterial)就可以了。这个只需要设计一次,架构做好了,以后就只用增加效果列表了。
    效果要看什么效果了,看看pdf,实现一个当然不是太难,问题是有些不是有现成算法的,有些是要看N个pdf比较那个算法最适合,哪里需要改进。有些pdf要看懂还得先去学一堆数学。这样你做的还只是别人都有的效果,如果做一个效果比较先进的引擎,没有自己原创的算法行吗?

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s