Unity 2D で画像(Sprite)を追加していくと、メモリ使用量がどんどん増えていくことがありました。色々調べたところ、画像サイズ(ピクセル)を2の累乗にすると、圧縮も効いてメモリ使用量が抑えられそうでした。
1. Unityマニュアルの内容
テクスチャのインポート だと、以下のように書かれていて、
理想的には、テクスチャの寸法は、各辺につき 2 の累乗 (2、4、8、16、32、64、128、256、512、1024、2048 ピクセル…) です。テクスチャは正方形である必要はありません。つまり、幅と高さが異なることがあります。
サイズは2の累乗が理想みたいです。テクスチャ≒画像、と解釈して大丈夫かと思われます。
続けて以下のように書かれていました。
Unity でテクスチャサイズの NPOT (2 の累乗以外) を使用することは可能です。ただし、NPOT のテクスチャサイズは一般的にわずかに多くメモリを消費し、GPU がサンプリングするのが遅くなるため、パフォーマンスをよくするためには 2 の累乗を使用します。
2. Unityエディタでの確認
プロジェクトウィンドウで Sprite を選択して、インスペクタの Import Setting でサイズ(メモリ消費)を確認してみました。
2.1. 2の累乗ではない場合
「703×1000ピクセル」の画像だと、 NPOT でサイズは「2.7MB」と表示されました。
インスペクタに警告 Only textures with width/height being multiple of 4 can be compressed to DXT5 format
が表示されて、圧縮も効いてなさそうです。
2.2. 2の累乗の場合
「512×1024ピクセル」の画像だと、 サイズは「0.5MB」と表示されました。
圧縮(DXT5)が効いているのか、先ほどの警告は消えました。
この画像も、元々は上と同じく「703×1000ピクセル」でした。2の累乗にするため、横は透過背景を削って、縦は透過背景を追加しました。
3. まとめ
画像サイズを2の累乗しておくと、圧縮が効いてメモリ消費量を抑えられそうです。
サイズが2の累乗ではない場合、上のように透過背景で調整しても良いのかもしれません。画像の拡大・縮小は、画質が劣化する可能性もあるので注意が必要だと感じました。