[成都IT行业是如何优化游戏代码.docxVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[成都IT行业是如何优化游戏代码

成都IT行业是如何优化游戏代码对于像英雄联盟这样不断演进的产品的开发者而言,需要不断的致力于与系统的熵作斗争,因为他们将越来越多的内容添加到资源有限的服务器中。新的内容带了新的隐性成本——不仅是更多的实施成本,同时也包括由于创造了更多的纹理、仿真和处理造成的内存和性能成本。如果我们忽略(或者错误估算)了这些成本,则整体游戏性能不佳,可玩性减少。故障使人厌恶,延迟使人愤怒,帧率下降让人沮丧。我是致力于提高英雄联盟性能团队中的一员。我们为客户端和服务器做快照,发现问题 (性能相关和其他),然后修复问题。同时,我们将在这个过程中学到的东西反馈其他团队,并且给他们提供工具,使他们在影响用户之前来检测并定位他们自己的性能问题。我们不断的提高英雄联盟的性能为艺术家和设计师添加新的东西提供了空间:当他们使游戏更庞大更优秀的同时,我们使之更快。这是关于我们团队如何优化英雄联盟性能系列的第一篇文章,后续我们将不断持续更新。这是一项回报丰厚的挑战,这篇文章将深入介绍我们在粒子系统中遇到的一些有趣的挑战——正如在下图中,你可以看到粒子系统在游戏中扮演了十分重要的角色。上图是在英雄联盟游戏中高粒子密度的一个例子。优化,并不是在程序集中重写大量的代码——尽管有些时候是这样的。我们仅变更那些不仅能够提高性能,而且维护正确性的代码,如果有可能的话,还会提高代码质量。最后一项略显挑剔:任何不易读、不易维护的代码都会产生技术债务,这个我们稍后再谈。优化已有的代码库,我们采用了三个基本步骤:鉴别、理解和迭代。步骤一鉴别在开始之前,我们首先需要确认哪些代码需要进行优化。即使有些代码看起来明显性能较差,但是由于其对整体性能影响极小,优化这类代码收益极少(尤其当花费在上面的时间和精力在其他方面可以做到更好的收益)。我们使用代码检测工具和采样分析器来帮助识别非性能部分的基本代码。?步骤二理解一旦我们得知代码库的哪部分代码性能较差,我们便会详细的查看这部分代码以求完全理解代码。理解代码意味着理解这些代码的含义及原本的目的。接着,我们就能知悉为何这些代码产生瓶颈了。步骤三迭代当我们理解了为何特定部分代码执行较慢及代码本意要执行的内容,我们就有了足够的信息来设计和开发一套可行的解决方案。使用鉴别步骤中的工具和得到的快照数据,我们将新代码和旧代码的性能做了比较。如果解决方案效果出众,我们会彻底的进行测试以确保不引入来新的bug,那么接下来就可以击掌庆贺了,因为我们已经为其他内部测试做好了充分的准备。在大多数情况下,新的代码不见得足够快,所以我们不断迭代解决方案,知道新的代码能达到优化的目的。现在,让我们看下在英雄联盟代码库中这几个步骤的实施细节,并以最近优化的粒子系统逐步介绍。步骤1:鉴别拳头的工程师使用大量的分析工具来检查游戏客户端和服务器的性能。我们先查看来自客户端的帧率和通过Waffles得到的高级分析信息(通过工具的特定函数获得的输出信息),这个内部工具可以让我们在内部构建的客户端与服务器保持联通。此外,Waffles还具备其他功能,如在测试过程中触发调试、检查游戏内部数据如导航分格和暂停或者减缓游戏过程。?Waffles截图?Waffles提供了一个实时展示界面,并提供详细的性能信息。上图是Waffles如何展现客户端性能表现的经典例子,上边图形(绿色柱状图)以毫秒为单位表示了帧率——越高的柱状图表示越低的帧率。非常慢的帧率在游戏中是可以感受得到的。柱状图下面是重要功能的分层视图,通过点击任何绿色柱状图,工程师都会看到影响该帧率的详细信息。通过这里,我们可以看出些端倪,即哪部分代码运行时导致性能较差的关键。我们使用一个简单的宏在代码库内手工检测一些重要函数来提供这份性能相关的信息。在对外发布的游戏版本中,这个宏并没有被打包编译,但在测试版本打包中,这个宏作为一个很小的class存在,它创建了一个事件,存放于配置文件缓冲区。该事件包含一个字符串识别码、一个线程ID、一个时间戳和其他必要的信息(比如它还可以存储在其生命周期内所有发生的内存配置数)。当对象超出范围后,析构器会在配置缓冲区中更新该事件自构造以来的运行时间。在随后的时间,可以输出和解析此配置文件缓冲区——理想的情况是在另一个进程进行以尽量减少对游戏本身的影响。在这个例子中,我们将分析缓冲区输出到文件,并且读入到构建在Chrome浏览器中可视化工具中(关于跟踪工具的更多信息,可以点击这里,你可以在自己的Chrome浏览器中通过在地址栏敲入chrome://tracing/进行尝试。这个扩展程序被设计用来进行网页性能分析,输入格式是JSON,所以你可以轻松的根据你自己的数据构造输入)。通过图形化后的结果,我们可以看到哪些是执行较慢的函数,或者在那里不断有大量的小函数被调用:这些都是次优代码的迹象。让我来展示详细操作

文档评论(0)

yingxiaorong28 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档