ブログに戻る
基本

テクスチャ圧縮とは何ですか?

8 最小読み取り

テクスチャ圧縮は、開発者がメモリ使用量を削減し、レンダリング パフォーマンスを向上させることを可能にする最新のグラフィックス プログラミングの基本的な技術です。この記事では、テクスチャ圧縮とは何か、それが不可欠な理由、およびその仕組みについて説明します。

テクスチャ圧縮とは何ですか?

テクスチャ圧縮は、グラフィックス ハードウェア (GPU) で使用するために特別に設計された特殊な形式の画像圧縮です。 JPEG や PNG などの汎用画像形式とは異なり、テクスチャ圧縮形式は、レンダリング中の GPU によるリアルタイムのランダム アクセス用に最適化されています。

従来の画像形式は使用前に完全に解凍する必要がありますが、テクスチャ圧縮形式は GPU がテクセルをサンプリングするときにオンザフライで解凍できます。これにより、圧縮されたテクスチャを GPU メモリ内で圧縮したままにすることができ、メモリ帯域幅とストレージ要件が大幅に削減されます。

主な違いは、テクスチャ圧縮アルゴリズムが GPU 上の専用ハードウェアによってデコードされるように設計されており、パフォーマンスの点で圧縮解除が事実上無料になることです。

テクスチャ圧縮を使用する理由

テクスチャ圧縮は、グラフィックス アプリケーションにいくつかの重要な利点をもたらします。

メモリ使用量の削減

圧縮テクスチャは、非圧縮テクスチャと比較してメモリ消費量を 4 倍から 8 倍削減できるため、より詳細で多様なコンテンツが可能になります。

メモリ帯域幅の低下

メモリと GPU の間で転送されるデータが少なくなると、パフォーマンスが向上し、消費電力が低減されます。これは特にモバイル デバイスにとって重要です。

パフォーマンスの向上

メモリ トラフィックが削減されると、フレーム レートが大幅に向上し、GPU バウンドのシナリオでのレンダリング遅延が短縮されます。

ビジュアル品質の向上

メモリの節約により、開発者は同じメモリ バジェット内でより高解像度のテクスチャやより多くのテクスチャ バリエーションを使用できるようになります。

一般的なテクスチャ圧縮形式

プラットフォームや GPU が異なれば、サポートされる圧縮形式も異なります。最も広く使用されているものは次のとおりです。

ETC1/ETC2 (エリクソン テクスチャ圧縮)

Android デバイスと OpenGL ES の標準形式。 ETC1 は RGB のみをサポートしますが、ETC2 ではアルファ チャネルのサポートが追加され、品質が向上します。

プラットフォーム: Android、OpenGL ES 3.0以降

ASTC (適応型スケーラブル テクスチャ圧縮)

複数のブロック サイズ (4x4 ~ 12x12) と品質レベルをサポートする最新の柔軟な形式。優れた品質対圧縮比制御を実現します。

プラットフォーム: 最新のモバイル GPU、Vulkan、OpenGL ES 3.2+

PVRTC (PowerVR テクスチャ圧縮)

主に PowerVR GPU を搭載した iOS デバイスで使用される形式。優れた圧縮率で知られていますが、特定のコンテンツにアーティファクトが表示される場合があります。

プラットフォーム: iOS、PowerVR GPU を搭載した古い Android デバイス

DXT/BCn (S3 テクスチャ圧縮/ブロック圧縮)

デスクトップ標準。BCn (ブロック圧縮) とも呼ばれます。 DXT1/BC1 ~ DXT5/BC3 が最も一般的で、BC6H と BC7 は HDR とより高品質を提供します。

プラットフォーム: デスクトップ (Windows、DirectX、OpenGL)

ベーシスユニバーサル

実行時にネイティブ GPU 形式に変換できるトランスコーディング形式。単一の圧縮ファイルをすべてのプラットフォームで使用できるようにします。

プラットフォーム: クロスプラットフォーム (ETC、ASTC、DXT などにトランスコード)

テクスチャ圧縮の仕組み

ほとんどのテクスチャ圧縮アルゴリズムは、画像を小さなブロック (通常は 4x4 ピクセル) に分割し、各ブロックを個別にエンコードすることで機能します。このブロックベースのアプローチにより、ランダム アクセスが可能になります。GPU は、特定のテクスチャ サンプルに必要なブロックだけを解凍できます。

各ブロック内で、アルゴリズムは通常、色の小さなパレット (通常は 2 ~ 4 色) と、各ピクセルがどのパレット カラーを使用するかを示すインデックス値を保存します。 ASTC などのより高度な形式では、より優れた品質を達成するために洗練された補間スキームが使用されます。

圧縮の例

さまざまな圧縮レベルの 512x512 RGBA テクスチャ:

非圧縮: 512 × 512 × 4 バイト = 1,048,576 バイト (1 MB)
圧縮 (ASTC 6x6): 512 × 512 / (6 × 6) × 16 バイト = 116,508 バイト (~114 KB)
圧縮率:9:1(89%サイズ縮小)

ベストプラクティス

  • ターゲット プラットフォームに適切な形式を選択します。モバイルには ETC2/ASTC、デスクトップには BCn を使用します。
  • 複数の圧縮品質を使用することを検討してください。重要なテクスチャには高品質、背景には低品質を使用します。
  • さまざまなブロック サイズ (ASTC の場合) をテストして、品質とファイル サイズの最適なバランスを見つけます。
  • テクスチャ タイプごとに異なるフォーマットを使用します - 法線マップにはカラー マップとは異なる設定が必要になることがよくあります
  • ターゲット アプリケーションで圧縮テクスチャを常にプレビューして、視覚的な品質を確認してください

結論

テクスチャ圧縮は、最新のグラフィックス開発にとって不可欠なツールであり、パフォーマンスの向上、メモリ使用量の削減、およびビジュアル品質の向上を可能にします。利用可能な形式とそのトレードオフを理解することは、プロジェクトに対して情報に基づいた意思決定を行うのに役立ちます。

モバイル、デスクトップ、または Web プラットフォーム向けに開発している場合でも、テクスチャ圧縮によりアプリケーションの効率と視覚的な忠実度が大幅に向上します。当社のオンライン ツールを使用すると、さまざまな形式や設定を簡単に試して、ニーズに最適なバランスを見つけることができます。

詳細な資料と参考資料

これらの厳選されたリソースで知識を広げてください。