サイトのトップへ戻る

libGDX ドキュメント 日本語訳

サイト内検索

テクスチャの圧縮

テクスチャの圧縮、オフラインミップマップの生成、キューブマップが必要な場合は、PNGのような既定のテクスチャ形式では不十分でしょう。 幸運なことに、 LibGDX ではETC1 ファイルと KTX/ZKTX テクスチャという二つの選択肢が用意されています。

GWT バックエンドの場合、現在のところETC1 と KTX/ZKTX は サポートされていないので注意してください。

詳細に入る前に、二つの圧縮タイプについて認識しておく必要があります ;

  • テクスチャをディスク上に保存するために使用される圧縮(zip, png, jpg,...)。これはパッケージのサイズを減らすのに便利です。
  • テクスチャをメモリ上に保存するために使用される圧縮(ETC1, ETC2, S3TC,...)。これは、あなたのゲームのパフォーマンスを向上させ、実行時のアプリケーションのメモリフットプリントを減らします (したがって、Androidがアプリを再起動してしまうリスクが減ります)。

OpenGL ES 2.0 には一つだけ、Androidで必須のテクスチャ圧縮形式: ETC1があります(この形式はiOSでは使用できません)。 これを使うことで、任意のRGB8画像のサイズを6の倍数分減らすことができます 主な欠点はこれが非可逆圧縮形式ということです。他にも、圧縮できる画像は RGB8形式に制限されます。アルファチャンネルに対応するには、以下のどちらかの方法で別途アルファ情報を保存する必要があります。 :

  • ETC1 圧縮できる別のテクスチャに保存する。
  • 同一テクスチャで、上部に画像の色情報を保存して底部に透明情報を保存する。

ビデオメモリの節約率は6xから4xに低下しますが、それでもやる価値はあります。KTXTestにサンプルがあります。



ETC1 ファイル形式

ETC1 ファイル形式は、とてもシンプルなLibGdx 独自のファイル形式です (このブログの投稿を参照してください)。 これを使うことで、簡単にETC1 圧縮された2D テクスチャをサポートできます。欠点は、ミップマップやキューブマップは使用できないということです。



圧縮

ファイルから読み込んだ Pixmap を圧縮したり、それをカスタム ETC1 ファイル形式に書き出すのはとても簡単です:

Pixmap pixmap = new Pixmap(Gdx.files.absolute("image.png");
ETC1.encodeImagePKM(pixmap).write(Gdx.files.absolute("image.etc1"));

また、 gdx-tools プロジェクトにあるETC1Compressor ツールを使用することもできます。これを使用するとディレクトリ階層全体を圧縮することができます。



読み込み

ETC1 圧縮されたファイルは、他の画像ファイルと同じくらい簡単に読み込むことができます。:

Texture texture = new Texture(Gdx.files.internal("image.etc1"));


KTX/ZKTX 形式

KTX ファイル形式は、OpenGL テクスチャの保存に特化した標準ファイル形式です。 主な利点は、OpenGL テクスチャのほとんどの機能(全ての圧縮形式、ミップマップの有無、キューブマップ、テクスチャ配列,...)をサポートしていることです。

ZKTX 形式は、ディスク上でのファイルサイズを制限するため単に KTX をzip圧縮しただけのものです。



ファイルを用意する

gdx-toolsプロジェクトにある KTXProcessor ツールを使用することで簡単にテクスチャを用意できます:

usage : KTXProcessor input_file output_file [-etc1|-etc1a] [-mipmaps]
  input_file  is the texture file to include in the output KTX or ZKTX file.
              for cube map, just provide 6 input files corresponding to the faces in the following order : X+, X-, Y+, Y-, Z+, Z-
  output_file is the path to the output file, its type is based on the extension which must be either KTX or ZKTX

  options:
    -etc1    input file will be packed using ETC1 compression, dropping the alpha channel
    -etc1a   input file will be packed using ETC1 compression, doubling the height and placing the alpha channel in the bottom half
    -mipmaps input file will be processed to generate mipmaps

  examples:
    KTXProcessor in.png out.ktx                                        Create a KTX file with the provided 2D texture
    KTXProcessor in.png out.zktx                                       Create a Zipped KTX file with the provided 2D texture
    KTXProcessor in.png out.zktx -mipmaps                              Create a Zipped KTX file with the provided 2D texture, generating all mipmap levels
    KTXProcessor px.ktx nx.ktx py.ktx ny.ktx pz.ktx nz.ktx out.zktx    Create a Zipped KTX file with the provided cubemap textures
    KTXProcessor in.ktx out.zktx                                       Convert a KTX file to a Zipped KTX file

また、KTX テクスチャファイルを用意するためサードパーティ製ツールもたくさんあります:

  • このOpenGL SDK には、KTX ファイルを作成するツールが用意されています。
  • このMali SDKには、KTX ファイルを作成するツールが用意されています。アルファチャンネル処理機能も搭載されています。


読み込み

KTX やZKTX で圧縮されたファイルは、他の画像ファイルと同じくらい簡単に読み込むことができます。:

Texture texture = new Texture(Gdx.files.internal("image.zktx"));