任天堂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上可用 。

    相關經驗推薦