スプライトアトラスとは?
スプライトアトラス(Sprite Atlas
)とは、スプライトの地図という意味になります。
Unity
では、2D Sprite
パッケージで提供されています。
複数のスプライトを一つのテクスチャにまとめることで、描画パフォーマンスを向上させるのに役立ちます。
2DSpriteパッケージの導入
既に導入している場合はスキップしてください。
導入していない場合は、UnityEditor
のメニューから
Window
→PackageManager
と選択してPackageManager
を開きます。
左上のPackages
をクリックして、Unity Registry
を選択します。
2D Sprite
パッケージを選択して、Install
ボタンを押します。
これでスプライトアトラスを使用できるようになりました。
通常のスプライトの描画
まず、Canvas
上に別々のテクスチャ上にあるスプライトを10個表示してみます。
この様子をFrameDebugger
で確認すると、スプライトを一つずつ描画しているのが分かります。
この1回分の描画処理をDrawCall
といいます。
それぞれテクスチャが違うため、使用するテクスチャを変更→描画、という処理を繰り返しています。
スプライトアトラスの作成
UnityEditor
のメニューから、Assets
→Create
→2D
→Sprite Atlas
を選択します。
.spriteatlas
、というファイルが作られるので名前は分かりやすいように変更してください。
インスペクタ上では以下の様になります。
Allow Rotation
にチェックが入っていると、スプライトアトラス内に収まるよう、スプライトを90度回転させることがあります。Tight Packing
にチェックが入っていると、スプライト同士の間隔を詰めて収めるので、スプライトの境界に隣接する別のスプライトの端がゴミのように見えてしまう場合があります。
個人的にはオフにしておくことをおすすめします。
一番下の、Objects for Packing
にまとめたいスプライトを追加します。
今回はスプライトを直接指定していますが、フォルダを指定すれば、含まれるスプライトが全て対象になります。
パッキングを有効にする
スプライトアトラスを用意できましたが、このままではパッキングされません。
Project Settings
のEditor
を開き、
Sprite Packer
のMode
がDisabled
となっている場合、パッキングされません。
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
による描画にも効果があります。
大量のスプライトを表示するゲームの場合、スプライトアトラスを使用することでより快適に遊べるようになるかもしれません。