
KTX2 テクスチャ圧縮

テクスチャは現代のグラフィカルアプリケーションにおいて至る所で使用されています。モデルに色やマテリアル情報を与えます。
テクスチャの解像度が高いほど、より多くのディテールを得られます。今日では、高解像度カメラがより身近で手頃な価格になってきています。しかし、これにはメモリ使用量という代償が伴います。
JPEGやPNGのような圧縮画像フォーマットがあり、ディスクに保存された画像のメモリ使用量を削減します。これらのフォーマットはウェブアプリケーションにも役立ち、ネットワーク経由で転送するデータ量を減らし、ページの読み込み時間を効果的に短縮できます。しかし、JPEGのようなフォーマットはグラフィックスカード(GPU)で解釈できず、画像を圧縮するために設計されたものであり、レンダリング用ではありません。JPEG画像は、レンダリングのためにGPUに送信する前に解凍する必要があります。
以下は256×256の画像です。

GIMPで作成
高品質でJPEG圧縮すると、53.5 KBになります。
GPUで使用するためにRGBA8に解凍すると、256KBになります。約5倍のサイズです!
これは非常に小さな画像ですが、例として、4K画像(今日では非常に一般的です)は64MBになります。大規模なアプリケーションはテクスチャを含む多くのリソースを持つため、特にスマートフォン、タブレット、VRデバイスのようなローエンドデバイスでは、これが急速に積み重なりGPUメモリ(VRAM)を食い尽くす可能性があります。
テクスチャ圧縮フォーマットは、GPU内で画像を圧縮できるようにするために発明されました。これらの圧縮フォーマットは、最適なパフォーマンスを達成するためにGPUのアーキテクチャに適合するように設計されています。これは、VRAM使用量の削減だけでなく、以下のことにもつながります。
- GPUに転送する必要があるデータ量が少なくなるため、読み込み時間が高速化します。
- 内部転送帯域幅の要件が削減されるため、フレームレートが向上します。
異なるGPUメーカーが、主要な関係者と協力して、さまざまなテクスチャ圧縮フォーマットを考案しました。これらのフォーマットの例としては、次のようなものがあります。
- BC1、BC3、BC6H、BC7などのBCファミリー(S3TCとしても知られています)。これらのフォーマットはデスクトッププラットフォーム専用です。
- ETC1、ETC2、ETC2_EAC、EACで構成されるETC(Ericsson Texture Compression)ファミリー。これらのフォーマットは主にOpenGLで採用され、AndroidおよびWebGLプラットフォームで使用されています。
- PVRTCはPowerVRチップ専用のフォーマットファミリーです。iOSで唯一サポートされていたフォーマットであったため重要でした。現在、Appleが全デバイスにASTCを採用しつつあるため、時代遅れになりつつあります。
- ASTCは、今日最も先進的なテクスチャ圧縮フォーマットです。Khronosグループによって開発された標準規格であり、現在モバイルデバイスにおける事実上の標準フォーマットです。
想像できるように、これほど多くのテクスチャ圧縮フォーマットがあることは、複数のプラットフォームで良好なパフォーマンスを重視するアプリケーション開発者にとって大きな頭痛の種になりえます。
Khronosグループは、KTX2コンテナフォーマットとスーパー圧縮スキームによって、この断片化の問題を解決しようと試みました。これらについては、以降のセクションでさらに詳しく見ていきます。
KTX1
KTX2の前には、ご想像の通り、KTX1がありました。
KTX1は非常にシンプルな画像コンテナ形式でした。つまり、異なる形式の画像を含むことができる単なる形式です。上記の圧縮テクスチャ形式のいずれかを含むことができ、生のRGBA画像も含むことができました。シンプルで、ただ動作します。
問題は、多くのプラットフォームをサポートしたい場合、KTX1コンテナには各プラットフォーム固有のフォーマットの画像を含める必要があることでした。これは管理が難しく、同じ情報を各フォーマットで保存することを意味します(ファイルサイズが大きくなります)。
KTX2
KTX2は、トランスコード可能なフォーマットとスーパー圧縮スキームによって、断片化をさらに解決することを目指しています。
KTX1でサポートされている画像フォーマットに加えて、KTX2は2つのトランスコード可能なフォーマット、Universal ASTC(UASTC)とETC1Sを追加します。これらのフォーマットは、プラットフォーム固有のテクスチャ圧縮フォーマットに変換されるように設計されています。これらのいわゆるトランスコード可能なフォーマットからテクスチャ圧縮フォーマットへの変換は非常に高速であるため、ランタイム時に簡単に実行できるプロセスです(このプロセスはトランスコーディングと呼ばれます)。
その上で、KTX2はスーパー圧縮スキームのサポートを追加します。これは、トランスコード可能なフォーマットをディスク上でさらに圧縮する技術です。これらの技術により、JPEGと同程度のサイズ、あるいはそれよりも小さいKTX2ファイルを実現できます。

[https://www.khronos.org/ktx/ からの画像]
画像をKTXに変換する方法
画像をKTXに変換するには、公式のKTX-Softwareコマンドラインツールを使用できます。
コマンドラインツールはソースからコンパイルできますが、最も簡単な方法はReleasesセクションからインストーラーをダウンロードすることです。
インストール時に「Command line tools」チェックボックスがオンになっていることを確認してください。

インストールフォルダ内に必要なツールがあります: toktx.exe
基本コマンド:
| toktx.exe –encode uastc –zcmp 15 –genmipmap output.ktx input.jpg |
–zcmp: ディスク上の圧縮レベルを設定します。
–genmipmap: ミップマップチェーン全体を生成し、KTXファイルに保存します。圧縮テクスチャのミップマップチェーン生成は負荷が高いため、ランタイムでの実行を避けるために推奨されます。
もう一つの興味深いオプションは–uastc_qualityで、品質と圧縮速度のバランスを微調整できます。
| toktx.exe –encode uastc –zcmp 15 –genmipmap –uastc_quality 3 output.ktx input.jpg |
toktxには多数のオプションがありますので、ぜひご確認ください:
| toktx.exe –help |
ベンチマーク
簡単な例として、PBRマテリアルを適用したシンプルな球体を使用します。
一方がJPG画像を使用し、もう一方がKTX画像を使用している点を除き、同一のマテリアルを2つ作成しました。

ご覧の通り、KTXを使用するとVRAM使用量が大幅に削減されます。JPG使用時は4枚の画像で合計128MBのVRAMを消費するのに対し、KTX使用時は32MBです。最終的な画質は同等であり、違いに気づくことはないでしょう。
さらに、常にそうとは限りませんが、多くの画像においてKTXはJPGよりもディスク容量が少なくて済むようです。
このテストでは、公式の「toktx」コマンドラインツールを使用してJPG画像をKTXに変換しました。このコマンドラインツールに渡す最適なパラメータセットを見つけるには、トレードオフを伴うため、一種の技量が求められます。品質/パフォーマンス要件を考慮し、アプリケーションの画像に最適なパラメータを見つけるようにしてください。例えば、法線マップは通常、カラーマップよりも高い精度が要求されます。
前の例で使用したパラメータは以下の通りです:
| カラー: & 'C:\Program Files\KTX-Software\bin\toktx.exe' –encode uastc –genmipmap –assign_oetf srgb –target_type RGB –uastc_quality 3 –uastc_rdo_l 4 –zcmp 20 .\Ktx\Bricks_color.ktx .\Jpg\Bricks_color.jpg
法線: & 'C:\Program Files\KTX-Software\bin\toktx.exe' –encode uastc –genmipmap –assign_oetf linear –target_type RGB –normalize –uastc_quality 3 –uastc_rdo_l 0.5 –zcmp 20 .\Ktx\Bricks_normals.ktx .\Jpg\Bricks_normals.jpg
PBR: & 'C:\Program Files\KTX-Software\bin\toktx.exe' –encode uastc –genmipmap –assign_oetf linear –target_type RG –uastc_quality 3 –uastc_rdo_l 1 –zcmp 20 .\Ktx\Bricks_pbr.ktx .\Jpg\Bricks_pbr.jpg
AO: & 'C:\Program Files\KTX-Software\bin\toktx.exe' –encode uastc –genmipmap –assign_oetf linear –target_type R –uastc_quality 3 –uastc_rdo_l 4 –zcmp 20 .\Ktx\Bricks_AO.ktx .\Jpg\Bricks_AO.jpg |
EvergineにおけるKTX
Evergine 2025.10では、KTX1とKTX2の両方、およびすべてのプラットフォーム固有の圧縮テクスチャ形式のサポートを追加しました。
これはすべてのアプリケーションにとって朗報ですが、特にWebアプリケーションでは、その採用によりロード時間が大幅に改善されます。
最小限の投資でグラフィカルアプリケーションを最適化できるようになりました。すべてがエンジンにシームレスに統合されており、非常に使いやすくなっています。
ユーザーは、他の画像形式と同様にエディターでKTX2ファイルをインポートし、マテリアルで使用できます。ファイル拡張子は「.ktx」または「.ktx2」である必要があります。
Evergine.ImageRuntimeが拡張され、KTX2ファイルの読み込みが可能になりました。
GLTFファイルにKTX画像が含まれている場合(埋め込みまたは参照)、すべてがそのまま動作します。
