[Profiling] 剖析 Unity 游戏的终极指南[3] - 内存分析

英文原文:https://resources.unity.com/games/ultimate-guide-to-profiling-unity-games?utm_source=demand-gen&utm_medium=pdf&utm_campaign=render-with-quality-and-flexibility&utm_content=introduction-to-urp-ebook

  内存分析在很大程度上与运行时性能无关。 它对于针对硬件平台内存限制或游戏崩溃进行测试很有用。 如果您想通过进行实际增加内存使用的更改来提高 CPU/GPU 性能,它也可能是相关的。

  有两种方法可以在 Unity 中分析应用程序中的内存使用情况。

内存探查器模块:这是一个内置探查器模块,可为您提供有关应用程序在何处使用内存的基本信息。

Memory Profiler 包:这是一个可以添加到项目中的 Unity 包。 它向 Unity 编辑器添加了一个额外的 Memory Profiler 窗口,然后您可以使用它来更详细地分析应用程序中的内存使用情况。 您可以存储和比较快照以查找内存泄漏,或查看内存布局以查找内存碎片问题。

  使用这些内置工具,您可以监控内存使用情况,定位应用程序中内存使用率高于预期的区域,并查找和改进内存碎片。

本节简要介绍 Unity 中的内存分析工具。 有关它们的详细说明,请参阅 Unity 分析和调试工具部分。

理解和定义内存预算

  了解目标设备的内存限制并制定预算对于多平台开发至关重要。 在设计场景和关卡时,请坚持为每个目标设备设置的内存预算。 通过设置限制和指导方针,您可以确保您的应用程序在每个平台的硬件规范范围内运行良好。

  您可以在开发人员文档中找到设备内存规格。 例如,根据文档,Xbox One 游戏机在前台运行的游戏的最大可用内存限制为 5 GB。

  围绕Mehs和着色器复杂性设置内容预算以及纹理压缩也很有用。 这些都影响分配了多少内存。 这些预算数字可以在项目的开发周期中参考。

确定物理 RAM 限制

  每个目标平台都有一个内存限制,一旦你知道它,你就可以为你的应用程序设置一个内存预算。 使用 Memory Profiler 查看捕获快照。 硬件资源(见下图)显示了物理随机存取存储器 (RAM) 和视频随机存取存储器 (VRAM) 的大小。 这个数字并没有说明并非所有空间都可以使用的事实。 但是,它提供了一个有用的大致数字来开始使用。

  交叉参考目标平台的硬件规格是一个好主意,因为此处显示的数字可能并不总是显示完整的画面。 开发人员套件硬件有时具有更多内存,或者您可能正在使用具有统一内存架构的硬件。

在这里插入图片描述
硬件资源显示捕获快照的设备 RAM 和 VRAM 数字。

确定每个目标平台支持的最低规范

  确定您支持的每个平台的 RAM 规格最低的硬件,并使用它来指导您的内存预算决策。 请记住,并非所有物理内存都可以使用。 例如,一个主机可以运行一个管理程序来支持可能使用部分总内存的旧游戏。 考虑使用一个百分比(例如,总数的 80%)。 对于移动平台,您还可以考虑将规范拆分为多个层次,以便为那些拥有更高端设备的用户提供更好的质量和功能。

考虑大型团队的每团队预算

  一旦定义了内存预算,请考虑为每个团队设置内存预算。 例如,您的环境美术师获得一定数量的内存用于加载的每个关卡或场景,音频团队获得用于音乐和音效的内存分配,等等。

  随着项目的进展,灵活的预算是很重要的。 如果一个团队的预算低于预算,如果它可以改善他们正在开发的游戏领域,则将盈余分配给另一个团队。

  一旦您决定并设置了目标平台的内存预算,下一步就是使用分析工具来帮助您监控和跟踪游戏中的内存使用情况。

使用 Memory Profiler 模块的简单而详细的视图

  Memory Profiler 模块提供两个视图:简单和详细。 使用 Simple 视图获取应用程序内存使用情况的高级视图。 必要时,切换到详细视图以进一步向下钻取。

在这里插入图片描述
使用 Memory Profiler 模块快速收集与资产和场景对象内存分配相关的信息。

Simple

  Total Used Memory 数字是“Unity Memory 跟踪的总内存”。 它不包括 Unity 保留的内存(该数字是 Total Reserved Memory)。

  System Used Memory 数字是操作系统认为您的应用程序正在使用的内存。 如果此数字显示为 0,请注意这表明 Profiler 计数器未在您正在分析的平台上实现。 在这种情况下,最好依赖的指标是 Total Reserved Memory。 在这些情况下,还建议切换到本机平台分析工具以获取详细的内存信息。

Detailed

  要查看可执行文件、DLL 和 Mono 虚拟机使用了多少内存,逐帧的内存数据不会减少它。 使用详细的快照捕获来挖掘这种内存故障。

在这里插入图片描述
使用捕获的样本来检查详细信息,例如可执行文件和 DLL 内存使用情况。

注意:Memory Profiler 模块的详细视图中的引用树仅显示本机引用。 从 UnityEngine.Object 继承的类型对象的引用可能会显示其托管 shell 的名称。 但是,它们可能只是因为它们下面有本机对象而出现。 您不一定会看到任何托管类型。 让我们以一个在其中一个字段中具有 Texture2D 的对象为例作为参考。 使用此视图,您也不会看到哪个字段包含该引用。 对于这种细节。 使用内存分析器包。

要在较高级别确定内存使用量何时开始接近平台预算,请使用以下“餐巾纸背面”计算:

System Used Memory(如果系统已用显示为 0,则为总保留内存)+ 未跟踪内存的大概缓冲区 / 平台总内存

当这个数字开始接近平台内存预算的 100% 时,请使用 Memory Profiler 包找出原因

使用 Memory Profiler 包进行深入分析

  Memory Profiler 包对于更详细的内存分析很有用。 使用它来存储和比较快照以查找内存泄漏或查看应用程序的内存布局以查找优化区域。

  Memory Profiler 软件包的一大好处是,除了捕获本机对象(如 Memory Profiler 模块所做的那样)外,它还允许您查看托管内存、保存和比较快照,以及更详细地探索内存内容, 您的内存使用情况的可视化细分。

在这里插入图片描述
Memory Profiler 主窗口视图

在 Unity 分析和调试工具部分阅读有关内存分析器的更多信息

  或者,您可以使用 Memory Profiler 模块中的详细视图深入了解最高的内存树,以找出使用最多内存的内容。

在这里插入图片描述
Memory Profiler 模块允许您深入了解 Assets 和 Scene 对象,以便轻松找到利用率最高的对象。

Memory Profiler 模块的许多功能已被 Memory Profiler 软件包取代,但您仍然可以使用该模块来补充您的内存分析工作。

例如:

  • 发现 GC 分配:虽然这些显示在模块中,但使用 Project Auditor 更容易追踪。
  • 快速查看堆的已使用/保留大小:较新版本的内存分析器模块显示此信息。
  • 着色器内存分析:现在在较新版本的 Memory Profiler 模块中报告了这一点。

  如本节前面所述,在设置内存预算时,请记住在对您的整体目标平台具有最低规格的设备上进行配置。 密切监控内存使用情况,牢记您的目标限制。

  您通常希望使用具有大量可用内存的强大开发人员系统进行分析(用于存储大内存快照或快速加载和保存这些快照的空间很重要)。

  与 CPU 和 GPU 分析相比,内存分析是一种不同的野兽,因为它本身会产生额外的内存开销。 您可能需要在高端设备(具有更多内存)上分析内存,但要特别注意低端目标规范的内存预算限制。

分析内存使用情况时要考虑的要点:

  • 质量级别、图形层和 AssetBundle 变体等设置在功能更强大的设备上可能具有不同的内存使用情况。 例如:

  • 质量级别和图形设置可能会影响用于阴影贴图的渲染纹理的大小

  • 纹理质量设置可能会影响所有纹理的大小。

  • 最大 LOD 可能会影响模型等

  • 如果您有 HD(高清晰度)和 SD(标准清晰度)版本等 AssetBundle 变体,并根据设备规格选择要使用的版本,您还可能会根据您正在分析的设备获得不同的资产大小。

  • 目标设备的屏幕分辨率会影响用于后期处理效果的 RenderTexture 的大小。

  • 设备支持的图形 API 可能会影响着色器的大小,具体取决于 API 支持或不支持着色器的哪些变体。

  • 拥有一个使用不同质量设置、图形层设置和资产包变体的分层系统是一种能够针对更广泛的设备的好方法,例如,通过在 4GB 移动设备上加载资产包的高清版本,以及 2GB 设备上的标准清晰度版本。 但是,请记住上述内存使用的变化,并确保测试这两种类型的设备,以及具有不同屏幕分辨率或支持的图形 API 的设备。

注意:由于从 Editor 和 Profiler 加载的其他对象,Unity Editor 通常会显示更大的内存占用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
This book is designed to help you create applications and content that make the best use of Unity on mobile platforms, especially those with Mali GPUs. Chapter 1 Introduction This chapter introduces the Arm Guide for Unity Developers Optimizing Mobile Gaming Graphics. Chapter 2 Optimizing applications This chapter describes how to optimize applications in Unity. Chapter 3 Profiling your application This chapter describes profiling your application. Chapter 4 Optimization lists This chapter lists a number of optimizations for your Unity application. Chapter 5 Real time 3D art best practices: Geometry This chapter highlights some key geometry optimizations for 3D assets. Geometry optimizations can make a game both more efficient, and achieve the overall goal of getting your game to perform better on mobile platforms. Chapter 6 Real time 3D art best practices: Texturing This chapter covers several texture optimizations that can help your games to run more smoothly and look better. Chapter 7 Real time 3D art best practices: Materials and shaders This chapter covers multiple different material and shader optimizations that can help your games to run more efficiently and look better. Chapter 8 Advanced graphics techniques This chapter lists a number of advanced graphics techniques that you can use. Chapter 9 Virtual Reality This chapter describes the process of adapting an application or game to run on virtual reality hardware, and some differences in the implementation of reflections in virtual reality. Chapter 10 Advanced VR graphics techniques This chapter describes various techniques that you can use to improve the graphical performance of your Virtual Reality application. Chapter 11 Vulkan This chapter describes Vulkan and how you enable it. Chapter 12 Arm Mobile Studio This chapter describes the Graphics Analyzer and the Streamline tool.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值