facebook twitter hatena line email

Unity/負荷軽減/Memory

提供: 初心者エンジニアの簡易メモ
2023年11月28日 (火) 13:04時点におけるAdmin (トーク | 投稿記録)による版 (おすすめ)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

メモリ対策

  1. プロジェクトを、一旦閉じて開く
  2. Unityメインメニュー/Windows/Analysis/Profiler/Memory/TotalCommitedMemoryを確認

閉じて、開かないと、メモリが蓄積するので、一度、プロジェクトは閉じる。

MemoryProfilerPackageインストール

  1. Unityメインメニュー/Windows/PackageManagerで、MemoryProfilerを検索してインストール。

確認

差分確認

Packages/packages-lock.json

+    "com.unity.memoryprofiler": {
+      "version": "1.1.0",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.editorcoroutines": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },

Packages/packages-lock.json

+    "com.unity.memoryprofiler": {
+      "version": "1.1.0",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.editorcoroutines": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },

メモリ使用しているオブジェクト名の確認

  1. MemoryProfiler/Captureボタンを押す

Captureファイルは、プロジェクト直下の、MemoryCapturesの直下に、置かれる。

UnityObjecsの項目

公式:https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.1/manual/unity-objects-tab.html

Description	個々のオブジェクトまたはオブジェクトのグループの名前を表示します。無効にすることはできません。
Allocated Size	オブジェクトまたはオブジェクトのグループに割り当てられたメモリの量をバイト単位で表示します。
Resident Size	オブジェクトまたはオブジェクトのグループが常駐するメモリの量をバイト単位で表示します。
% Impact	オブジェクトまたはオブジェクトのグループが使用するメモリの量を、[テーブル内の割り当てられたメモリ]値のパーセンテージとして表示します。「テーブル内の割り当てられたメモリ」バーを含むすべての測定バーは、テーブル内で選択されたオブジェクトに基づいて動的に調整されます。
Native Size	[割り当てサイズ]値のうちネイティブ メモリが占​​める割合を表示します。
Managed Size	割り当てサイズの値のうち、管理対象メモリがどのくらいの量を占めているかを表示します。
Graphics Size	[割り当てサイズ]値のうち、グラフィックス メモリがどのくらいの量を占めているかを表示します。

Texture2Dについて

プラットフォームごとに、サイズが異なるので、一旦PCで計測。

標準設定

MaxSize:2048
ResizeAlgorithm:mitchell
Format:Automatic
Compression:NormalQuality
UseCrunchCompression:off

公式:https://docs.unity3d.com/ja/2022.3/Manual/class-TextureImporter.html

2.4Mの画像サイズで(2652px:1658px)の場合、メモリ消費は、2.5Mでした。

UseCrunchCompressionについて

公式

使用可能な場合は、クランチ圧縮を使用します。クランチは DXT テクスチャや ETC テクスチャの圧縮に使用できる不可逆圧縮形式です。テクスチャは CPU で DXT か ETC に解凍され、ランタイムに GPU に読み込まれます。クランチ圧縮は、ディスク上やダウンロード時に使用するスペース量をできるだけ少なくしたいときに役立ちます。クランチテクスチャは、圧縮するのにかなり時間がかかりますが、ランタイムでの解凍は高速です。
  • UseCrunchCompression : offで、メモリ消費は、2.5Mに
  • UseCrunchCompression : onで、50%としたとき、メモリ消費は、1.4Mに

Compressionについて

  • LowQualityにしたとき、メモリ消費は、2.5Mに
  • NormalQualityにしたとき、メモリ消費は、2.5Mに
  • HighQualityにしたとき、メモリ消費は、5.0Mに

外部ツールで圧縮した場合

メモリ消費は、変わらない。

MaxSizeについて

縦横の上限pxがこれを超えてたら、アスペクト維持で、そのサイズになるとかかも。

  • 2048のとき、メモリ消費は、2.5Mに
  • 1024のとき、メモリ消費は、0.6Mになるが、画質は落ちる
  • 512のとき、メモリ消費は、160.5Kになるが、画質はすごく落ちる

Audio

LoadType

  • Compressed in Load: メモリの容量はそのまま
  • Compressed in Memory: メモリの容量を圧縮 (ただしvorbisで、品質が高いとCPU負荷が高くなる)
  • Streaming: 読み込みながらなので、メモリもそこまで使わないが、in Memoryと同じぐらい、CPUは高い。

ComporessionFromat

  • PCM: SEに向いてるが、サイズが大きすぎるので、使わず、vorbisを使ったほうが良いかも。
  • Vorbis: BGMに向いてる
  • ADPCM: SEでノイズのあるものに向いてる


参考:https://www.cockatiel-net.com/blog/unity/unity_audio_load_3/

参考:https://amagamina.jp/blog/audio-clip/

参考:https://www.cockatiel-net.com/blog/unity/unity_compression_format/

おすすめ

  • 起動直後のBGM:Streamingで、Vorbisにして、Qualityを50で、Load In Backgroundをオフ
  • 起動直後でないBGM:Streamingで、Vorbisにして、Qualityを50で、Load In Backgroundをオン
  • 頻度高めのSE:Compressed in Memoryで、ADPCMにして、Qualityを50
  • 頻度低めのSE:Compressed in Loadで、Vorbisにして、Qualityを50

参考:https://kingmo.jp/kumonos/unity-audio-clip-recommend-setting/

Project側の初期ファイル

Editor

Texture2D

GizmoIconAtlas_pix32 21.3MB
UnitySplash-Dark 21.3MB
UnitySplash-Light 21.3MB
Inter-Regular Atlas 2.0MB
InterSemiBold Atlas 2.0MB
d_FolderOpened Icon 0.7MB
d_SceneAsset Icon 0.7MB
d_Folder Icon 0.7MB
d_cs Icon 0.7MB
d_GameObject Icon 0.7MB
ParticleSystemForceField Gizmo 0.7MB
EmojiOne 0.7MB ←TextMeshProのものっぽい。

Shader

Particles/Standard Surface 72.3MB
Nature/SpeedTree8 25.6MB
Nature/Terrain/Standard 3.0MB
Nature/Terrain/Specular 2.8MB
Nature/SpeedTree 2.5MB
Hidden/TerrainEngine/Splatmap/Standard-AddPass 2.0MB

実機

Texture2D

UnityNHxRoughness 64.6KB
Soft 21.8KB
UnityHalo 8.6KB
UnityAttenuation 4.6KB
UnityGrayscaleRamp 4.6KB
UnityWatermark-dev 4.3KB
UnityDefault2D 2.6KB

Shader

Hidden/Internal-GUIRoundedRectWithColorPerBorder 66.8KB
Hidden/Internal-GUIRoundedRect 62.0KB
Hidden/Internal-GUITextureClip 52.9KB
Skybox/Procedural 62.2KB
Hidden/Internal-GUITexture 42.3KB
Hidden/Internal-Loading 40.0KB
Scripts/Default 39.6KB
Hidden/InternalErrorShader 36.5KB
Hidden/BlitCopy 26.3KB