首页 > 游戏新闻 > 游戏资讯

破解技术难题,Unity官方性能优化和企业服务是如何工作的?

发布时间:2022-03-19 13:26:15 来源:网络 作者:小编伯羽

  11月16-20日,中国团结在线技术大会以直播的形式召开,为广大开发者带来了一场前沿技术和优秀案例的在线盛会。在11月18日的游戏特别会议上,Unity大中华区技术总监张黎明向开发者详细介绍了Unity引擎、性能优化和企业服务。

  张黎明:大家好,我是张黎明,今晚的主讲人。我在Unity China负责企业技术支持和解决方案。今天的主题是Unity性能优化和企业服务。性能调整对于所有游戏开发者来说都是一个永恒的话题,几乎每年在Unite上我们都会分享一个类似的主题来分享我们的性能经验。今天的内容与以往类似,也是为大家介绍我们做性能优化时常用的优化流程。最大的不同是,我在这里是想谈谈我们刚刚推出的UPR在线性能优化和服务平台。最后,我将向您介绍我们为中国客户提供的商务支持服务。

  这里简单介绍一下我们为客户提供的一项性能优化服务,叫做Project Review。简而言之,我们会让Unity的官方技术专家到客户网站进行性能分析服务。第二部分是我们目前的自动化在线性能分析平台UPR,最后是企业服务。首先,让我们看看什么是项目回顾。在过去,Project Review主要为那些在发行前经常遇到各种延迟、低帧率、游戏体验差甚至崩溃的游戏提供现场支持服务。我们的Unity官方专家将前往客户的办公室,使用各种工具现场分析他们的项目,然后找到游戏的性能瓶颈。两天后,我们会写一份完整的性能优化报告,以文档的形式提交给客户告诉他们游戏中存在哪些瓶颈,以及可以通过哪些改进来解决这些瓶颈。在项目评审之前,我们会有一个项目沟通阶段。我们会提前询问客户是什么类型的游戏,团队的规模,团队成员的游戏开发经验,以及已知的性能问题,这将帮助我们减少在现场的时间。沟通后,我们会预约我们的工程师来现场,主要做以下几部分工作:首先,我们将有将近半天的时间来做资源检查。因为一些最常见的性能问题往往是由于美术资源导入设置不当引起的,从而导致各种性能问题。我们手动检查Unity编辑器中各种资源的导入设置是否有错误,然后将它们写入文档。

  稍后,我将介绍我们的在线性能优化服务,以及这个工具是如何解决过去大量繁琐的手工工作的。当然,第一部分是介绍我们的手册是怎么做的。除了资源检查,我们通常在第一个下午就开始使用Unity工具进行性能分析。我们主要在Unity编辑器中使用Unity分析器和内存分析器来做各种CPU和内存的性能分析。第二天,我们会使用一些第三方工具。最常用的工具是Apple Xcode中的Instrument。稍后我还将详细介绍这些工具的特性。当我们在做项目回顾时,最常见的问题就是美术资源。如果美术资源没有被正确地创建或参数在Unity中没有被正确地设置,那么它就需要通过手动或辅助工具进行检查。另外,我们经常会遇到CPU时间过长可能导致滞后的情况,比如加载一个资源时,资源比较大,可能会造成整个游戏都有一定的延迟。如果GPU占用的时间太长,整个游戏的帧率往往会下降,整个游戏运行不流畅。此外,通常GC分配使用得更频繁,这经常导致GC垃圾收集停滞。此外,还可能存在内存泄漏等问题。

  因此,在Project Review中,我们会使用一系列的工具来解决这些问题。首先,我们需要完成对所有常见美术资源的检查,如模型导入设置、纹理导入设置、音频导入设置和动画导入设置等。但是随着游戏的项目越来越大,我们很难在Project Review中对所有资源进行完整的Review。这就是为什么稍后我们将在UPR线上的性能分析工具中提供一些自动化解决方案。在检查资源后,我们开始使用Unity自己的Profiler工具进行分析。使用Unity分析器最常见的场景是分析游戏的卡住帧。如果你正在处理一个卡住的框架,你可以在Profiler中找到那个框架。它通常有一个峰值,当我找到峰值时,我可以看到该框架内所有函数的消耗量。我们可以检查哪些功能造成了太多的时间,并优化这部分。

  此外,Unity Profiler的一个常见用途是检查GC分配在这个上下文中,看看分配了什么单堆内存,并优化它,如果它分配太多,以避免单内存回收锁存时间。内存分析器用于优化整体内存消耗,因为它图形化地显示了你的内存被分配给了哪些模块,无论是渲染纹理、普通纹理、UI,还是其他元素。很明显您可以清楚地看到内存分配的布局。在使用Unity的官方工具进行分析后,我们一般需要使用第三方工具,其中大部分是Apple Instrument,因为很多性能数据是在硬件底层比较的,一些引擎层的数据是很难获得的。例如,GPU的一些详细的消费数据通常是通过操作系统或硬件厂商提供的工具来分析的。

  在Instrument中最常见的工具有三种。第一个工具是Time Profiler,它用于分析CPU性能。时间分析器比Unity分析器更方便。Unity分析器只能看到一帧的消耗情况,它没有能力对一段时间内的消耗情况进行统计。Time Profiler的一个有用特性是能够选择一个时间范围,并计算在该时间范围内使用的所有功能的顺序。我们在普遍定期审议中实施了另一种解决方案,稍后我们将看到。另外,《仪器中的分配》主要分析内存的消耗。它最常见的用途之一是检测内存泄漏。它的主要功能是,您可以查看随着时间的推移已分配但未释放的内存。如果我从主菜单场景切换到战斗场景,然后回到主菜单,发现一些内存没有被泄露,可能是被泄露了。所以我将能够关注那些没有被释放的内存它在哪里,来确定它是否在泄漏,如果是,来决定如何处理它。

  另一个常见的特性是在XCode中捕获帧的能力。因为我们需要做GPU性能分析,所以我们经常需要抓取当前渲染的一帧来查看每次绘制调用的时间,或者查看所有着色器的时间顺序,甚至查看某个着色器中的某个时间XCode有非常清晰的数据来显示每条指令需要多长时间。此数据在Unity Profiler中不可用。刚才提到的苹果XCode的功能是比较完善的。在工具中,它主要提供您需要的常用功能。但是对于Android平台来说,由于Android的硬件和操作系统都比较分散,所以相对复杂。所以如果我们在Android上做GPU性能分析,如果它是高通芯片,我们需要使用高通分析器,如果它是马里芯片,我们需要使用马里GPU分析器。

最新发现

相关资讯

今日热榜

热门游戏