订阅业界RSS CSDN首页> 业界

专访叶劲峰:漫谈游戏开发和游戏优化

发表于2014-07-30 09:09| 次阅读| 来源CSDN| 0 条评论| 作者张勇

摘要:社区之星第50期采访了腾讯互动娱乐研发部引擎技术中心专家工程师叶劲峰,他讲述了译著《游戏引擎架构》经历,并就游戏引擎、优化、游戏开发学习等进行了分享。与此同时,叶劲峰也将坐镇社区问答第8期回答大家问题。

写在之前:腾讯互动娱乐研发部引擎技术中心任专家工程师叶劲峰将携他的《游戏引擎架构》一书做客我们社区问答栏目,担任第八期的嘉宾,届时会接受广大网友的提问,欢迎各位网友前来与著名游戏开发者叶劲峰一起探讨游戏开发。在社区问答开始之前,我们先通过一篇《社区之星》专访来认识叶劲峰。以下为采访正文: 


在GDC2014上,叶劲峰与《游戏引擎架构》原作者Jason Gregory合影

叶劲峰,腾讯互动娱乐研发部引擎技术中心任专家工程师,曾合著《DirectX9游戏编程实务》,译著有《游戏引擎架构》。2008年在担任上海育碧引擎工程师间开发《美食从天而降(Cloudy with a Chance of Meatballs)》,2009年在麻辣马开发《爱丽丝:疯狂回归(Alice: Madness Returns)》,2011年加入腾讯互动娱乐引擎技术中心担任专家工程师,所研发的技术已用于《斗战神》、《天涯明月刀》、《众神争霸》等项目中。

CSDN:能简单介绍下自己及所从事的工作吗?

叶劲峰:香港同胞一名,每天花三小时往返香港深圳间。现于腾讯互动娱乐研发部引擎技术中心任专家工程师,主要从事游戏引擎组件技术的研发及顾问工作。虽然自称游戏程序员,却非计算机专业出身,而是在香港大学认知科学本科毕业,并在中文大学攻读系统工程及工程管理,获取哲学硕士(MPhil)。什么是哲学硕士?就是英式教育里的研究型的硕士课程,有别于修课型硕士,我的研究方向是与人工智能相关的基于内容的影像检索(CBIR)。

但说到编程,其实我在小学时已有幸学习Basic,在初中自学C和C++,并在高一高二时开发了一个DOS的单机SRPG《王子传奇》,并在台湾发行,在十人团队中除了是主程还是主策呢。我在理工大学从事游戏引擎相关的研发,并在上海育碧及麻辣马开发过多游戏平台的《Cloudy with a Chance of Meatballs》和《Alice: Madness Returns》。在腾讯我虽然不是在游戏制作团队中,但一些研发成果获应用于《斗战神》、《天涯明月刀》等项目中。

要数和程序有关的事,我把儿子命名为Lua──除了是一种我喜欢的编程语言的名称,也由于儿子是在中秋出生,而Lua是葡萄牙文的月亮。

CSDN:为什么会选择翻译《游戏引擎架构》这本书?翻译的过程一帆风顺吗?

叶劲峰:这个念头源于我还在上海麻辣马工作的时候。不得不提,麻辣马是一家很人性化的公司。公司的目标之一是提高员工的生活质量,不加班之余,若能及早完成里程碑还可能直接放假。在这种轻松的环境中,我有更多时间阅读。其中在美国网购回来的《Game Engine Architecture》,可谓爱不释手,因为许多书里的内容接近真实的工作,很容易引起共鸣。我兴致勃勃地推荐给同事们,但他们觉得读英文原版书比较吃力,不太愿意读。如果只因语言而令国内的同好者错过这本好书,实在可惜。虽然我的翻译经验为零,但在一次偶然的聚会中,向第一次见面的周筠老师毛遂自荐,提出翻译该书的意愿。

翻译过程,得周老师相助,试译及之后的流程都尚算顺利,但我在试译中深深体会技术翻译的困难,港台和内地的中文用语甚至中文的使用习惯也有差异,唯有从头开始学习一点翻译理论及知识,并编写词汇表给业界朋友审查。

在麻辣马的日子,翻译进度虽然比预想落后(低估时间是程序员的天性?),但只身在上海,工作结束后的时间十分充裕,成果总能一点一点累积起来。但过了半年,女儿出生了,我决定回到香港与家人团聚。在香港远程完成《Alice: MR》的工作后,麻辣马也转型暂时不做游戏机平台了,公司还帮忙让一些同事和我集体面试腾讯和几家公司。后来就变成每天从香港往返深圳的日子了。家庭、工作和交通占据了许多时间,于是出现了严重的跳票,原来预计一年多的工作,经历了三年半才完成。

CSDN:翻译完这本书后,有什么感想吗?

叶劲峰:无论这本书的评价如何,我也已尽力完成了它。除了翻译原文,我也尽量审查原文的正确性,并在一些地方加上补充说明。之前曾和周老师提及一本畅销书籍中的排版问题,为了不出现那些问题我就自行用LaTeX排版,保证数学公式符号、代码等各方面都达到专业水平。最后连图片都自行翻译修图。中英双语索引也是自行编制的,参考书目中加入中译本信息,这些都是希望能方便读者。希望读者能原谅翻译的延误。

CSDN:你怎么评价这本书,你觉得这本书能给哪些人带来帮助?

叶劲峰:这本书在游戏开发书籍中是非常独特的。作为译者也感到翻译就要花很长时间,实在很难想像,原作者是怎么能在开发缕获年度大奖《神秘海域(Uncharted)》系列的同时,还能写出这本著作。这本书是原作者把二十年的游戏开发知识经验浓缩后系统化的展现,也见证了这些年的一些游戏技术进展。

我想,对于业界的游戏程序员(包括我)都能在本书中获得一些得著,补足一些之前可能知道大概但未仔细研究的地方。这本书更最重要的潜在读者群,应该是未来的专业游戏开发者。他们可能正在大学学习编程,却不知道那些编程怎样能开发游戏及其相关技术。他们也可能是游戏开发的爱好者,或许懂得使用一些游戏引擎,却未能掌握许多技术原理及细节,可能想做一些游戏独特的内容却难以入手。我希望本译作对于国内游戏业的未来有所帮助。

游戏开发

CSDN:在你开发的众多游戏中,你最喜欢哪个游戏?为什么?

叶劲峰:其实我开发的游戏井不多,最喜欢的应该是《王子传奇》。除了该作品是由自己主策主程,当时对它的技术及游戏性还是感到相当满意的,而不平凡的开发经历也是令人回味。中三的时候,在学校里的休息时间写剧本及游戏设计,说服公司开发这个专案,然后每天放学后就脱掉校服到工厂区里的办工室开会、编程,直到很晚才回家,还和家人吵架。大概我现在作为人父也不一定接受儿子这么干。虽然游戏的销售成绩并不太理想,但当中的经验的确造就了今天的我。

CSDN:游戏开发中常用的工具有哪些?

叶劲峰:除游戏引擎,程序员最常用的是Visual Studio、XCode、Intel GPA/VTune等,而美术最常用的是Photoshop、3D Studio Max、Maya等,策划是Word、Excel、SketchUp等。

CSDN:能不能介绍下一些常用的游戏引擎?另外,游戏开发中使用开源引擎的比例高不高?为什么?

叶劲峰:现在由于手机游戏的盛行,最常用的大概是Unity及Cocos2D-X。而传统PC客户端网游最常用的是Unreal、CryEngine、Gamebryo、OGRE等。其中Cocos2D-X和OGRE是开源引擎。Cocos2D-X大概是使用比率很高的游戏引擎,我认为主要是因为本身2D游戏引擎的功能需求比较简单,而Cocos2D-X在跨平台方面的支持比较好,刚好适合当时快速开发智能手机游戏的潮流。

CSDN:开发一款游戏,要进行所谓的优化都包括哪些方面?

叶劲峰:游戏软件的优化和一般软件是有一些区别。

游戏通常是软实时(soft real-time),就是说运行上有时间限制,但没有硬实时般严格。

先谈固定硬件的游戏平台,如游戏机和街机。在这些平台上,通常会设置固定的帧率目标,例如30 FPS(即每帧33.3毫秒)。游戏开发者希望在这个时间限制下,尽量提升游戏的品质,例如更精细的角色和场境、加入更多效果、提升人工智能水平等。优化的目的除了令游戏顺畅,也是提升游戏品质的必要条件之一。

对于PC或手机平台,因为硬件的性能有很大差异,优化就没有一个具体的目标,而是希望尽可能在大部分平台上都能做得最好(虽然PC游戏有几百FPS的情况,但实质上几乎不能增加流畅性)。

从玩家角度,我认为游戏的性能指标大概有这几方面:

  1. 平均帧率
  2. 流畅性(不要「卡」,专业地说就是少spikes)
  3. 互动延迟(输入后至看到反应的时长)
  4. 等待时间(读盘、写档、网络连接等)
  5. 内存用量
  6. 游戏体积
  7. 网络流量(主要是移动平台)
  8. 耗电量(主要是移动平台)

而在开发的角度来说,我认为优化方法可以分为无损和有损的。无损是指不影响品质,纯粹通过技术上的优化去提升整体性能。而有损是指通过简化、近似化去改善性能,例如简化着色器(shader)、要求美术降低某角色的三角形数目、要求关卡设计师减少一些NPC等。

优化前我们要先进行性能剖析(profiling),找出性能问题的核心,然后再看看有什么方法可以尝试。主要可分为算法上的和底层的优化方法。不详细说明,就举个例子吧。

例如,在二维弹幕射击游戏中,需把大量子弹与飞机做碰撞测试(相交测试)。如果有n颗子弹,m个可被击中的目标,蛮力法需要mn次测试。我们可以看情况,使用一些空间分割的算法,把子弹和目标分配到不同的空间范围里,只需对每个范围里的物体做测试。而在底层方面,我们可以考虑使用多线性、SIMD指令,并考虑到缓存一致性等方面去优化。

上述例子主要是在CPU上进行的游戏逻辑方面的优化,而许多游戏中也需要在CPU/GPU上对图形方面进行优化。在PC/手机平台上,因为瓶颈不固定,游戏开发者通常会尽力优化每一个部分。

CSDN:你觉得内地的游戏开发和香港有没有差距?另外,这两个不同地域在游戏开发理念上是否有什么不同?

叶劲峰:现时香港的游戏公司屈指可数,最近商业上较成功的例子是Mad Head公司的《神魔之塔》。但香港的游戏业从公司数量和规模而言,都难以和内地的公司比较。

理念上没觉得有太大差距,一些游戏主要是以运营为主,而另一些则是以独立创意为重点。

游戏开发如何入门?

CSDN:可能很少人知道,作为游戏开发大牛的你不是计算机专业毕业的,因此能否分享下如何系统地学习和入门游戏开发?

叶劲峰:我或者我那个年代的游戏开发者,学习路径和今天的会有很大不同。在DOS年代,我们可能都是先学习一些底层知识。DOS如其名,提供文件系统等功能,其余大部分现时称作驱动的软件,几乎都要自己做,例如怎么利用VGA的中断和内存映射去画图,怎么写汇编去优化那些过程,类似的还有键盘、鼠标、不同品牌的立效卡等,而较高层次的是管理内存、资源等。

二十年前互联网未普及,我主要是从书本中学习编程及游戏技术知识,还有就是在BBS上流传的一些外国的游戏及图形技术文档,可以说是非常杂乱无章地学习,并不断尝试。现时的环境很不一样,有很好的编程和游戏开发书籍,也有很多开源项目可以参考,还可以很容易在网上找到各种答案。但相对的,现在游戏用到的技术,广度和深度都比以前复杂得多。

由于游戏开发涉及很多不同领域,以入门来说,具基本的编程知识之后,我建议先学习使用一些游戏引擎,开发一些简单的游戏。那些游戏可能是三消、打飞机等小游戏,尽可能做不同类型的游戏。做出来的游戏自己要玩,也给别人玩,吸取意见,作出改善。不介意的话最好是开源开发,并且写博客把过程心得都记录下来,有助于整理思考,并能与网友交流。充分了解游戏性编程后,可以按兴趣发展其他专门的技术范畴,例如图形学、物理模拟、人工智能等。

CSDN:做游戏开发,你认为学什么计算机语言比较好?

叶劲峰:我想应该是C++、C#和Lua,分别是游戏开发中最流行的原生开发语言、.NET平台语言和脚本语言。多数游戏引擎及相关组件都是由C++开发,而C#则主要用于Unity及开发工具,Lua则适合编写经常改动的游戏逻辑。

爱好和工作

CSDN:你会经常玩游戏吗?都会玩什么?除了这个,工作之余你还喜欢做些什么?

叶劲峰:现在玩得比较少,通常是和儿子玩平板电脑的游戏。除了最近花比较多时间做开源项目,一直有阅读的习惯。以前比较喜欢风光摄影,但这几年都变成儿童摄影了。

CSDN:最后谈谈你在腾讯互娱研发部的这份工作吧,感觉如何?

叶劲峰:我想是有点儿幸运。在上海从事游戏开发时都是在外资公司,我几乎不太了解国内的游戏公司。实际上我是在面试时,才知道腾讯在国内游戏市场的地位。在我从事商业工作的生涯中,这里是给我最大技术自由度的公司,可以研发不同类型的技术,并有许多工作室可以提供需求及反馈。我也乐于做一些培训项目及撰写技术文章,并在一些流程中做一些技术评审工作。我觉得在国内已没有更适合收留我的地方了。不过要做技术突破是很困难的,希望能够努力找到缺口。

友情提醒:叶劲峰老师从今天开始,坐镇CSDN社区问答第八期,届时会接受广大网友的提问,欢迎各位网友前来与叶劲峰一起探讨游戏开发。

参与活动请点击社区问答第八期:叶劲峰——游戏引擎架构】。

若想获悉叶劲峰更多动态,请关注:

新浪微博: 请点击进入 

社区之星访谈上期回顾:

专访朱燚:弃移动互联网应用回归传统的勇者

专访陆其明:技术牛人的蜕变之路

更多精彩内容,请点击社区之星查看。

CSDN社区之星专访栏目,欢迎推荐采访人或自荐,来分享你的成长经历和相关技术,相关信息请发送邮件至:zhangyong#csdn.net(#换成@)。

0
0