テクスチャを圧縮する (Compressing textures)

Kanzi では ASTC および ETC アルゴリズムを使用してテクスチャを圧縮し、事前圧縮された DXT テクスチャを扱うこともできます。Kanzi は、超圧縮された LDR/HDR GPU テクスチャ交換システムである Basis Universal もサポートしています。

アプリケーションがメモリから処理可能な量を超えるデータを読み取ろうとすると、メモリの読み取りがアプリケーションのパフォーマンスのボトルネックになります。ターゲットハードウェアでこれらの圧縮方式のいずれかがサポートされている場合は、テクスチャ圧縮を使用してメモリ帯域幅を削減し、アプリケーションのパフォーマンスを向上させます。最新の ASTC アルゴリズムを使用すると、相対的に最も小さいファイルサイズと最高の画像品質を実現できます。

最もパフォーマンスの良い圧縮レベルは、ターゲットデバイスによって異なります。高い圧縮レベルはより多くのCPUを使用しますが、メモリ帯域幅は少なくなります。一方、低い圧縮レベルはCPUの使用が少ないですが、メモリ帯域幅をより多く使用します。

Kanzi アプリケーションは、圧縮されたテクスチャを直接GPUに送信し、交換されるデータ量を削減し、実行時にCPU側での前処理(例えば、libJPEGやlibPNGの読み込み)を必要としません。

たとえば、アンパックされた 256 x 256 ピクセルの RGB テクスチャは 196 kb (256 * 256 * 3 バイト) を使用します。圧縮された場合:

  • ASTC を使用した圧縮では、このテクスチャはブロックサイズ 8x8 で 16 kb (((256/8)^2)*16)/1024 を使用します。ブロックサイズ 12x12 では、テクスチャは 8 kb を使用します。

  • ETC を使用した圧縮では、このテクスチャは 32 kb (256 * 256 / 2) を使用します。

../../_images/compressing-textures.svg

ターゲットハードウェアでいずれの圧縮アルゴリズムもサポートされない場合は、raw 画像形式を使用すると、どの圧縮アルゴリズムよりも高速になることがあります。これは特に、小さな画像を 1 つずつ処理する場合に当てはまります。

ターゲットハードウェアが選択したテクスチャ圧縮アルゴリズムをサポートしていない場合、ターゲットデバイスで Kanzi アプリケーションを実行すると、Kanzi がログに警告メッセージを出力します。Kanzi は、ターゲットハードウェアがサポートしていない圧縮テクスチャフォーマットを使用している表面を黒く塗ります。

OpenGLはDXTテクスチャデータが下から始まることを期待しているため、DXTファイルを上下反転して圧縮してください。Kanzi アプリケーションでDXTファイルを使用することはできますが、GPUの制限により、WindowsエミュレーションではDXTファイルはサポートされていません。画像のインポート を参照してください。

Kanzi Studio は kzb ファイルを作成する際に画像を圧縮しますが、手動で圧縮することもできます。詳細は 手動による画像の前処理 を参照してください。

ヒント

Kanzi Studio が画像を圧縮する際、デフォルトでコンピュータのすべての利用可能なCPUリソースを使用します。Kanzi Studio が複数の画像を圧縮している間に他のアプリケーションのためにCPUリソースを解放するには、Edit > User Preferences を選択し、Properties タブで Images to compress in parallel 設定の値を調整します。

Images to compress in parallel 設定は、複数の画像を前処理する際に Kanzi Studio が使用する論理コアの数を制限します。コンピュータの論理コアの数が Maximum 値を決定します。

../../_images/images-to-compress-in-parallel.png

ASTC アルゴリズムの使用

ターゲットハードウェアで ASTC アルゴリズムがサポートされている場合は、ASTC アルゴリズムを使用すると最適な結果が得られます。ASTC アルゴリズムでは、ETC アルゴリズムに比べて小さなファイルが作成され、画像品質が高くなります。

ASTC アルゴリズムを使用するには:

  1. Library の Kanzi Studio で Resource Files > Images を選択し、圧縮を適用したい画像を選択します。

  2. Properties で Target Format プロパティを ASTC に設定します。

    ../../_images/target-format-astc-compression.png
  3. Properties セット内で:

    • 圧縮カラープロファイルを選択するには ASTC Profile を設定します。

      LDR linear、LDR sRGB、HDR + LDA A、HDRA は、圧縮カラープロファイルを表します。

      • LDR linear は、リニア LDR カラープロファイルを使用します。

      • LDR sRGB は、sRGB LDR カラープロファイルを使用します。

      • HDR + LDR A は、LDR アルファ付きの HDR RGB 向けに調整された HDR カラープロファイルを使用します。

      • HDRA は、HDR RGBA 向けに調整された HDR カラープロファイルを使用します。

      ../../_images/astc-color-profile.png
    • ASTC Block Size を、画像を圧縮するために使用したいピクセル単位のブロックサイズに設定します。

      ASTCでは、1つの圧縮ブロックのサイズは常に128ビットです。ブロック内のピクセル数が少ないほど、圧縮画像の画質は向上しますが、ファイルサイズが大きくなります。1ブロックあたり4x4ピクセルは、サポートされている中で最大かつ最も見栄えの良い値であり、1ブロックあたり12x12ピクセルは最小のファイルサイズを生成します。

      ../../_images/astc-block-size.png
    • ASTC Compression Speed が画像を圧縮するのにかかる時間。

      Very fast、Fast、Medium、Thorough、および Exhaustive は、圧縮画像のファイルサイズや解凍時間ではなく、画像を圧縮するのにかかる時間と画像の品質を指します。

      • Very fast は画像を圧縮するのに最も時間がかかりません。

      • Exhaustive は画像を圧縮するのに最も時間がかかりますが、最高の品質を実現します。

      迅速である程度良い結果を得るには高速圧縮を使用し、高い品質を得るには低速圧縮を使用します。

      例えば、ベストプラクティスとして最終的な結果を得るためには Exhaustive を使用してください。開発中は Very fast が最も役立ちます。

      ../../_images/astc-compression-speed.png

ETC アルゴリズムの使用

ETC アルゴリズムを使用するには:

  1. Library の Kanzi Studio で Resource Files > Images を選択し、圧縮を適用したい画像を選択します。

  2. Properties で、使用したいETC圧縮に Target Format プロパティを設定します。

    • ETC の fast、medium、および slow は、画像圧縮の速度と画像品質を指し、結果としてのサイズや解凍時間を指すものではありません。Slow は最高の画像品質を返します。

      ETC1 圧縮方式で最良の最終結果を得るには、ETC slow perceptual を使用してください。

    • ETC 知覚的 とは、人間の視覚システムの色の親和性に基づいて、赤と青の色チャンネルよりも緑の色チャンネルを強調することを指します。

      開発時に ETC1 圧縮方式を使用する場合、ETC fast が最も役立ちます。

    • ETC2 圧縮方式を使用するには、ETC2 を使用します。

      ETC2 圧縮の品質を設定するには、Effort プロパティを使用します。

      Effort の値は、圧縮時間と画像品質に対応しており、結果のサイズや解凍時間には対応していません。最高の画像品質を得るには、Effort を 100 に設定します。開発中は、圧縮時間が最も短くなる 0 が最も便利です。

    • アルファチャンネル付き画像に ETC2 圧縮方式を使用するには、ETC2 with alpha を使用します。

    ../../_images/target-format-etc-compression.png ../../_images/etc2-compression-effort.png

Basis Universal アルゴリズムの使用

Basis Universal アルゴリズムを使用するには:

  1. Library の Kanzi Studio で Resource Files > Images を選択し、圧縮を適用したい画像を選択します。

  2. Properties で Target Format プロパティを Basis Universal に設定します。

  3. Properties セット内で:

    • テクスチャモードを選択するには Basis Universal Texture Mode を設定します。

      UASTC LDR、UASTC HDR 4x4、UASTC HDR 6x6、ETC1S はテクスチャモードを表します。

      • UASTC LDR は、他の LDR テクスチャフォーマットへの非常に高速なトランスコード向けに設計された、ASTC 4x4 に似たカスタムフォーマットを使用します。画質は高くなります。

      • UASTC HDR 4x4 は、標準 ASTC HDR 4x4 テクスチャデータを使用しますが、BC6H への非常に高速なトランスコード向けに制約されています。

      • UASTC HDR 6x6 は、標準 ASTC HDR 6x6 を使用します。

      • ETC1S は、他の LDR テクスチャフォーマットへの非常に高速なトランスコード向けに設計された、ETC1 を超圧縮したサブセットを使用します。画質は低~中程度ですが、圧縮率は高くなります。

    • UASTC 4x4 圧縮レベルを選択するには UASTC Encoding Level を設定します。

    ../../_images/uastc-encoding-level.png
    • ETC1S 圧縮レベルを選択するには ETC1S Encoding Level を設定します。

    ../../_images/etc1s-encoding-level.png

手動による画像の前処理

Kanzi Studio はkzbファイルを作成する際に画像を圧縮しますが、手動で圧縮することもできます。画像を手動でプリプロセスするには、Library > Resource Files > Images でプリプロセスしたい画像を1つ以上右クリックし、Preprocess images を選択します。

../../_images/preprocess-images.png

ヒント

Kanzi Studio が画像を圧縮する際、デフォルトでコンピュータのすべての利用可能なCPUリソースを使用します。Kanzi Studio が複数の画像を圧縮している間に他のアプリケーションのためにCPUリソースを解放するには、Edit > User Preferences を選択し、Properties タブで Images to compress in parallel 設定の値を調整します。

Images to compress in parallel 設定は、複数の画像を前処理する際に Kanzi Studio が使用する論理コアの数を制限します。コンピュータの論理コアの数が Maximum 値を決定します。

../../_images/images-to-compress-in-parallel.png

関連項目

データサイズの調整

リソースを並列でロードする

ミップマップ (Mipmap) の使用

テクスチャ (Texture) のフィルタリング

タイルアトラスを使用する

アプリケーションのパフォーマンスのトラブルシューティング

イメージ (Images)

Kanzi Studio プロジェクトの設定