こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unityで使う正しい画像サイズを知りたい
  • 2の累乗じゃなくて大丈夫?
  • 4の倍数にして欲しいって言われたけど実際どう?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unityで使う画像サイズに迷ったことはありませんか?「4の倍数にしておいてください」とエンジニアに言われたとします。どんな画像も4の倍数で納品すれば良いと盲目に思っていませんか。

    もちろん4の倍数にすべき画像もありますが、実は ”すべて” の画像を4の倍数でなくても良いのです。むしろ4の倍数にとらわれない方がよい場合もあります。

    本記事ではUnityで使う正しい画像サイズについて解説します。完全に理解しておく必要は全くありませんが、知っておくことでトラブルは確実に減ります。この記事を読むことでエンジニアがなぜ画像サイズを4の倍数にしてほしいのか、また4の倍数にするべきではない画像についても理解できます。

    「画像サイズに自信ないよ」という方はぜひ最後まで読んでみてください。

    スプライトアトラスに含む画像のサイズは自由、それ以外は4の倍数

    結論から話すと、 スプライトアトラスに含める画像サイズは自由、それ以外は4の倍数 にしましょう。画像サイズはゲームのパフォーマンスに大きく影響します。画像サイズを間違えることでゲームがクラッシュすることもあるのです。また、耳慣れない「スプライトアトラス」という言葉が出てきましたが、Unityで画像を扱う上で重要な要素です(後述します)。

    なぜスプライトアトラスに含める画像サイズは自由、それ以外は4の倍数が良いのか、画像サイズを間違えるとゲームがクラッシュするのか詳しく解説していきます。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    適切な画像サイズがメモリ使用量を抑える

    適切な画像サイズはゲームで使用するメモリ使用量を抑えてくれます。メモリとはゲームを動かすためのデータを一時的に保存する場所です。メモリの大きさは有限なので、メモリサイズをこえてはいけません。例えばAndroid向けスマホゲーム開発では次のようなメモリを意識する必要が存在します。

    これらの合計が、スマホ全体のメモリ量を越えてはいけません。越えそうな場合はOSによって強制的にゲームが停止(クラッシュ)します。

    つまり メモリ使用量は低いほうが良い のです。ゲーム開発でメモリを消費する筆頭は画像です。ゲームは画像を大量に消費しますよね。だから画像の消費メモリをできるだけ小さくする必要があるのです。画像を小さくするテクニックの1つは 「圧縮テクスチャ」の使用 です。

    圧縮テクスチャとは、iOSやAndroid、PCの中に組み込まれたGPU呼ばれる演算ユニットに対応したテクスチャです。例えばETC2という圧縮テクスチャを使うことで幅高さ2048px画像の使用メモリは16MB → 4MBと 25%まで削減 できます。

    しかし、圧縮テクスチャを使用するために条件があるのです。

    画像サイズは圧縮テクスチャの使用条件

    圧縮テクスチャが画像の使用メモリを大幅に削減できることが分かりました。圧縮テクスチャを使わない選択肢はありません。

    しかし、圧縮テクスチャの使用には条件があります。「画像サイズ」です。先のETC2を使うためには幅高さともに4の倍数にする必要があるのです。

    昔は2の累乗が使われていた理由

    「画像は2の累乗にしてください」と言われたことがある方もいらっしゃるのではないでしょうか。2の累乗とは2に2を任意の回数かけ算した数字のことです。具体的には「2、4、8、16、32、64、128、256、512」といった数字です。

    2014年頃のスマホ端末のGPUは貧弱で、対応する圧縮テクスチャは2の累乗を使わないといけなかったのです。2の累乗とは名残だと思われます。

    現在は4の倍数やサイズ制限なし

    しかし最近のスマホでは2の累乗指定は撤廃されました。「4の倍数」でも大丈夫です。サイズ自由(サイズ制限なし)の圧縮テクスチャも登場しました。日本でスマホゲームを開発する上では、2の累乗指定の圧縮テクスチャは過去のものなのです。


    ここまでをまとめると、ゲーム開発は画像がメモリを大きく消費します。その消費をおさえるのが圧縮テクスチャの存在です。圧縮テクスチャを使うために画像サイズを合わせる必要があるのです。現在のスマホのGPUは進化しているため、4の倍数、または指定なしでも大丈夫です。

    Unityに追加する画像サイズはスプライトアトラスに含めるか、含めないかで決まります。 そこで次章で「スプライトアトラス」について解説していきます。

    スプライトアトラスに含んだ画像(スプライト)サイズは自由

    結論から話すと スプライトアトラスに含まれる画像サイズは「自由」です。 そもそもスプライトアトラスとは複数の画像を1枚にまとめたデータ(アセット)です。具体的には下図のような画像です。

    【間違えやすい】Unityの正しい画像サイズとは_0

    スプライトアトラスに含まれる画像のことをスプライトと呼びます。このスプライトのサイズは自由なのです。なぜなら スプライトアトラス自体のサイズが4の倍数だから です(下図参照)。

    【間違えやすい】Unityの正しい画像サイズとは_1

    スプライトのサイズがいくつだろうが、「スプライトアトラス」全体のサイズに影響はありません。もしスプライトがスプライトアトラスのサイズを超えた場合は、新たにスプライトアトラスが1枚追加される仕様です。

    ちなみにUnityのデフォルト設定ではスプライトアトラス(SpriteAtlas)を使用できません。こちらの記事でSpriteAtlasの始め方、使い方を詳しく解説しています。ぜひ読んでみてください。

    スプライトアトラスに含めない画像は1辺4の倍数にする

    アトラスに含めない画像は 1辺4の倍数 にしておくと良いです。各辺ごとに別々の長さで大丈夫です。例えば以下のさいずです。

    などなど。UI画像の場合スプライトアトラス以外で使うことはほとんどありません。よくあるのが、キャラクターのズーム画像や背景といった大きめの1枚絵の場合です。このような一枚画像でUI表示する場合は4の倍数にしておきましょう。

    スマホに加えてPC対応するときの注意点

    プラットフォームごとにGPUは違います。つまりスマホとPCでは対応フォーマットが違うのです。

    ASTCの場合、画像サイズは自由です。しかしPC向け圧縮テクスチャ「DXT5」の場合、各辺の長さは 4の倍数 である必要があるのです。実はスマホ向け開発だけで考えればスプライトアトラス以外の画像も自由なサイズで良いのです。

    しかし、 PC向けも開発する場合は画像サイズに制限が生まれます。 PC対応するかどうかはプロジェクト開始時には予測しづらい部分です。もしかするとスマホゲームをリリースした後にPC対応もするという経営判断が出るかもしれません。

    将来的なことを考えてスプライトアトラス外の画像サイズは4の倍数にしておくことをおすすめします。

    👉 【Unity UI】知らないと損するスマホ向けCanvas設定

    まとめ 画像サイズを全て4の倍数にする必要はない

    記事の内容を簡単にまとめます。

    まとめ「画像サイズを全て4の倍数にする必要はない」
    • 画像サイズによってメモリ使用量が爆増する
    • スプライトアトラス内に含める画像サイズは自由である
    • スプライトアトラス外の画像は1辺の長さを4の倍数にする
    • プラットフォームごとに圧縮テクスチャの制限が違う
    • スマホに加えてPC版を検討しているときには要注意

    こんな感じです。

    専門的な話は抜きにして 「スプライトアトラス内は自由、それ以外は4の倍数」 と覚えておきましょう。

    インターネットで検索すると2の累乗にしておく必要があるといった内容も出てくるかと思います。すこし情報が古い です。2021年末現在(執筆時)では、進化したGPUを搭載したスマホが世の中に普及しているため4の倍数にしておけば間違いないです。

    ただし、それはあくまでそれは日本の話です。海外向けにリリースする場合は別途端末情報をチェックしておいたほうが良いでしょう。

    オオバはあまり海外事情に詳しくないので調査は必要ですが、すごーく古い端末のシェア率が高い場合、その端末に見合ったフォーマットに合わせる必要が出てくるため注意しましょう。

    この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいUnityライフをお過ごしください。

    オススメ記事
    検証環境