fall and fall

プログラミング、ゲーム、アニメのことなどを書いています。

Unity 2D メモリ消費量を抑える画像サイズ(画像の寸法)

Unity 2D で画像を追加していくと、メモリ使用量が大きく増えていくことがありました。Unity のマニュアルを調べたところ、メモリ使用量を抑えられる画像サイズ(ピクセル)について記述がありました。

これから、その調査結果や検証結果をまとめていきます。

理想のサイズ

理想のサイズは、2の累乗のようです。例えば「128×128」や「512×1024」で、幅と高さは異なっていても大丈夫です。

Unityマニュアルの テクスチャのインポート だと、以下のように書かれていました。

理想的には、テクスチャの寸法は、各辺につき 2 の累乗 (2、4、8、16、32、64、128、256、512、1024、2048 ピクセなど) です。テクスチャは正方形である必要はありません。つまり、幅と高さが異なることがあります。

2の累乗以外(NPOT: Non Power of two)の使用については、以下のように書かれていました。

Unity でテクスチャサイズの NPOT (2 の累乗以外) を使用することは可能です。ただし、NPOT のテクスチャサイズは一般的にわずかに多くメモリを消費し、GPU がサンプリングするのが遅くなるため、パフォーマンスをよくするためには 2 の累乗を使用します。

Unityエディタでの確認

プロジェクトウィンドウで Sprite を選択して、インスペクタの Import Setting でサイズ(メモリ消費量)を確認してみました。

2の累乗ではない場合

「703×1000ピクセル」の画像だと、 NPOT でサイズは「2.7MB」と表示されました。

圧縮の表示はなく、インスペクタに以下の警告が表示されます。

Only textures with width/height being multiple of 4 can be compressed to DXT5 format

どうやら4の倍数だと圧縮が効くようです。

2の累乗の場合

「512×1024ピクセル」の画像だと、 サイズは「0.5MB」と表示されました。

圧縮(DXT5)が効いているのか、先ほどの警告は消えました。

この画像も、元々は上と同じく「703×1000ピクセル」でした。2の累乗にするため、横は透過背景を削って、縦は透過背景を追加しました。

まとめ

画像サイズを2の累乗(もしくは4の倍数)にしておくと、圧縮が効いてメモリ消費量を抑えられそうです。

場合によっては透過背景で調整しても良いのかもしれません。画像の拡大・縮小は、画質が劣化する可能性もあるので注意が必要だと感じました。