任天堂switch|Unity 2021LTS添加定制内存功能

任天堂switch|Unity 2021LTS添加定制内存功能

Unity2021LTS版本优化了游戏工作室对于执行大型项目所需的功能 。 现在Unity支持用户自定义内存分配方式 。
什么是内存分配器定制化?
Unity使用三个内存管理层来处理应用程序中的内存:
l 托管内存
l C#非托管内存
l 本地内存
在Unity内部有不同的方式来分配本机内存 , 我们称之为分配器 。 本篇文章将关注两点为大家做详细介绍:
The bucket allocator , 它将大小类似的小配置分组到共享内存块中 。 这一过程非常快 , 并且被广泛使用 , 但The bucket allocator有硬编码限制其增量大小 。
Dynamic heap allocator , 这是一个通用分配器 , 用于大多数Unity本机内存分配 。 它比The bucket allocator的处理过程慢 , 因为它需要处理许多不同的情况 。
当我们从内存管理系统请求新内存时 , 我们首先需要检查其大小 。 如果它小于某个阈值 , 我们就向The bucket allocator请求内存 。 一旦The bucket allocator被填满 , 我们仍然需要从某个地方分配内存 , 所以这些小配置将从Dynamic heap allocator中被调用 。 退回到Dynamic heap allocator的过程比较慢 , 并且向Dynamic heap allocator中添加大量小配置会导致Dynamic heap碎片的增加 。
案例:定制内存帮助游戏《Ori and the Will of the Wisp》登陆任天堂Switch
2020年夏天 , 当Moon Studios在任天堂 Switch上发布《Ori and the Will of the Wisp》时Unity为他们提供了支持 。
Moon Studios和Unity加速解决方案(以前的Unity Professional Services)一起分析代码段 , 找到了调整粒子系统和减少内存使用的方法 。 “当你在任天堂Switch上设定60 fps的目标时 , 你必须确保每个方面都得到优化 , 包括模拟、流、渲染和图形 , ”工作室创始人Gennadiy Korol说道 。

《Ori and the Will of the Wisp》在内存使用方面给任天堂Switch带来很大压力 。 Accelerate Solutions团队帮助Moon确保他们充分利用这些层 , 重点关注本地内存分配 。
Unity团队与Moon Studios团队合作 , 测量了不同分配器的分配数量 。 他们还查看了从每个分配的内存量 , 这表明游戏甚至在游戏开始之前就填满了bucket allocator 。
增加The bucket allocator的大小可以为玩游戏时发生的小配置提供额外的空间 。 从The bucket allocator分配这些小块给游戏会得到性能提升 , 使游戏最终达到60 fps的目标 。 当实现目标后小配置将不再来自Dynamic heap allocator , 所以这个分配器只包含大的内存块 。 分配器碎片更少 , 这使游戏能够运行更长的时间 。
【任天堂switch|Unity 2021LTS添加定制内存功能】在与Moon合作之后 , Unity Accelerate Solutions团队与优化团队合作 , 后者开发了内存分配器定制功能 , 现已在2021年LTS上可用 。

    相关经验推荐