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

Kanzi では、ASTC、ATC、ETC、PVRTC アルゴリズムを使用してテクスチャを圧縮することができ、プリコンプレッションされた DXT テクスチャも使用できます。

アプリケーションがメモリから処理可能な量を超えてデータを読み取ろうとすると、メモリの読み取りがアプリケーションのパフォーマンスのボトルネックになります。ターゲットハードウェアがこれらの圧縮方法のいずれかをサポートしている場合、テクスチャ圧縮を使用してメモリ帯域幅を削減し、アプリケーションのパフォーマンスを向上させてください。最新の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 アルゴリズムは、古い ATC、ETC、および PVRTC アルゴリズムよりも小さいファイルを作成し、より良い画像品質を提供します。

画像とキューブマップテクスチャには ASTC 圧縮を使用できます。

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

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

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

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

    • 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
    • ASTC sRGB Variant へ:

      • False は、画像フォーマットにリニアスペースを使用します。これは最も一般的なユースケースです。

      • True は、画像フォーマットに sRGB カラースペースを使用します。これにより、画像は圧縮前に sRGB カラースペースから線形スペースに変換され、GPUでの解凍後に再び sRGB カラースペースに戻されます。

      ../../_images/astc-srgb-variant.png

キューブマップテクスチャに ASTC 圧縮を使用するには、キューブマップテクスチャの画像プロパティを設定します。Kanzi Studio は、キューブマップの6つの面すべてに ASTC 圧縮の設定を適用します。

キューブマップテクスチャで ASTC 圧縮を使用する方法については、キューブマップテクスチャの使用 を参照してください。

ATC アルゴリズムの使用

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

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

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

    ../../_images/target-format-atc-compression.png
  3. ATC Compression Scheme プロパティを次のように設定します:

    • Explicit alpha。RGBA 画像。各ピクセルでアルファ値が明示的であり、データは圧縮率 1:4 で pixel_count / 1 まで圧縮されます。

    • Interpolated alpha。RGBA 画像。アルファ値はピクセル間で補間され、データは圧縮率 1:4 で pixel_count / 1 まで圧縮されます。

    • No alpha。RGB画像、データはpixel_count / 2に圧縮され、1:6の圧縮率を実現します。

    ../../_images/atc-compression-scheme.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 with alpha がアルファチャンネルを含む画像でETC2圧縮方式を使用する

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

PVRTC アルゴリズムの使用

PVRTC アルゴリズムは写実的なテクスチャに最適です。

Kanzi は、PVRTC1 および PVRTC2 スキームに従った PVRTC 圧縮をサポートしています。

PVRTC2は、特にシャープなアルファトランジションを必要とするテクスチャにおいて、PVRTC1よりも高品質ですが、すべてのPowerVRハードウェアでサポートされているわけではありません。さらに、PVRTC圧縮をサポートしているのは、Imagination Technologiesのハードウェア、または開発用エミュレーターを使用するデスクトッププラットフォームのみです。

注釈

PVRTC アルゴリズムを使用してテクスチャを圧縮する場合、正しい圧縮結果を得るには、テクスチャが正方形で 2 の累乗のサイズである必要があります。

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

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

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

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

    • PVRTC Bit Depth を次のいずれかに:

      • 2 bits/pixel は、より小さいが低品質のテクスチャを生成します。

      • 4 bits/pixel はより大きなサイズになりますが、高品質なテクスチャを生成します。4 bits/pixel ビット深度では、テクスチャファイルのサイズは 2 bits/pixel テクスチャの2倍になりますが、より高品質なテクスチャを生成します。

    • PVRTC Encoding Quality を Fastest、Fast、Normal、High、または Best のいずれかに。

      これらの値は、圧縮後のサイズや圧縮解除にかかる時間ではなく、圧縮にかかる時間と画像品質に対応しています。最良の最終結果を得るには、Best を使用してください。開発中は、Fastest が最も役立ちます。

    • PVRTC Compression Scheme を PVRTC1 または PVRTC2 にします。どちらのスキームも RGB および RGBA テクスチャをサポートしています。Kanzi は、アルファチャンネルを含むすべての画像に対して自動的に RGBA を使用します。

    • Premultiply Alpha。アルファチャンネルを含む画像でアルファチャンネルを色チャンネルにプリマルチプライ処理する場合は、True を選択し、そうでない場合は False を選択します。このプロパティの値を Kanzi Studio プロジェクトプロパティ Use Premultiplied Alpha by Default で制御したい場合は、Project default を選択します。Kanzi Studio プロジェクトの設定 を参照してください。

      ../../_images/pvrtc-settings.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 プロジェクトの設定