スプライトシートはそれだけの価値がありますか?zipは良い代替手段ですか?

Aug 19 2020

スプライトシートはそれだけの価値があるのだろうかと思っていました。私はpixi.jsでゲームを作っており、アセットの読み込みから始めて最適化を考えていました。現在、すべてのファイルの配列があり、PIXI.loaderを使用していますが、すべてのファイルに対してWebリクエストを行うのに時間がかかるため、これは適切ではないことがわかっています。したがって、1つのWebリクエストでそれらをロードする方法を考え出す必要があります。最初に思いついたのはスプライトシートでしたが、「すべてを圧縮してJSZipのようなものをロードしたらどうなるでしょうか」と思いました。私はそれがすでに可能であることを知っていて(zipからpixiテクスチャをロードするこのプロジェクトから)、潜在的な良い点と悪い点をリストしました:

ジップの良い点:

  • 圧縮とは、アセットの読み込みを高速化することを意味します
  • 電子を使用してビルドを作成する場合、圧縮はビルドサイズが小さいことを意味します

Zipの悪い点:

  • 別のライブラリをロードする必要があります。つまり、ロード時間が長くなり、RAMの使用量が増えます。
  • メモリ内の解凍が必要です。つまり、読み込み時間が長くなります。

スプライトシートの良い点:

  • すべての個々の画像ファイルのヘッダーがありません
  • よく使われるので実績のあるテクニックです

スプライトシートの悪い点:

  • 圧縮なし(または少なくとも圧縮に匹敵しない)
  • 電話の制限により複数のネットワーク通話が発生し、2024x2024pxを超えるファイルが作成されないため、スプライトシートを分割する必要がある場合があります
  • すべての画像が同じサイズではなく、ほとんどの場合、スプライトシートに少しのスペースが残っているため、空の穴があります。これは、ネットワークを介して転送される無駄なピクセルを意味します。

私はあまり経験豊富な開発者ではないので、いくつか質問があります。

  1. 上記のポイントを見逃しましたか?
  2. スプライトシートは一般的に価値がありますか?
  3. 両方のどちらのテクニックがより価値がありますか?私は両方を行うことができましたが、最初に一方に焦点を合わせ、もう一方をリストに入れておきたいと思います。

回答

4 Theraot Aug 19 2020 at 01:12

まず第一に、圧縮された画像フォーマットがすでにあります。特に、PNG形式は可逆圧縮をサポートしています。さらに、PNGの束を取得して圧縮するとサイズが大きくなる可能性があることは事実ですが、テクスチャアトラス(スプライトシートなど)を作成すると、特にPNG圧縮レベルをランク付けした場合に、同様の方法でサイズが縮小されます。画像をエクスポートするとき。

したがって、適切にエクスポートされたテクスチャアトラスは、圧縮に関してリストした利点を提供します。

これは、すべてを1つのスプライトシートにする必要があることを意味しますか?いいえ。一緒にロードする必要があるものをまとめる必要があります。

また、画像が小さく、通常のサイズの場合、スプライトシートの方がうまく機能することにも注意してください。スプライトシートがあまり適していないシナリオで作業している可能性があります。

そうですか?知りません。実験してください。両方の手法を試して決定する気がない場合は、エンジニアリングアプローチで、実績のある方法を使用することをお勧めします。これは、テクスチャアトラスになります。

テクスチャアトラスの穴を最小限に抑えることができるパッキングアルゴリズムにも興味があるかもしれません。