スプライトアトラスとは?

スプライトアトラス(Sprite Atlas)とは、スプライトの地図という意味になります。

Unityでは、2D Spriteパッケージで提供されています。

複数のスプライトを一つのテクスチャにまとめることで、描画パフォーマンスを向上させるのに役立ちます。

2DSpriteパッケージの導入

既に導入している場合はスキップしてください。

導入していない場合は、UnityEditorのメニューから

WindowPackageManagerと選択してPackageManagerを開きます。

左上のPackagesをクリックして、Unity Registryを選択します。

2D Spriteパッケージを選択して、Installボタンを押します。

これでスプライトアトラスを使用できるようになりました。

通常のスプライトの描画

まず、Canvas上に別々のテクスチャ上にあるスプライトを10個表示してみます。

この様子をFrameDebuggerで確認すると、スプライトを一つずつ描画しているのが分かります。

この1回分の描画処理をDrawCallといいます。

それぞれテクスチャが違うため、使用するテクスチャを変更→描画、という処理を繰り返しています。

スプライトアトラスの作成

UnityEditorのメニューから、AssetsCreate2DSprite Atlasを選択します。

.spriteatlas、というファイルが作られるので名前は分かりやすいように変更してください。

インスペクタ上では以下の様になります。

  • Allow Rotationにチェックが入っていると、スプライトアトラス内に収まるよう、スプライトを90度回転させることがあります。
  • Tight Packingにチェックが入っていると、スプライト同士の間隔を詰めて収めるので、スプライトの境界に隣接する別のスプライトの端がゴミのように見えてしまう場合があります。

個人的にはオフにしておくことをおすすめします。

一番下の、Objects for Packingにまとめたいスプライトを追加します。

今回はスプライトを直接指定していますが、フォルダを指定すれば、含まれるスプライトが全て対象になります。

パッキングを有効にする

スプライトアトラスを用意できましたが、このままではパッキングされません。

Project SettingsEditorを開き、

Sprite PackerModeDisabledとなっている場合、パッキングされません。

UnityEditor上で確認したい場合は、

  • Sprite Atlas V1 - Always Enabled
  • Sprite Atlas V2 - Enabled

のどちらかにしてください。

アプリケーションをビルドした際にスプライトアトラスが生成されていれば良い場合は、それ以外でも大丈夫です。

パッキングのプレビュー

スプライトアトラスのインスペクタの一番下に、Pack Previewボタンがあります。

こちらを押すと、どのようにパッキングされるかを確認できます。

今回は10個のスプライトが、512x1024のテクスチャ上にまとまっているのが確認できます。

スプライトアトラスによる描画

スプライトアトラスの用意が出来たので、スプライトアトラスを使って描画するようにします。

といっても特にすることはありません。

FrameDebuggerで確認すると、既に1回のDrawCallで10個のスプライトが描画されるようになっています。

スプライトアトラスによりスプライトがまとめられ使用するテクスチャが一つになったため、

1回で描画できるようになりました。

試しにスプライトを100個に増やしても1回で描画できていますね。

スプライトアトラスの分け方

スプライトアトラスの効果が出るのは、同時に描画される場合です。

例えば、2Dの立ち絵キャラクターに、表情などの差分がある場合はキャラクター単位でアトラス化するのは有効です。

全キャラクター分を一つのスプライトアトラスにまとめようとすると巨大なテクスチャが生成されてしまい逆効果かもしれません。

連番で表示するエフェクト用のスプライトも効果は薄いでしょう。

キャラクター単位、画面単位などうまくまとめるのがいいと思います。

まとめ

スプライトアトラスについて説明しました。

スプライトアトラスは、複数のスプライトを1つの大きな画像にまとめることで、

  • 描画パフォーマンスの向上
  • メモリの効率化
  • ロード時間の短縮

といった多くの利点を得られます。

がまとめ方によっては効果が無かったりもするので注意が必要です。

今回はUIで説明しましたが、SpriteRendererによる描画にも効果があります。

大量のスプライトを表示するゲームの場合、スプライトアトラスを使用することでより快適に遊べるようになるかもしれません。

📦 使用したアセット