搜索 Unity

游戏聚焦系列:性能分析和优化

2022年9月28日 类别 技术 | 11 分 阅读
Games Focus blog 03, hero image
Games Focus blog 03, hero image

游戏聚焦系列第三篇博客将着重介绍我们未来一年及以后的主要产品开发计划。这里,我们会介绍Unity性能分析和优化的现状、发布计划,以及我们对未来的设想。 

我叫Marika,已在电子游戏行业工作了近十年,目前是Unity分析工具和性能优化的高级技术产品经理。

在考虑Unity的性能表现时,我们主要考虑在三块领域里为用户提供帮助:

  • 洞察:让你有能力深入研究游戏性能,找出性能瓶颈,并准确找到有待优化的领域
  • 体验:提高Unity编辑器和运行时的性能,让你能够无阻碍地制作项目
  • 创新:指导你学习新的编程技术和范式,从一开始就将性能问题纳入考虑范围

今天的博文主要讨论前两块,涉及分析工具套的最新更新,并介绍用户反馈对产品2023年及未来路线图的塑造作用。文末将回顾几种优化项目的最佳做法。 

我们将在下一篇博文里深入探讨第三个领域,侧重性能的编程技术和工作流,重点介绍基于DOTS的项目。

Unity中的分析性能

我们倾向于把Unity分析功能看作是一种侦测工具,它帮你揭开应用性能过低或故障、代码分配过多内存的原因,让你了解引擎内部的运作。

我们的目的是通过分析和优化提高Unity创作工具和运行时的性能,帮助你在更多的平台和设备上为玩家带去流畅的游戏表现。

目前已有的内容

内存分析器被设计用来追踪内存的占用和组成。而Memory Profiler 1.0.0目前已作为经验证的包登陆Unity 2022.2测试版及以上版本(下载方法可在此处找到)。感谢每一位留下了宝贵意见的人向我们解释如何打造更好的工作流程。

许多用户都在目标平台上面临着内存限制带来的挑战。Memory Profiler(内存分析器)能在一张视图中清晰地展示资产和对象内存的概况,帮助你解决难题。它还会详细显示某段内存关联着哪些对象和系统等上下文信息。

你可以在细分视图深入分析截图,通过比较内存截图来找出潜在的内存泄漏和不必要的内存分配,防止其对内存占用产生负面影响。

The Summary tab provides an overview of total memory used. The Unity Objects tab shows any Unity objects that use memory, while the All of Memory tab displays a breakdown of all the memory in the snapshot that Unity tracks.
Summary(摘要)选项卡提供了总内存的概览。Unity Objects栏显示了所有内存中的Unity对象,而All of Memory栏则详细显示了快照内的所有内存。
You can compare memory usage between two memory snapshots.
你可以比较两张快照上的内存使用情况。

完善现有的分析工具集

在2022.1里,我们新添了Frame Timing Manager(帧定时管理器),让你能够记录并访问跨帧的帧定时数据。如果应用性能较低,你可以使用该功能来检验多张帧,分析为什么应用无法达到性能目标。更多详情请在文档中了解。

如果你想在Unity Profiler里检测底层的GPU指标,可以使用我们与Arm合作在2022.1中发布的新System Metrics Mali包。这个软件包让你访问移动设备的底层系统及硬件指标。如果你很好奇怎样才能让内容流畅地运行在Arm CPU和Mali GPU驱动的移动设备上,这篇2021博客可以指导你。

性能优化

上方所介绍的分析工具可以很好地帮助你开始搜寻有待改善的领域。不过在我的团队里,“性能优化”不仅仅关乎游戏的运行性能,也关乎于团队的工作表现,即你的生产力。我们的目标是让迭代更快、流程中断更少、编辑效率更高。

与Unity 2020 LTS相比,Unity 2021 LTS导入资产的速度提高了三到四倍,打开外部导入的项目的速度提高了8.7%。 

而2022版本又有了一些改进:

  • 通用渲染管线和高清渲染管线重新导入材质的改进
  • 编辑器流程的改进,包括:
    • 保存大型场景更快
    • 选取场景的停滞时间更短
    • 包含多个LOD组的场景视图性能更佳
    • 优化后的动画绑定包
    • 层级结构滚轮浏览更流畅
    • 改进后的大型预制件保存流程
    • 优化后的域重新加载,编辑器内的迭代时间更快
  • Play(运行)模式的改进,包括:
    • 静态批处理的性能改进
    • Addressables搜寻资源目录流程优化
    • 粒子系统预热

同样,你们的反馈直接促生了这些改进。欢迎大家继续在这里或在论坛留下对未来路线图的反馈意见。我们将在此处搜集并特别关注与性能有关的问题。

后续计划

十多年来,我们一直专注于用分析工具帮助用户实现最佳性能,并且还将继续完善工具集。我们将以多种形式进行开发,包括此处提到的所有功能。

我们另一个提升性能的努力是Data-Oriented Technology Stack(面向数据技术栈),或DOTS。DOTS要成功发布,就离不开两个核心功能:Burst编译器C# Job System。我们在内部引擎性能测试中使用这些功能取得了良好的成果,并且功能今天已经向所有人开放。很快,我们将交付第三个关键功能:Entities,它将在联网、物理等领域极大地提升项目性能。这是我们对游戏开发的承诺之一,我们会为DOTS专门写一篇Game Focus博文在近期发布。

不过现在,我们先来看看即将发布的一些改进。

我们正努力减少编辑器的启动时间,让启动时间能跟得上你思绪的流动。目前,外部设备与编辑器的链接可能并不稳定,会出现断开连接或无法恢复的情况。在2023.1版本里,我们将努力让编辑器与移动设备的连接更加可靠、高效。

此外,我们希望让你能更高效地利用Profiler找出瓶颈,并知道下一步该怎么做。我们的目标是迅速引导你找到优化收益最大的领域。

我们还希望让你能洞察目标设备的内存,在特定平台上提升性能。该功能尚处于早期阶段,我们正积极为新功能搜集反馈。您可以在我们的路线图上留下自己的意见。

更多资源

熟悉Unity的分析工具可以是你开发技能里最实用的技巧之一。所以我们正努力制作更多关于最佳做法的高级教学内容,帮助你最大限度地利用工具。

我的几名队友最近与Unity Integrated Success团队的工程师和专家合作,编写了一篇覆盖面极广的Unity分析指南

建议你下载这些电子书来了解各类平台的最佳优化方法。

你还可以参考这张流程图里的方法来找出项目中的瓶颈。

Flowchart that provides a recommended approach to identifying bottlenecks in your project.

最后,这份由内容与市场团队准备的性能分析和优化阅读清单里包含了几篇关键的博文,可帮助你理解从基础到高级的性能分析概念和方法。

Cover images for three Unity e-books: Optimize your game performance for consoles and PC, Optimize your mobile game performance, and Ultimate guide to profiling in Unity games.

告诉我们你的想法

我的团队正努力用你最需要的解决方案来支持你最具野心的项目,因此我们渴望了解你最需要帮助的地方。 

你可以在我们的公共路线图了解最新更新。也可以在页面上直接向产品团队提供反馈。 

我们即将在博客更新下一期游戏聚焦系列,着重介绍Unity目前正在做些什么,帮助你用更多的形式将游戏内容搬上更多的平台。并且,我们一如既往地欢迎大家在论坛上留下反馈意见。

2022年9月28日 类别 技术 | 11 分 阅读
相关文章