盛大游戏黄炎中——"悍将传世"开发经验谈

  • 贾国清

2013 年 1 月 4 日

话题:C++语言 & 开发

此文是针对游戏开发领域系列采访中的第三篇,我们会采访到目前游戏开发比较热门的技术和公司来对问题进行解答,问题主要涉及游戏简介、开发中 5 件对的事情、5 件可以改进的事情、美工设计以及开发经验分享等。话题主要涵盖开发、发布、平台、开发工具和创新工具等展开。本文是针对盛大游戏技术团队成员黄炎中的采访,以下是采访的具体内容:

InfoQ:请首先做下自我介绍?

黄炎中:我是黄炎中,从小立志做游戏。曾自主创业。2005 年进入盛大,曾参与《疯狂赛车》,《英雄连》等项目研发。2008 年开始负责页游开发。先后负责《纵横天下》,《传世群英传 Web》版网页游戏的研发工作。目前工作重点在《悍将传世》项目。

InfoQ:盛大游戏的《悍将传世》在市面上很受欢迎,能否对产品理念做一下简单的介绍?

黄炎中:《悍将传世》是从 2011 年下半年开始做的项目。当时的 ARPG 游戏主要分两种,一种是强调 PK 的仿传奇类产品,这类游戏初步实现了 PK 玩法,但是画面相比端游有较大差距。还有一种是强调休闲玩法的 ARPG 游戏,画面比较精美,但是完全没有 PK 的感觉。所以通过市场调研,我们认为《悍将传世》这类可以同时满足两方面需求的页游应该会获得用户的认可。而 Flash 11 的推出,也为实现这一目标提供了底层技术保障。

InfoQ:在游戏的设计和开发过程中,请列举 4 件认为做的对的事情(4 “Rights”,请配以具体事例,分别说明)?

黄炎中:我分享几个重点在做的事情给大家吧。

  1. 在非常早的时候就开始评估 Flash11,做各种技术储备。

    例如游戏开发比较关心的每秒 Fps 是否能够达到 60 以保证流畅性;以及在 Fps 为 60 的状态下,每秒能够绘制多少次多边形。包括使用了 GPU 加速,需要把贴图从内存传输到现存,这个过程中有多少开销,会不会卡等,都属于测试范围。

    在前期的时候,测试结果非常不理想,非常卡。一个是 Fps 上不去,或者半途中会突然出现卡顿的情况。这甚至让我们对 Flash11 平台产生了怀疑。经过团队深入研究后发现,虽然用户主动上传到 GPU 的内容渲染起来速度还是可以保证的。但是 Flash 会进行合成操作,也就是把原来非 GPU 的 2D 内容,和 GPU 渲染后的内容进行合成。其过程是先将 2D 内容进行拍照然后作为贴图传输到 GPU 里,再次合成渲染。这个过程造成了几乎 50% 以上的开销,其触发机制几乎是不可控的。

    如果用户的图片上传比较密集的话,最直接的结果就是直接卡个 1、2 秒。导致游戏无法进行。发现这个问题后,我们也找了很多解决方案,在内部机制无法改变的情况下,对游戏能够使用的资源以及加载策略进行了大幅删减和优化。这种情况才得以好转。当然 Flash 11 在后续的几个版本上对此进行了优化,现在的版本已经基本解决这些问题。也幸亏在早些时候就发现了这些问题,否则贸然使用 Flash 11 既是对项目不负责了。



     
  2. 保持和 Adobe 方面的紧密沟通。

    为了使用 Flash 11,而且当时世面上基本没有可参照的产品,所以为了拿到第一手信息。保持和 Adobe 进行有效沟通是必须的。

    Adobe 有一个非常专业的传教士团队。而负责游戏方面马鉴(@7Yue)和黄峻(@Peter)是我的经常联系的。他们非常资深,对 Flash 极其了解。甚至 Flash 里有一部分代码是 7Yue 编写的。我去年底告诉他们决定使用 Flash 11 开发项目。他们非常兴奋,之后我们几乎每 2 周都要电话会议一次。我把我们发现的问题,可以通过这个快速渠道直接反馈给 Adobe,并且尽快加到他们的版本里去。而 Adobe 确认的修改项也会通过他们直接反馈给我。

    有一次我一口气和 Adobe 反应了几个亟待解决的问题,其中有一个就是对 GPU 支持不完整的问题。当时 ATF 格式只支持 DXT1,这个格式是不能带 Alpha 通道的。随后,他们告诉我,很快就能支持 DXT5 了,这是种能够带 Alpha 通道的格式。果然在今年 8 月份发布的 Flash 11.4 版本里就带上了这个功能。Peter 后来说,原来他们早就有这个计划了,但是为了完整测试保证万无一失,所以直到 8 月份才对外公布。这也体现了 Adobe 作为 IT 界巨头,不但小心谨慎而且对游戏开发非常了解,让人非常放心。到现在为止,我们仍然保持着紧密沟通。这也为整个开发过程提供了保障。



     
  3. 谨慎使用新技术进行产品开发。

    Flash 11 本身是一个网页中的插件,那么做过网页开发的同学都应该知道,兼容性是摆在每个 Web 开发者面前的问题,很有可能在不同的浏览器下面看到的内容是完全不一样的。虽然 Flash 本身已经屏蔽了很多这样的问题,但是数据显示直到 2012 上半年为止,全国仍然有 20% 的玩家无法使用 GPU 加速。各种原因都有,例如某些浏览器捆绑了 Flash 10 的版本,或者浏览器强制无法使用 GPU 加速,或者用户本机显卡过旧导致无法打开 GPU 加速。

    对于这种情况,一旦玩家无法使用 GPU 那么就无法正常进行游戏了。出于谨慎考虑,我们利用了以前客户端的经验,在资源流程上修改美术导图工具,原始图片在导出的最后一步分别导出成 Flash 10 的 Png 格式以及 Flash 11 的 ATF 格式。在程序上分成了 Flash 10 版本和 Flash 11 版本。在程序启动的时候检查是否能启动 GPU 加速,如果不行的话,直接使用 Flash 10 的渲染器和 Png 格式。事实上做这样改进虽然工作量几乎翻了一倍,但是挽留到不少用户。



     
  4. 使用 Monical 不断优化代码,增强游戏运行时的体验。

    Flash 是在 2007 年加入了 Avm2 才能够实现大型项目开发。而到现在为止,Avm 的性能一直为人诟病。但是你真要找到其性能低下的地方,还真不容易。除了要在代码上精心设计,而且需要不断在资源动画上精雕细琢。这是件非常花费时间的事情。

    在今年 7 月份,Adobe 发布了全新的调试工具 Monical 能够以图形化的形式精确查看程序运行时的状态,实在是雪中送炭。在早期的测试版本里,最核心的功能,就是能够将 Flash 内部运行的几大块,AS 代码,内存对象使用,Native 代码,GC 机制用颜色进行明确区分。最厉害的还能够在每一帧,对运行了多少代码进行精确评估排序。我们可以直接的定位那些调用次数较多,并且跑的比较慢的代码。在这种机制保证下,程序运行几乎是透明的。大大节省了我们找问题的时间。这个工具目前已经随着 Adobe 的 GAMING Tools 一起打包发布了,并且换了个更时髦的名字 Adobe Scott,强烈推荐大家使用。

InfoQ:请列举在开发过程中,您认为还值得改进或提升的 3 件事情?

黄炎中:Adobe 要把 Flash 打造成互联网的游戏机,那么我认为以下几个事情是必须做的。

  1. 提升 ActionScript 的运行速度

    Flash 和传统游戏相比,AS3 的速度要比 C++ 慢上几乎 1000 倍,这样的速度的运行速度已经严重影响了大型游戏登陆的可能性。目前已经有 C++ 登陆 Flash 的解决方案,比如 FLACC。这得以让一部分传统游戏开发者上 Flash 开发。但是我必须指出的是,目前 Flash 开发者还是希望 AS 能够运行的更快一些。

     
  2. GPU 方面需要增加对失量图形的支持

    现在矢量图形的渲染,仍然是 CPU 完成的。特别大部分 2D 动画是使用 FlashCS 制作的 SWF 文件尤其需要这个特性。如果能够做到的话,那么不但能借助 GPU 大幅提高游戏流畅性,而且由于内容产生流程的完整,将对产业产生深远影响。我们期待这个功能的尽早实现。

     
  3. 投入更多资源,做好 Flash 的推广工作

    目前卡在使用 Flash 11 进行游戏开发的问题上,Flash 的市场保有率仍然是头等大事。Flash 一个新版本发布到市场覆盖率达到 60% 有大约 8 个月时间。而达到 90% 以上至少需要 1 年。其中还存在哪些浏览器捆绑 FLASH 老版本的情况出现。这些兼容性问题都会导致游戏运行异常。开发商必须花费更多精力去解决兼容性问题。所以希望 Adobe 尽可能保证 Flash 版本更新后的推送工作。

     
  4. 走过的弯路

    在最初期的时候,我们本来希望做一个版本,能够解决所有兼容性问题。但前面也说了,Flash 11 的普及率没有我们想象中的那么高,大约比普通页游底 10 来个点。为此,项目组也承受了很大的压力。

    经过多次评估之后,我们不得不从头开始把美术导出流水线重新进行改造,一套专门导出 Flash 11 版本的,一套专门给 Flash 10 版本使用的。当用户打开游戏的时候自动检查版本号,并且使用对应的资源。

    转换成 Flash 10 版本后,所有东西都保存在内存中,无法使用显存的任何资源。而原来的内存是不够用的。这个转换工作花费了很长时间。美术制作规范几乎推翻重来,我们不得不把角色进行缩小,因为角色是最吃内存的,每个方向,每个动作,每一个画面,都是相乘的关系,人一多,内存使用直接上升。 所以必须进行调整,此外在策划玩法上也做了一定限制,比如某些战场地图,所有玩家的衣服都是和本行会的服装一致的。这样如果只有 2 个行会进行战斗的话,只要用男女各两套,一共 4 套衣服就可以了。这也是可以分享给大家的经验,以后美术上得悠着点用。

相关内容

访谈:人人游戏高级总监顾雷谈游戏设计与开发

谈谈哥们网的游戏开发理念

C++语言 & 开发