開発メモ

Webアプリ(Java, JS, CSS, HTML)や、ゲーム(Unity, C#)のことなどを書いてます。

Unity:メモリ消費を抑える画像サイズ

Unity で画像(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」と表示されました。

f:id:mamorums:20181016095814p:plain

インスペクタに警告 Only textures with width/height being multiple of 4 can be compressed to DXT5 format が表示されて、圧縮も効いてなさそうです。

2.2. 2の累乗の場合

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

f:id:mamorums:20181016095822p:plain

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

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

3. まとめ

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

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